2022-12-11 23:08

关于load-on-startup标签

徐福沛

JavaEE

(689)

(0)

收藏



首先不得不先提一下Servlet生命周期,他主要的方法有:

  1. init() 初始化阶段

  2. doGet(),doPost() 处理客户端请求阶段

  3. destroy() 终止阶段


load-on-startup标签的作用

在web.xml中的load-on-startup标签可以设置指定的servlet在加载时的优先级,以及是否在容器中加载servlet,多说无益直接上例子吧。

servlet.png




首先在项目中创建一个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文件中没有进行任何配置
1.png1



然后启动Tomcat服务器,此时控制台什么也没有输出2

2.png



当我们通过网址去访问这个servlet时,控制台才开始输出3,这时servlet才刚刚初始化

3.png


如果我们在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初始化了

44.png


如果web.xml文件中配置的servlet标签没有加上load-on-startup标签会怎么样?
     <servlet>
         <servlet-name>Test1Servlet-name</servlet-name>
         <servlet-class>com.wanmait.demo.Test1Servlet</servlet-class>
     </servlet>
答案是这个servlet并不会初始化

5.png5


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初始化就越早,由此可以断定数越小优先级就越高

66.png



load-on-startup标签的优先级最小可以取到0,负数无效

77.png


如果优先级相同的话,容器会自己选择

总结

1.load-on-startup标签中的值必须是一个整数,表示servlet应该被载入的顺序。;

2.当值为0或者大于0时,表示在服务器启动时就加载并初始化这个servlet。

3.当值小于0或者没有指定时,则Servlet被请求时才会去初始化。

4.正数的值越小,Servlet的优先级就越高,启动时就优先加载。

5.当值相同的时候,容器就会自己选择优先加载。


0条评论

点击登录参与评论