Servlet基础-2
Servlet的生命周期
从第一次调用,到服务器关闭。期间如果删除加载好的servlet,依然能正常使用。因为,servlet已经加载到了tomcat服务器中。此时如果关闭掉服务器重启服务器,则不能使用删除掉的servelt,tomcat无法找到此servlet并将其加载到服务器中。
如果在web.xml 中配置了load-on-startup则是从服务器开启到服务器关闭(只是调用servlet的init()方法)。。
Servlet的方法
- service()是真正处理请求的方法
- init()是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
- destory()是在servlet被销毁时执行,也就服务器关闭时。
web.xml中servlet配置load-on-startup的作用
在servlet的配置当中,1的含义是:标记容器是否在启动的时候就加载这个servlet。
当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。(相当于没写,没使用load-on-startup,此时servlet的生命周期没有发生改变)
正数的值越小,启动该servlet的优先级越高。
如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序。
配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;
如未配置load-on-startup,容器一般在第一次响应web请求时,会先检测该servlet是否初始化,如未初始化,则调用servlet的init()先初始化,初始化成功后,再响应请求。
PS:一般我们在开发web应用时,都会配置这个参数,有两个好处:
- 1、如果初始化过程失败,则容器会提示启动失败,此时我们能够提前知道相关错误;
- 2、配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可立即响应web请求。1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42package com.kylin.servlet; 
 import java.io.IOException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 /**
 * * Servlet的生命周期:
 * 1、从第一次调用到服务器关闭。
 * 2、如果Servlet在web.xml中配置了load-on-startup,生命周期为 从服务器启动到服务器关闭
 * 注意:
 * init方法是对Servlet进行初始化的一个方法,会在Servlet第一次 加载进行存储时执行
 * destory方法是在servlet被销毁时执行,也就服务器关闭时。
 * @author kylin
 *
 */
 public class ServletLife extends HttpServlet {
 
 //初始化方法,在servlet第一次加载内容的时候被调用
 
 public void init() throws ServletException {
 System.out.println("servlet初始化完成");
 }
 
 
 
 //service方法,真正处理请求的方法
 
 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 resp.getWriter().write("servlet life");
 System.out.println("servlet life");
 }
 
 
 public void destroy() {
 
 System.out.println("我被销毁了!");
 }
 } 












