ITPub博客

首页 > 数据库 > 数据库开发技术 > 今天的主角:HttpServlet

今天的主角:HttpServlet

原创 数据库开发技术 作者:jackzhang 时间:2017-12-22 00:00:00 0 删除 编辑

HttpServlet

该类继承自 GenericServlet。使用 HttpServlet时,还要借助分别代表 Servlet请求和 Servlet响应的 HttpServletRequest和 HttpServletResponse对象。 HttpServletRequest扩展了 javax.servlet.ServletRequest接口, HttpServletResponse扩展了 javax.servlet.ServletResponse接口。 HttpServlet类覆盖了 GenericServlet中的 service方法,并添加了一个新的 service方法。下面是覆盖了基类中的 service方法:

  1. protected void service(ServletRequest req, ServletResponse res)

  2.   throws ServletException, java.io.IOException {

  3.    HttpServletRequest request;

  4.    HttpServletResponse response;

  5.    try {

  6.        request = (HttpServletRequest)req;  

  7.        response = (HttpServletResponse)res;

  8.     }

  9.    catch(ClassCastException e) {

  10.        throw new ServletException("not-HTTP request or response");

  11.    }

  12.    service(request, response);

  13. }

新的 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接口,并添加了以下几个方法:

  1. ● String getContextPath():获取表示请求的上下文的请求URL部分

  2. ● Cookie[ ] getCookies():返回一个Cookie对象数组

  3. ● String getHeader(String name):返回指定HTTP标题的值

  4. ● String getMethod():返回生成这个请求的HTTP方法名称

  5. ● HttpSession getSession():返回与这个请求相关的会话对象。如果没有,将创建一个新的会话

  6. ● HttpSession getSession(boolean create):返回与这个请求相关的会话对象。如果没有,并且create参数为true,将创建一个新的会话对象


  • HttpServletResponse:表示HTTP环境中的 Servlet响应。以下是常用的几个方法:

  1. ● void addCookie(Cookie cookie):给这个响应对象添加一个cookie

  2. ● void addHeader(String name, String value):给这个响应对象添加一个header

  3. ● void sendRedirect(String location):将浏览器跳转到指定的位置


HttpServlet最常用的两个方法: doGet(), doPost(),下面我们就来看看使用这个连个方法处理 HTML表单的实例:

  1. import java.io.IOException;

  2. import java.io.PrintWriter;

  3. import java.util.Enumeration;

  4. import javax.servlet.ServletException;

  5. import javax.servlet.annotation.WebServlet;

  6. import javax.servlet.http.HttpServlet;

  7. import javax.servlet.http.HttpServletRequest;

  8. import javax.servlet.http.HttpServletResponse;

  9. /**

  10. * Servlet implementation class FormServlet

  11. */

  12. @WebServlet(name = "FormServlet", urlPatterns = {"/form"})

  13. public class FormServlet extends HttpServlet {

  14.    private static final long serialVersionUID = 1L;

  15.    private static final String TITLE = "Order Form";

  16.    /**

  17.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

  18.     */

  19.    protected void doGet(HttpServletRequest request, HttpServletResponse

  20.            response) throws ServletException, IOException {

  21.        response.setContentType("text/html");

  22.        PrintWriter writer = response.getWriter();

  23.        writer.println("<html>");

  24.        writer.println("<head>");

  25.        writer.println("<title>" + TITLE + "</title></head>");

  26.        writer.println("<body><h1>" + TITLE + "</h1>");

  27.        writer.println("<form method = 'post'>");

  28.        writer.println("<table>");

  29.        writer.println("<tr>");

  30.        writer.println("<td>Name: </td>");

  31.        writer.println("<td><input type='text' name = 'name' /></td>");

  32.        writer.println("</tr>");

  33.        writer.println("<tr>");

  34.        writer.println("<td>Address: </td>");

  35.        writer.println("<td><textarea name = 'address'"

  36.                + "cols = '40' rows = '5'></textarea></td>");

  37.        writer.println("</tr>");

  38.        writer.println("<tr>");

  39.        writer.println("<td>Country: </td>");

  40.        writer.println("<td><select name = 'country'>");

  41.        writer.println("<option>United States</option>");

  42.        writer.println("<option>Canada</option>");

  43.        writer.println("</select></td>");

  44.        writer.println("</tr>");

  45.        writer.println("<tr>");

  46.        writer.println("<td>Delivery Method: </td>");

  47.        writer.println("<td><input type='radio' name = 'deliveryMethod'"

  48.                + "value = 'First Class' />First Class");

  49.        writer.println("<input type='radio' name = 'deliveryMthod'"

  50.                + "value = 'Second Class' />Second Class</td>");

  51.        writer.println("</tr>");

  52.        writer.println("<tr>");

  53.        writer.println("<td>Shipping Instructions: </td>");

  54.        writer.println("<td><textarea name = 'instruction'"

  55.                + "cols = '40' rows = '5'></textarea></td>");

  56.        writer.println("</tr>");

  57.        writer.println("<tr>");

  58.        writer.println("<td>&nbsp;</td>");

  59.        writer.println("<td><textarea name = 'instruction'"

  60.                + "cols = '40' rows = '5'></textarea></td>");

  61.        writer.println("</tr>");

  62.        writer.println("<tr>");

  63.        writer.println("<td>Please send me the latest product catalog: </td>");

  64.        writer.println("<td><input type = 'checkbox' name = 'catalogRequest' /></td>");

  65.        writer.println("</tr>");

  66.        writer.println("<tr>");

  67.        writer.println("<td>&nbsp;</td>");

  68.        writer.println("<td><input type = 'reset' value = 'reset' />"

  69.                + "<input type = 'submit' value = 'submit' /></td>");

  70.        writer.println("</tr>");

  71.        writer.println("</table>");

  72.        writer.println("</form>");

  73.        writer.println("</body>");

  74.        writer.println("</html>");

  75.    }

  76.    /**

  77.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

  78.     */

  79.    protected void doPost(HttpServletRequest request, HttpServletResponse

  80.            response) throws ServletException, IOException {

  81.        response.setContentType("text/html");

  82.        PrintWriter writer = response.getWriter();

  83.        writer.println("<html>");

  84.        writer.println("<head>");

  85.        writer.println("<title>" + TITLE + "</title>");

  86.        writer.println("</head>");

  87.        writer.println("<body><h1>" + TITLE + "</h1>");

  88.        writer.println("<table>");

  89.        writer.println("<tr>");

  90.        writer.println("<td>Name: </td>");

  91.        writer.println("<td>" + request.getParameter("name") + "</td>");

  92.        writer.println("</tr>");

  93.        writer.println("<tr>");

  94.        writer.println("<td>Address: </td>");

  95.        writer.println("<td>" + request.getParameter("address") + "</td>");

  96.        writer.println("</tr>");

  97.        writer.println("<tr>");

  98.        writer.println("<td>Country: </td>");

  99.        writer.println("<td>" + request.getParameter("country") + "</td>");

  100.        writer.println("</tr>");

  101.        writer.println("<tr>");

  102.        writer.println("<td>Shipping Instructions: </td>");

  103.        writer.println("<td>");

  104.        String[] instructions = request.getParameterValues("instruction");

  105.        if(instructions != null){

  106.            for(String instruction : instructions)

  107.                writer.println(instruction + "<br/>");

  108.        }

  109.        writer.println("</td>");

  110.        writer.println("</tr>");

  111.        writer.println("<tr>");

  112.        writer.println("<td>Delivery Method: </td>");

  113.        writer.println("<td>" + request.getParameter("deliveryMethod") + "</td>");

  114.        writer.println("</tr>");

  115.        writer.println("<tr>");

  116.        writer.println("<td>Catalog Request: </td>");

  117.        writer.println("<td>");

  118.        if(request.getParameter("catalogRequest") == null)

  119.            writer.println("No");

  120.        else

  121.            writer.println("Yes");

  122.        writer.println("</td>");

  123.        writer.println("</tr>");

  124.        writer.println("</table>");

  125.        writer.println("<div style = 'border:1px solid #ddd;"

  126.                + "margin-top:40px;font-size:90%'>");

  127.        writer.println("Debug Info<br/>");

  128.        Enumeration<String> parameterNames = request.getParameterNames();

  129.        while (parameterNames.hasMoreElements()) {

  130.            String paramName = parameterNames.nextElement();

  131.            writer.println(paramName + ": ");

  132.            String[] paramValues = request.getParameterValues(paramName);

  133.            for(String paramValue : paramValues)

  134.                writer.println(paramValue + "<br/>");

  135.        }  

  136.        writer.println("</div>");

  137.        writer.println("</body>");

  138.        writer.println("</html>");

  139.    }

  140. }

在浏览器中输入地址: http://localhost:8080/HttpHeaderResponse/form后可以看到一个表单,如下图所示:



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


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

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

下一篇: 第一个Servlet程序
请登录后发表评论 登录
全部评论

注册时间:2017-12-19

  • 博文量
    119
  • 访问量
    55950