Servlet的生命周期

Servlet的生命周期:Servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。

以前的对象:new Student(); stu.study(); stu=null;

Servlet程序的生命周期是由tomcat服务器控制的。

 

Servlet重要的生命周期:

 1 public class Demo1 extends HttpServlet{
 2     
 3     /**
 4      * 1.构造方法
 5      */
 6     public Demo1() {
 7         System.out.println("1.servlet对象被创建了。");
 8     }
 9     
10     /**
11      * 2.init方法,初始化方法
12      */
13     @Override
14     public void init(ServletConfig config) throws ServletException {
15         System.out.println("2.init方法被调用");
16     }
17     
18     /**
19      * 3.service方法
20      */
21     @Override
22     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
23         System.out.println("3.service方法被调用");
24     }
25     
26     /**
27      * destory方法
28      */
29     private void destory() {
30         System.out.println("4.destory方法被调用");
31     }
32 }

 

构造方法:创建Servlet对象的时候调用。默认情况下,第一次访问Servlet的时候创建servlet对象。只调用一次。证明Servlet对象在tomcat是单实例的。

init方法:创建完servlet对象的时候调用。只调用一次。

service方法:每次发出请求时调用。调用n次。

destory方法:销毁servlet对象的时候调用,停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。

 

伪代码演示Servlet生命周期:

1)通过映射找到servlet-class的内容:字符串:com.maodoer.a_servlet.FirstServlet

2)通过反射构造FirstServlet对象

  2.1得到字节码对象

  Class clazz=Class.forName("com.maodoer.a_servlet.FirstServlet");

  2.2构造对象

  Object obj=clazz.newInstance();//1.servlet的构造方法被调用

3)创建一个ServletConfig对象,通过反射调用init方法

  3.1得到方法对象

  Method m=clazz.getDeclaredMethod("init",ServletConfig.class);

  3.2调用方法

  m.invoke(obj,config);//2.servlet的init方法被调用

4)创建request,response对象,通过反射去调用service方法。

  4.1得到方法对象

  Method m=

clazz.getDeclaredMethod("service",HttpServletRequest.class,HttpServletResponse.class);

  4.2调用该方法

  m.invoke(obj,request,response);//3.Servlet的service方法被调用

5)当tomcat服务器停止或者web应用重新部署,通过反射调用destory方法

  5.1得到方法对象

  Method m=clazz.getDeclaredMethod("destory",null);

  5.2调用方法

  m.invoke(obj,null);//4.servlet的destory方法被调用

 

posted @ 2017-02-22 09:56  binklei  阅读(1121)  评论(0编辑  收藏  举报