java Web项目中web.xml中 load-on-startup 标签作用理解

java Web项目中web.xml中 load-on-startup 标签作用理解

一、问题描述
1、在做java Web项目中,发现web.xml中有一个标签
1
,发现这个标签中的数值是1,为什么是1呢? 产生了好奇,研究了下。

2、代码参考

        	ServerTwo
        	ServerTwo
        	com.xx.xx.servlet.ServerTwo
                1
        
        
        	ServerTwo
        	/ServerTwo
        


二、问题思考
1、网上查了下,load-on-startup 意思是表示启动时加载,那么 1 ,是否可以理解为: 启动时立即加载 (“1” 对应boolean值 true)。 0:启动时不加载,调用的时候加载呢?

三、代码实验
1、创建一个web项目
2、创建两个Servlet,重写 init 方法,增加一句输出。
@Override
public void init(ServletConfig config) throws ServletException {
	System.out.println(this.getClass().getName() +" init success.");
}


3、在web.xml 中配置 Servlet 如下

        	ServerOne
        	ServerOne
        	com.xx.study.servlet.ServerOne
        	0
        
        
        	ServerTwo
        	ServerTwo
        	com.xx.study.servlet.ServerTwo
		1
        
        
        	ServerOne
        	/ServerOne
        
        
        	ServerTwo
        	/ServerTwo
        



4、启动 Tomcat ,观察控制台日志输出
com.xx.study.servlet. ServerOne init success.
com.xx.study.servlet. ServerTwo init success.

5、日志分析
  • 按照前面的猜测: 1=true,启动时加载,0=false,调用时加载。
  • 根据输出日志来看,这个猜测是错误的。
  • 0 优先加载于 1



6、ServerOne 和 ServerTwo 位置对调,确定是否和加载顺序有关

        	ServerTwo
        	ServerTwo
        	com.xx.study.servlet.ServerTwo
		1
        
         
        	ServerOne
        	ServerOne
        	com.xx.study.servlet.ServerOne
        	0
        
        
        
        	ServerTwo
        	/ServerTwo
        
        
        	ServerOne
        	/ServerOne
        


7、对调后,日志分析
com.xx.study.servlet. ServerOne init success.
com.xx.study.servlet. ServerTwo init success.
结论:和 ServerOne、ServerTwo 位置无关。

四、继续测试 (修改web.xml ,重启 Tomcat,观察Console日志输出)
1、测试1
ServerOne : 0 : 正常日志输出
ServerTwo : -1 :无日志输出

       2、测试2
ServerOne :不配置该标签: 无日志输出
ServerTwo : -11 :无日志输出

3、测试3
ServerOne : 10 :日志输出,在ServerTwo之前
ServerTwo : 20 :日志输出,在ServerOne之后


五、结论(总结)
1、load-on-startup 标签作用:用来控制容器启动时,是否加载Servlet。
2、load-on-startup 标签,为负数或不配置时,容器启动时,不加载Servlet。(调用时加载)
3、load-on-startup 标签,为正数,容器启动时,加载Servlet。 且顺序优先级: 0 > 1>2>...n



参考资料: web.xml中load-on-startup标签的含义
web.xml 中的listener、 filter、servlet 加载顺序及其详解

你可能感兴趣的:(Java)