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>