首页 > 数据库 > 数据库开发技术 > 今天的主角:HttpServlet
该类继承自 GenericServlet。使用 HttpServlet时,还要借助分别代表 Servlet请求和 Servlet响应的 HttpServletRequest和 HttpServletResponse对象。 HttpServletRequest扩展了 javax.servlet.ServletRequest接口, HttpServletResponse扩展了 javax.servlet.ServletResponse接口。 HttpServlet类覆盖了 GenericServlet中的 service方法,并添加了一个新的 service方法。下面是覆盖了基类中的 service方法:
protected void service(ServletRequest req, ServletResponse res)
throws ServletException, java.io.IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
}
catch(ClassCastException e) {
throw new ServletException("not-HTTP request or response");
}
service(request, response);
}
新的 service方法和基类中的 service方法之间的区别在于,前者接受的是 HttpServletRequest和 HttpServletResponse,而不是 ServletRequest和 ServletResponse。
总之, HttpServlet有两个特性是 GenericServlet所不具备的:
● 不用覆盖 service方法,而是覆盖 doGet或者 doPost方法,或覆盖 doGet和 doPost方法。在少数情况下,还会覆盖以下任意方法: doHead、 doPut、 doTrace、 doOptions和 doDelete方法。
● 使用的是 HttpServletRequest和 HttpServletResponse,而不是 ServletRequest和 ServletResponse。
HttpServletRequest:表示HTTP环境中的 Servlet请求。它扩展了 javax.servlet.ServletRequest接口,并添加了以下几个方法:
● String getContextPath():获取表示请求的上下文的请求URL部分
● Cookie[ ] getCookies():返回一个Cookie对象数组
● String getHeader(String name):返回指定HTTP标题的值
● String getMethod():返回生成这个请求的HTTP方法名称
● HttpSession getSession():返回与这个请求相关的会话对象。如果没有,将创建一个新的会话
● HttpSession getSession(boolean create):返回与这个请求相关的会话对象。如果没有,并且create参数为true,将创建一个新的会话对象
HttpServletResponse:表示HTTP环境中的 Servlet响应。以下是常用的几个方法:
● void addCookie(Cookie cookie):给这个响应对象添加一个cookie
● void addHeader(String name, String value):给这个响应对象添加一个header
● void sendRedirect(String location):将浏览器跳转到指定的位置
HttpServlet最常用的两个方法: doGet(), doPost(),下面我们就来看看使用这个连个方法处理 HTML表单的实例:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FormServlet
*/
@WebServlet(name = "FormServlet", urlPatterns = {"/form"})
public class FormServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String TITLE = "Order Form";
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>" + TITLE + "</title></head>");
writer.println("<body><h1>" + TITLE + "</h1>");
writer.println("<form method = 'post'>");
writer.println("<table>");
writer.println("<tr>");
writer.println("<td>Name: </td>");
writer.println("<td><input type='text' name = 'name' /></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Address: </td>");
writer.println("<td><textarea name = 'address'"
+ "cols = '40' rows = '5'></textarea></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Country: </td>");
writer.println("<td><select name = 'country'>");
writer.println("<option>United States</option>");
writer.println("<option>Canada</option>");
writer.println("</select></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Delivery Method: </td>");
writer.println("<td><input type='radio' name = 'deliveryMethod'"
+ "value = 'First Class' />First Class");
writer.println("<input type='radio' name = 'deliveryMthod'"
+ "value = 'Second Class' />Second Class</td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Shipping Instructions: </td>");
writer.println("<td><textarea name = 'instruction'"
+ "cols = '40' rows = '5'></textarea></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td> </td>");
writer.println("<td><textarea name = 'instruction'"
+ "cols = '40' rows = '5'></textarea></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Please send me the latest product catalog: </td>");
writer.println("<td><input type = 'checkbox' name = 'catalogRequest' /></td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td> </td>");
writer.println("<td><input type = 'reset' value = 'reset' />"
+ "<input type = 'submit' value = 'submit' /></td>");
writer.println("</tr>");
writer.println("</table>");
writer.println("</form>");
writer.println("</body>");
writer.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("<title>" + TITLE + "</title>");
writer.println("</head>");
writer.println("<body><h1>" + TITLE + "</h1>");
writer.println("<table>");
writer.println("<tr>");
writer.println("<td>Name: </td>");
writer.println("<td>" + request.getParameter("name") + "</td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Address: </td>");
writer.println("<td>" + request.getParameter("address") + "</td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Country: </td>");
writer.println("<td>" + request.getParameter("country") + "</td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Shipping Instructions: </td>");
writer.println("<td>");
String[] instructions = request.getParameterValues("instruction");
if(instructions != null){
for(String instruction : instructions)
writer.println(instruction + "<br/>");
}
writer.println("</td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Delivery Method: </td>");
writer.println("<td>" + request.getParameter("deliveryMethod") + "</td>");
writer.println("</tr>");
writer.println("<tr>");
writer.println("<td>Catalog Request: </td>");
writer.println("<td>");
if(request.getParameter("catalogRequest") == null)
writer.println("No");
else
writer.println("Yes");
writer.println("</td>");
writer.println("</tr>");
writer.println("</table>");
writer.println("<div style = 'border:1px solid #ddd;"
+ "margin-top:40px;font-size:90%'>");
writer.println("Debug Info<br/>");
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
writer.println(paramName + ": ");
String[] paramValues = request.getParameterValues(paramName);
for(String paramValue : paramValues)
writer.println(paramValue + "<br/>");
}
writer.println("</div>");
writer.println("</body>");
writer.println("</html>");
}
}
在浏览器中输入地址: http://localhost:8080/HttpHeaderResponse/form后可以看到一个表单,如下图所示:

如上图中所示,当你填完表单的相应内容,点击 submit按钮后,浏览器会将表单的数据发到服务器,服务器会调用 doPost()方法处理,最后将表单的内容发回给客户端浏览器并显示出来。如下图所示:

OK,今天的主角累了,欲知主角接下来的表演,请扫描下方二维码关注哦!!!

原文作者:数据派探险家;如有侵权,请联系管理员删除。