• Servlet(1):基础概念/最简实例


    Servlet 生命周期
    (1) init()方法初始化Servlet对象
      它在第一次创建Servlet时被调用,在后续每次不同用户请求时不再调用。
    (2) service()方法来处理客户端的请求
      Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器接收到一个Servlet请求时,服务器都会产生一个新的线程并调用服务。
      service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。
    (3) Servlet 通过调用 destroy() 方法终止(结束)
      destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。


    HttpServlet的功能
    HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到 HttpServlet对象中,大大简化了HttpServlet解析请求数据的工作量。HttpServlet容器响应Web客户请求流程如下:
    (1) Web客户向Servlet容器发出Http请求;
    (2) Servlet容器解析Web客户的Http请求;
    (3) Servlet容器创建一个HttpServletRequest对象,在这个对象中封装Http请求信息;
    (4) Servlet容器创建一个HttpServletResponse对象;
    (5) Servlet容器调用HttpServlet的service方法,把HttpServletRequest和HttpServletResponse对象作为service方法的参数传给HttpServlet对象;
    (6) HttpServlet(通过doGet(),doPost()等)调用HttpServletRequest的有关方法,获取HTTP请求信息;
    (7) HttpServlet(通过doGet(),doPost()等)调用HttpServletResponse的有关方法,生成响应数据;
    (8) Servlet容器把HttpServlet的响应结果传给Web客户。

    如何编写一个Servlet
    (1) 扩展HttpServlet抽象类;
    (2) 覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;
    (3) 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
    (4) 生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。

    [例]

    在IDE中直接创建一个Dynamic web project,再配置好Tomcat即可。servlet3.0后@WebServlet可以直接替代web.xml里的<servlet>标签。

     1 package com.servlettest;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 import java.util.Enumeration;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.annotation.WebServlet;
     9 import javax.servlet.http.HttpServlet;
    10 import javax.servlet.http.HttpServletRequest;
    11 import javax.servlet.http.HttpServletResponse;
    12 
    13 /**
    14  * Servlet implementation class Test1
    15  */
    16 @WebServlet("/Test1")
    17 public class Test1 extends HttpServlet {
    18     private static final long serialVersionUID = 1L;
    19 
    20     /**
    21      * @see HttpServlet#HttpServlet()
    22      */
    23     public Test1() {
    24         super();
    25     }
    26 
    27     /**
    28      * @see javax.servlet.GenericServlet#init()
    29      */
    30     @Override
    31     public void init() throws ServletException {
    32         System.out.println("-----Call init() method.-----");
    33     }
    34 
    35     /**
    36      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    37      */
    38     @Override
    39     protected void doGet(HttpServletRequest request, HttpServletResponse response)
    40             throws ServletException, IOException {
    41 
    42         System.out.println("-----Call doGet() method.-----");
    43         response.setContentType("text/html");
    44         PrintWriter out = response.getWriter();
    45         out.println("<table border="1" align="center">");
    46         out.println("<tr><th>Header Name</th><th>Header Value</th></tr>");
    47         Enumeration<String> headerNames = request.getHeaderNames();
    48         while (headerNames.hasMoreElements()) {
    49             String paramName = headerNames.nextElement();
    50             out.println("<tr><td>" + paramName + "</td><td> " + request.getHeader(paramName) + "</td></tr>");
    51         }
    52         out.println("</table>");
    53     }
    54 
    55     /**
    56      * @see javax.servlet.GenericServlet#destroy()
    57      */
    58     @Override
    59     public void destroy() {
    60         System.out.println("-----Call destroy() method.-----");
    61     }
    62 
    63     /**
    64      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    65      */
    66     @Override
    67     protected void doPost(HttpServletRequest request, HttpServletResponse response)
    68             throws ServletException, IOException {
    69         System.out.println("-----Call doPost() method.-----");
    70         doGet(request, response);
    71     }
    72 }
  • 相关阅读:
    扩展的friend语法
    常量表达式
    字符串过滤,排序输出数字的问题
    decltype类型声明- 现代C++新特性总结
    auto类型-现代C++新特性
    指针相关总结2
    指针相关总结1
    发现XMind一个超级牛逼的功能
    空类指针为什么可以调用类的成员函数 以及 A(){}和A();
    SSAS父子层次结构的增强-UnaryOperatorColumn属性
  • 原文地址:https://www.cnblogs.com/storml/p/7464605.html
Copyright © 2020-2023  润新知