今天无意中看到一个博主的总结,总结的是servlet是在什么时候初始化的,并且附上了实例。但是由于那位博主的实例有问题,所以总结的也有误。这里我把我的体会写下来,分享给大家。
java代码:
1 @Override 2 public void init(ServletConfig request) throws ServletException { 3 System.out.println("TestServlet init ..."); 4 5 } 6 7 @Override 8 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 9 HttpServletRequest hsr = (HttpServletRequest) request; 10 String servletPath = hsr.getServletPath(); 11 System.out.println("TestServlet service ...|| servletPath:" + servletPath); 12 13 }
web.xml配置:
1 <servlet> 2 <servlet-name>dispatcher</servlet-name> 3 <servlet-class>com.leq.test.servlet.TestServlet</servlet-class> 4 </servlet> 5 <servlet-mapping> 6 <servlet-name>dispatcher</servlet-name> 7 <url-pattern>*.action</url-pattern> 8 </servlet-mapping>
场景1: 在启动Tomcat的时候,没有执行init方法;
关闭Tomcat的时候,没有执行destroy方法。
场景2: 在启动Tomcat的时候,没有执行init方法;
在发送请求的时候,先执行init方法,后执行service方法。
关闭Tomcat的时候,没有执行destroy方法。
------------------------------------------------------------华丽的分割线-------------------------------------------------------------------
现在改变web.xml配置:
1 <servlet> 2 <servlet-name>dispatcher</servlet-name> 3 <servlet-class>com.leq.test.servlet.TestServlet</servlet-class> 4 <load-on-startup>0</load-on-startup> 5 </servlet> 6 <servlet-mapping> 7 <servlet-name>dispatcher</servlet-name> 8 <url-pattern>*.action</url-pattern> 9 </servlet-mapping>
java类代码不变。
场景1: 在启动Tomcat的时候,执行了init方法;
关闭Tomcat的时候,执行了destroy方法。
总结:
当web.xml中不配置load-on-startup属性,或者配置该属性且值为负数时,servlet在有请求的时候才会初始化。
当load-on-startup属性值大于等于0的时候,servlet会在启动的时候就初始化。
备注:1. load-on-startup属性值只能为整数。
2. load-on-startup属性值大于等于0时,数值越小,优先级越高。