访问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 标记构成,可以方便地编写动态网页。
ICP备案:
公安联网备案: