Servlet:基础概念/最简实例

Posted Storm_L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet:基础概念/最简实例相关的知识,希望对你有一定的参考价值。

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 }

 

以上是关于Servlet:基础概念/最简实例的主要内容,如果未能解决你的问题,请参考以下文章

filter与servlet

引入servlet概念

JavaWeb基础: ServletConfig

Java基础——JSP

动态SQL基础概念复习(Javaweb作业5)

java基础 第十四章(Servlet声明周期Servlet向jsp中提供数据Servlet跳转jspjsp中书写java代码)