首页 > 编程笔记 > Java笔记 阅读:2

访问Servlet类的2种方式(附带实例)

本文将对 Servlet 类的访问进行讲解,主要分为 2 种,通过表单访问 Servlet 类和通过 JSP 页面访问 Servlet 类。

通过表单访问Servlet类

Servlet 可以自动完成对 HTML 表单数据的读取操作。在 Servlet 中只需要简单地调用 HttpServletRequest 对象的 getParameter() 方法,在调用参数中提供表单变量的名字即可:
如果表单变量可能对应多个值,就可以用 getParameterValues() 方法来取代 getParameter() 方法。getParameterValues() 方法能够返回一个字符串数组。

另外,在调试环境中,需要获得完整的表单变量名称列表。利用 HttpServletRequest 对象的 getParameterNames() 方法可以方便地实现这一点。getParameterNames() 方法返回的是一个 Enumeration 类型的函数,其中的每一项都可以转换为调用 getParameter() 方法的字符串。

【实例】利用 Servlet 读取注册表单中的信息。index.jsp 页面的代码如下:
<form action="RegisterServlet" method="post">
     <table width="80%" border="0" align="center" bgcolor="#0099ff">
          <tr>
               <th colspan="2" scope="col">用户注册</th>
          </tr>
          <tr bgcolor="#FFFFFF">
               <th scope="row">用户名:</th>
               <td><input name="userName" type="text" id="userName"></td>
          </tr>
          <tr bgcolor="#FFFFFF">
               <th scope="row">密码:</th>
               <td><input name="userPwd" type="password" id="userPwd"></td>
          </tr>
          <tr bgcolor="#FFFFFF">
               <th scope="row">电子邮箱:</th>
               <td><input name="email" type="text" id="email"></td>
          </tr>
          <tr bgcolor="#FFFFFF">
               <th scope="row">性别:</th>
               <td><input type="radio" name="userSex" id="userMale" value=" 男">男
                    <input type="radio" name="userSex" id="userFemale" value=" 女">女
               </td>
          </tr>
          <tr bgcolor="#FFFFFF">
               <th scope="row">教育程度:</th>
               <td>
                   <select name="userEducation" id="userEducation" >
                        <option value=" 研究生">研究生</option>
                        <option value=" 本科">本科</option>
                        <option value=" 专科">专科</option>
                        <option value=" 高中">高中</option>
                   </select>
               </td>
          </tr>
          <tr bgcolor="#FFFFFF">
               <th scope="row">&nbsp;</th>
               <td><input type="submit" name="Snbmit" value="提交">
                    <input type="reset" name="Reset" value="重置">
               </td>
          </tr>
     </table>
</form>

RegisterServlet.java 文件的代码如下:
public class RegisterServlet extends HttpServlet {
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          response.setContentType("text/html");
          response.setCharacterEncoding("utf-8");
          request.setCharacterEncoding("utf-8");
          String userName = request.getParameter("userName");
          String userPwd = request.getParameter("userPwd");
          String email = request.getParameter("email");
          String userSex = request.getParameter("userSex");
          String userEducation = request.getParameter("userEducation");
          PrintWriter out = response.getWriter();
          out.println("<HTML>");
          out.println("  <HEAD><TITLE>用户注册结果 </TITLE></HEAD>");
          out.println("  <BODY><br/>");
          out.println("<h3>用户注册结果</h3>");
          out.println("<table border=1 align=left");
          out.println("<tr><th>参数</th><th>参数值</th></tr>");
          out.println("<tr><td>userName</td><td>" + userName + "</td></tr>");
          out.println("<tr><td>userPwd</td><td>" + userPwd + "</td></tr>");
          out.println("<tr><td>email</td><td>" + email + "</td></tr>");
          out.println("<tr><td>userSex</td><td>" + userSex + "</td></tr>");
          out.println("<tr><td>userEducation</td><td>" + userEducation + "</td></tr>");
          out.println("</table></BODY>");
          out.println("</HTML>");
          out.flush();
          out.close();  ;
     }
     protected void  doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          doPost(request, response);
     }
}

web.xml 文件的代码如下:
<servlet>
          <servlet-name>RegisterServlet</servlet-name>
          <servlet-class>com.it.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
          <servlet-name>RegisterServlet</servlet-name>
          <url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
运行效果如下图所示:


图 1 用户注册运行效果

通过JSP页面访问Servlet类

尽管可以用在浏览器的地址栏中直接键入 Servlet 对象的请求格式来运行一个 Servlet,但可能会经常通过一个 JSP 页面来请求一个 Servlet。也就是说,可以让 JSP 页面负责数据的显示,而让一个 Servlet 去做和处理数据有关的事情。

【实例 2】单击超链接,利用 Servlet 对象输出英文字母表。index.jsp 页面的代码如下:
<html>
  <head>
    <title>英文字母表</title>
  </head>
  <body>
    <font size="3">
      单击超链接查看英文字母表:<br>
      <a href="ShowLetterServlet">查看英文字母表</a>
    </font>
  </body>
</html>

ShowLetterServlet.java 文件的代码如下:
public class ShowLetterServlet extends HttpServlet {
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          response.setContentType("text/html;charset=UTF-8");
          PrintWriter out = response.getWriter();
          out.println("<html><body>");
          out.println("<br>小写字母:");
          for (char ch = 'a'; ch <= 'z'; ch++) {
               out.printf("%-3c", ch);
          }
          out.println("<br>大写字母:");
          for (char ch = 'A'; ch <= 'Z'; ch++) {
               out.printf("%3c", ch);
          }
          out.println("</body></html>");
     }
     protected void  doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          doPost(request, response);
     }
}

web.xml 文件的代码如下:
<welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
     <servlet-name>ShowLetterServlet</servlet-name>
     <servlet-class>com.it.ShowLetterServlet</servlet-class>
</servlet>
<servlet-mapping>
     <servlet-name>ShowLetterServlet</servlet-name>
     <url-pattern>/ShowLetterServlet</url-pattern>
</servlet-mapping>
运行效果如下图所示:


图 2 英文字母表运行效果

Servlet 体系基于 B/S 架构开发 Web 应用程序,使用 Servlet 类将 HTTP 请求和响应封装在标准 Java 类中来实现各种 Web 应用方案。

当大量的 B/S 架构程序被开发出来以后,出现了很多问题:首先是 Servlet 类有大量冗余代码,其次是开发 Servlet 时,无法做到有精美的页面效果。所以 Sun 公司提出将服务器代码添加在已经设计好的静态页面上,经过 JSP 容器对 JSP 文件进行自动解析并转换成 Servlet 类来交给 Web 服务器运行。

所以 JSP 在本质上就是 Servlet,但是两者的创建方式不一样。Servlet 都是由 Java 程序代码构成,用于流程控制和事务处理,通过 Servlet 来生成动态网页很不直观。而 JSP 由 HTML 代码和 JSP 标记构成,可以方便地编写动态网页。

相关文章