------------------------Tomcat服务器启动时创建Servlet-----------------------
Tomcat启动时创建Servlet
有些Servlet需要在Tomcat启动时就被创建,而不是第一次访问时被创建,那么可以在web.xml文件中配置<servlet>元素。
在<servlet>元素中添加子元素<load-on-startup>元素!
这个元素的值必须是一个大于等于0的整数!!!
<servlet> <servlet-name>One</servlet-name> <servlet-class>com.rl.servlet.OneServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet> <servlet-name>Two</servlet-name> <servlet-class> com.rl.servlet.TwoServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> |
所有添加了<load-on-startup>子元素的Servle,都会在Tomcat启动时被创建!当然,只是被创建,但没有处理请求!但我们知道在Servlet生命周期中init()方法会在创建后被调用,所以你可以在init()方法中做一些输出,查看是否在Tomcat启动时调用了它。
<load-on-startup>元素的值是一个序号,Tomcat会使用这个序号给多个Servlet排序!然后在Tomcat启动时会按这个顺序来创建Servlet实例对象!
代码示例:
LoadOnServlet类:
package com.rl.servlet;
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 LoadOnServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet被调用"); resp.getOutputStream().write("doGet被调用".getBytes()); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost被调用"); doGet(req, resp); }
@Override public void init() throws ServletException { System.out.println("LoadOnServlet实例被创建"); }
} |
Web.xml代码:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <servlet> <servlet-name>httpServlet</servlet-name> <servlet-class>com.rl.servlet.HttpServletDemo</servlet-class> <load-on-startup>2</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>httpServlet</servlet-name> <url-pattern>/httpRequest</url-pattern> </servlet-mapping>
<!-- 设置servlet的初始化的时机在服务器启动时 --> <servlet> <servlet-name>loadOnServlet</servlet-name> <servlet-class>com.rl.servlet.LoadOnServlet</servlet-class> <!-- 元素的值是一个序号,Tomcat会使用这个序号给多个Servlet排序 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>loadOnServlet</servlet-name> <url-pattern>/loadOn</url-pattern> </servlet-mapping> </web-app> |
当服务器启动的时候创建了Servlet对象