本系列博客汇总在这里:JavaWeb_servlet 汇总
Tomcat 启动时创建 Servlet
-
Tomcat 启动时创建 Servlet
(1)有些 Servlet 需要在 Tomcat 启动时就被创建,而不是第一次访问时被创建,那么可以在 web.xml 文件中配置 <servlet> 元素。在 <servlet> 元素中添加子元素 <load-on-startup> 元素!这个元素的值必须是一个大于等于 0 的整数!!!
(2)所有添加了 <load-on-startup> 子元素的 Servlet,都会在 Tomcat 启动时被创建!当然,只是被创建,但没有处理请求!但我们知道在 Servlet 生命周期中 init() 方法会在创建后被调用,所以你可以在 init() 方法中做一些输出,查看是否在 Tomcat 启动时调用了它。
(3)<load-on-startup> 元素的值是一个序号,Tomcat 会使用这个序号给多个 Servlet 排序!然后在 Tomcat 启动时会按这个顺序来创建 Servlet 实例对象! -
示例(完整源码见文末)
修改web.xml
测试 -
以上操作完整源码
package com.wyx.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 demo1 extends HttpServlet { @Override public void init() throws ServletException { System.out.println("LoadOnServlet实例被创建"); } @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 { } }
<?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_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>servlet_demo</display-name> <servlet> <!-- 设置servlet的名字 --> <servlet-name>helloServlet</servlet-name> <!-- 具体的servlet的类 --> <servlet-class>com.wyx.servlet.demo1</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <!-- 指定要映射 的servlet的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的具体映射路径 --> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
如有错误,欢迎指正!