Servlet生命周期的理解

生命周期

我们以前创建对象:以前的程序,java类,自己去new对象,自己去使用对象调用。

    现在创建对象: sevlet程序。servlet的生命周期由tomcat服务器控制的。

  那么servlet什么时候对象创建,什么销毁,什么时候调用什么方法???

Servlet的四个生命周期

构造方法: 在创建servlet对象时调用。只调用1次。

   证明servlet对象在tomcat服务器中是单实例的。

init方法:在创建完servlet对象后调用。只调用1次。

service方法: 在每次请求servlet时调用。调用n次。

destroy方法: servlet对象销毁时调用。只调用1次。tomcat服务器停止或web应用重新部署时调用

 

 用伪代码模拟tomcat服务器如何调用servlet生命周期

浏览器输入: http://localhost:8080/day10/hello

 

得到字符串: gz.itcast.a_servlet.HelloServlet

 

1tomcat服务器通过反射构造对象

1.1 得到字节码对象

Class clazz = Class.forName("gz.itcast.a_servlet.HelloServlet ");

1.2 构造对象

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

 

2tomcat服务器调用init方法

2.1 得到init方法对象

Method m = clazz.getDeclareMethod("init",ServeletConfig.class);

2.2 执行方法

m.invoke(hello,config);                --2)servletinit方法被调用

 

3tomcat服务器创建requestresponse对象,调用service方法

2.1 得到service方法对象

Method m

= clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletRespnose.class);

2.2 执行方法

m.invoke(hello,request,response);       --3)servletservice方法被调用

 

4tomcat服务器停止或web应用重新部署时,tomcat服务器调用destroy方法

2.1 得到destroy方法对象

Method m = clazz.getDeclareMethod("destroy",null)

2.2 执行方法

m.invoke(hello,null);                   --4)servletdestroy方法被调用

 

时序图描述servlet执行过程

 Servlet生命周期的理解

当我们去请求服务器的时候,servlet程序就已经交给了Tomcat服务器进行运行,它会通过里面的映射路径找到相关的类的字节码文件对象,从而加载里面的构造方法,以及底层中的init(),service(),destroy()方法.我们知道的service方法其实本身底层中根据不同的逻辑进行不同的处理,也就是不同的提交方式,常用的get,Post,当然还put30多种,那么我们在servlet中主要是针对getpost进行操作,通常情况下,get方式提交在地址栏中用户的信息会显示到地址栏中,不适合密码数据的提交,post方式不会,并且post方式的特点提交的文件大小无限制.

在学习Servlet生命周期这一块,最好能结合servlet-api或者是底层源码进行分析,有助于去消化这章节内容!