Servlet强化

Servet的运行过程及生命周期

Servlet程序是由WEB服务器调用,web服务器收到客户端的ServletWeb服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第(4)步,否则,执行第(2)步。

访问请求后:

(1)装载并创建该Servlet的一个实例对象。

(2)调用Servlet实例对象的init()方法。

(3)创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

(4)WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。 

Servet的生命周期:

Servlet 的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。

生命周期如下:

  • (1)通常情况下,服务器会在Servlet第一次被调用时创建该Servlet类的实例对象(servlet出生),创建出对象后立即调用init()方法做初始化操作;
  • (2)一旦被创建出来,该Servlet实例就会驻留在内存中,为后续对这个Servlet的请求做服务,每次对这个Servlet的访问都会导致Servlet中Service方法执行;
  • (3)当web应用被移除容器或者关闭服务器时,随着web应用的销毁,Servlet也会被销毁(servlet死亡)。在销毁之前服务器会调用Servlet的destroy方法做一些善后的工作。

有3个方法代表了Servlet的生命周期:

  • init方法,负责初始化Servlet对象。
  • service方法,负责响应客户的请求(调用doGet或doPost等方法)。
  • destroy方法,当Servlet对象退出生命周期时,负责释放占用的资源。

注:在Servlet的整个生命周期内,Servlet的init方法只有在servlet被创建时被调用一次,每次对这个Servlet的访问都会导致Servlet中Service方法执行。

package com.vae.servlet;
 2 import java.io.IOException;
 3 import java.io.PrintWriter;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 //一般实现一个Servlet,只要继承HttpServlet类即可
 9 public class MyServlet extends HttpServlet {
10     //Servlet初始化时调用的方法
11     @Override
12     public void init() throws ServletException {
13         super.init();
14         System.out.println("init....");
15     }
16     
17     //Servlet被销毁时调用的方法
18     @Override
19     public void destroy() {
20         super.destroy();
21         System.out.println("destroy...");
22     }
23     //-------doGet/doPost 核心的业务处理方法(由service方法来调用)------------    
24     @Override
25     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
26             throws ServletException, IOException {
27         //super.doGet(req, resp);
28         doPost(req, resp);
29         System.out.println("do service...");
30     }
31     
32     @Override
33     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
34             throws ServletException, IOException {
35         //super.doPost(req, resp);
36     }
37 }
原文地址:https://www.cnblogs.com/paoge/p/13659554.html