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方法。