今天無意中看到一個博主的總結,總結的是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時,數值越小,優先級越高。