servlet的生命周期

Posted suyang-java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet的生命周期相关的知识,希望对你有一定的参考价值。

     1.装载并实例化Servlet

    在整个的servlet的生命周期中只有一个Servlet实例。一般装载Servlet的方式有两种,一种是延迟装载(默认的方式)就是当用户第一次访问的Servlet时,容器会将Servlet装载到虚拟机中并实例化,当用户再次访问这个Servlet时容器不会在去加载实例化。另一种是预先加载,当web容器启动时,容器在装载web应用的时候会将Servlet初始化,如果要使用这种方式加载Servlet需要在web.xml中配置:

<servlet>
    <load-on-startup>
        number
   </load-on-startup>
</servlet>

其中,number<0表示延迟加载,number>=0表示采用预先加载。number越小越先加载,越大越晚被加载,springMVC的DispatcherServlet就是使用的预先加载。

    2.init 方法的调用

    当Servlet被装载时会先调用ini方法对servlet初始化,这里需要注意,在整个的Servlet周期中init方法只会被调用一次。用户可以覆盖init方法,如果覆盖有参数的init方法需要先调用super.init(config)方法,如果覆盖无参的init方法则不用,原因参考我写的java的继承。使用config对象可以获取ServletContext对象。

    3.service方法的调用

    Servlet被装载实例化后,客户端发起请求,容器会调用Servlet实例的service方法来对请求进行处理,所以service方法会根据请求的次数被调用多次。HttpServlet的service方法会根据请求的方式来调用service中对应的方法,常见的有doGet、doPost、doPut和doDelete。其中doGet和doPost默认情况下会抛异常所以需要子类去覆盖。

    4.Servlet实例的销毁

    当web容器需要销毁Servlet实例时会先调用destroy方法,在这个方法中容器会释放资源,恢复一下变量的值等。我们定义的servlet可以不覆盖destroy方法。

以上是关于servlet的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

学亮IT手记Servlet的生命周期

servlet的生命周期,啥情况下调用doGet()和doPost()?

servlet 生命周期和过滤器生命周期之间的区别

JSP 生命周期

JSP生命周期

Servlet编程:Servlet的生命周期