访问Servlet类的2种方式(附带实例)
本文将对 Servlet 类的访问进行讲解,主要分为 2 种,通过表单访问 Servlet 类和通过 JSP 页面访问 Servlet 类。
如果表单变量可能对应多个值,就可以用 getParameterValues() 方法来取代 getParameter() 方法。getParameterValues() 方法能够返回一个字符串数组。
另外,在调试环境中,需要获得完整的表单变量名称列表。利用 HttpServletRequest 对象的 getParameterNames() 方法可以方便地实现这一点。getParameterNames() 方法返回的是一个 Enumeration 类型的函数,其中的每一项都可以转换为调用 getParameter() 方法的字符串。
【实例】利用 Servlet 读取注册表单中的信息。index.jsp 页面的代码如下:
RegisterServlet.java 文件的代码如下:
web.xml 文件的代码如下:

图 1 用户注册运行效果
【实例 2】单击超链接,利用 Servlet 对象输出英文字母表。index.jsp 页面的代码如下:
ShowLetterServlet.java 文件的代码如下:
web.xml 文件的代码如下:

图 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 标记构成,可以方便地编写动态网页。
通过表单访问Servlet类
Servlet 可以自动完成对 HTML 表单数据的读取操作。在 Servlet 中只需要简单地调用 HttpServletRequest 对象的 getParameter() 方法,在调用参数中提供表单变量的名字即可:- 如果指定的表单变量存在,但没有值,getParameter() 方法可以返回空字符串;
- 如果指定的表单变量不存在,则返回 NULL。
如果表单变量可能对应多个值,就可以用 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"> </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 标记构成,可以方便地编写动态网页。