zoukankan      html  css  js  c++  java
  • 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方法。

  • 相关阅读:
    pthread线程内存布局
    用户空间实现线程 内核实现线程 线程的调度
    堆 虚拟内存
    Operating System-Thread(3)用户空间和内核空间实现线程
    Linux进程地址空间与虚拟内存
    虚拟地址
    物理内存,虚拟内存,进程地址空间
    CPU中MMU的作用
    进程地址空间与虚拟存储空间的理解
    虚拟地址空间
  • 原文地址:https://www.cnblogs.com/suyang-java/p/11221167.html
Copyright © 2011-2022 走看看