首先不得不先提一下Servlet生命周期,他主要的方法有:
init() 初始化阶段
doGet(),doPost() 处理客户端请求阶段
destroy() 终止阶段
load-on-startup标签的作用
在web.xml中的load-on-startup标签可以设置指定的servlet在加载时的优先级,以及是否在容器中加载servlet,多说无益直接上例子吧。
首先在项目中创建一个servlet,内容如下:
package com.wanmait.demo; import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet("/test1") public class Test1Servlet extends HttpServlet { public void init() { System.out.println("初始化test1"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("test1"); } public void destroy() { } }
这个时候web.xml文件中没有进行任何配置
然后启动Tomcat服务器,此时控制台什么也没有输出
当我们通过网址去访问这个servlet时,控制台才开始输出,这时servlet才刚刚初始化
如果我们在web.xml文件中配置servlet标签,并且给了他load-on-startup标签以及优先级
<servlet> <servlet-name>Test1Servlet-name</servlet-name> <servlet-class>com.wanmait.demo.Test1Servlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
然后重启服务器,就会发现test1这个servlet初始化了
如果web.xml文件中配置的servlet标签没有加上load-on-startup标签会怎么样?
<servlet> <servlet-name>Test1Servlet-name</servlet-name> <servlet-class>com.wanmait.demo.Test1Servlet</servlet-class> </servlet>
答案是这个servlet并不会初始化
load-on-startup标签的优先级
如果在web.xml中配置两个以上的servlet标签,其中load-on-startup标签的优先级是大的先执行,还是小的先执行?
首先新添加一个servlet,代码如下:
package com.wanmait.demo; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet("/test2") public class Test2Servlet extends HttpServlet { public void init() { System.out.println("初始化test2"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { System.out.println("test2"); } public void destroy() { } }
web.xml配置如下:
<servlet> <servlet-name>Test1</servlet-name> <servlet-class>com.wanmait.demo.Test1Servlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>Test2</servlet-name> <servlet-class>com.wanmait.demo.Test2Servlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
然后启动服务器可以看到,load-on-startup标签的优先级数越小,servlet初始化就越早,由此可以断定数越小优先级就越高
load-on-startup标签的优先级最小可以取到0,负数无效
如果优先级相同的话,容器会自己选择
总结
1.load-on-startup标签中的值必须是一个整数,表示servlet应该被载入的顺序。;
2.当值为0或者大于0时,表示在服务器启动时就加载并初始化这个servlet。
3.当值小于0或者没有指定时,则Servlet被请求时才会去初始化。
4.正数的值越小,Servlet的优先级就越高,启动时就优先加载。
5.当值相同的时候,容器就会自己选择优先加载。
0条评论
点击登录参与评论