load-on-startup元素:控制Servlet启动优先级
load-on-startup 元素取值规则如下:
它的取值必须是一个整数;
当值小于 0 或者没有指定时,则表示容器在该 Servlet 被请求时才会被加载;
当值大于 0 或等于 0 时,表示容器在启动时就加载并初始化该 Servlet,取值越小,优先级越高;
当取值相同时,容器就会自行选择顺序进行加载。
@WebServlet 注解的 loadOnStartup 属性与 web.xml 中的 load-on-startup 元素相对应,取值的规则和含义相同。
示例
下面通过一个案例进行演示。在 servletDemo 项目的 net.biancheng.www 包中,创建名称为 MyServlet1 的类,代码如下。
package net.biancheng.www;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void destroy() {
System.out.println(this.getServletName() + ":销毁");
}
@Override
public void init() throws ServletException {
System.out.println(this.getServletName() + ":初始化完成");
}
}
web.xml 的配置如下。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3网站站点" rel="nofollow" />
在地址栏输入“http://localhost:8080/servletDemo/MyServlet1”,访问 MyServlet1,结果如下图。

在地址栏输入“http://localhost:8080/servletDemo/MyServlet2”,访问 MyServlet2,结果如下图。

在地址栏输入“http://localhost:8080/servletDemo/MyServlet3”,访问 MyServlet3,结果如下图。

在地址栏输入“http://localhost:8080/servletDemo/MyServlet4”,访问 MyServlet4,结果如下图。

在地址栏输入“http://localhost:8080/servletDemo/MyServlet5”,访问 MyServlet5,结果如下图。

由示例可知:
由于 MyServlet1、MyServlet2 和 MyServlet3 的 load-on-startup 元素取值都大于等于 0,因此当 Tomcat 启动时,就对它们进行了初始化。
由于在 Servlet 的生周期内,init() 方法(初始化方法)只能被调用一次,因此当 Tomcat 启动完成后,次访问 MyServlet1、MyServlet2 和 MyServlet3 时,它们不会再次被初始化。
由于 MyServlet4 的 load-on-startup 元素取值为负数,因此只有当次请求它时,才会进行初始化。
由于 MyServlet5 没有指定 load-on-startup 元素取值,因此只有当次请求它时,才会进行初始化。