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 }