← 返回首页
Servlet基础教程(十一)
发表时间:2020-04-07 01:19:30
讲解Servlet启动优先级

Servlet默认在第一次请求的时候才被加载。可以配置@WebServlet的loadOnStartup属性或者在web.xml中配置<load-on-startup>标签来设置servlet启动的优先级。

通过@WebServlet的loadOnStartup设置启动优先级,要遵循以下规则: 1)loadOnStartup属性标记容器是否应该在启动的时候加载这个servlet,(实例化并调用其init()方法)。 2)它的值必须是一个整数,默认值是-1 (表示服务器启动时不加载这个servlet),表示servlet应该被载入的顺序。 3)如果该元素不存在或者这个数为负时,则容器会当该Servlet被请求时,再加载。 4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。 5)当值相同时,容器就会自己随机选择顺序来加载。

例如: 配置以下两个Serlvet.

@WebServlet(name = "TestServlet",value = "/test",loadOnStartup = 1)
public class TestServlet extends HttpServlet {
    public TestServlet(){
        System.out.println("执行了TestServlet的构造方法...");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

@WebServlet(value="/hello",loadOnStartup =2)
public class HelloServlet extends HttpServlet {

    public HelloServlet(){
        System.out.println("执行了HelloServlet的构造方法...");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行了service()...");
        super.service(req, resp);
    }

    @Override
    public void destroy() {
        System.out.println("执行了destroy()...");
        super.destroy();
    }


}

Tomcat服务器启动时,会自动初始化这两个Servlet,启动顺序如下:

执行了TestServlet的构造方法...
执行了HelloServlet的构造方法...

使用<load-on-startup>标签配置如下:

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.servlet.HelloServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.servlet.TestServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>