天天看點

Javaweb學習筆記之HttpServlet(三):Servlet 的自動加載

package com.demo.d_life;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
Servlet 的自動加載:
	預設情況下,第一次通路 servlet 的時候建立 servlet 對象。如果 servlet 的構造方法或 init 
	方法中執行了比較多的代碼,那麼就會導緻使用者第一次通路 servlet 的時候比較慢。
	
	是以可以将 servlet 對象建立的時機提前到加載 web 應用的時候,即 tomcat 伺服器啟動的時候。
	隻需要在 servlet 的配置資訊中,加上一個 <load-on-startup> 即可,如下:
	<servlet>
    	<servlet-name>LifeDemo2</servlet-name>
    	<servlet-class>com.demo.d_life.LifeDemo2</servlet-class>
    
    	<!-- 讓 servlet 對象自動加載(在 tomcat 伺服器啟動的時候) -->
    	<load-on-startup>1</load-on-startup>
  	</servlet>
   	
   	如果使用的是注解,則可以使用下面的方法:
   		@WebServlet(urlPatterns="/LifeDemo2", loadOnStartup=1)
   		
   	注意:loadOnStartup 的值越大,建立的優先級越低。即優先建立 loadOnStartup 值小的 servlet。
 */

@WebServlet(urlPatterns="/LifeDemo2", loadOnStartup=1)
@SuppressWarnings("serial")
public class LifeDemo2 extends HttpServlet{

	/*
	 * 1、構造方法:建立 Servlet 對象的時候調用。預設情況下,第一次通路 servlet 的時候建立 servlet 對象;
	 * 	隻調用一次,說明 servlet 對象在 tomcat 伺服器中是單執行個體的。
	 */
	public LifeDemo2(){
		System.out.println("1、構造方法被調用了");
	}
	
	/*
	 * 2、init 方法:建立完 servlet 對象的時候調用;隻調用一次。
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("2、init 方法被調用了");
	}
	
	/*
	 * 3、service 方法:每次送出請求的時候調用;可調用多次,說明 servlet 是多線程的。
	 */
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("3、service 方法被調用了");
	}

	/*
	 * 4、destroy 方法:銷毀 servlet 對象的時候調用。
	 * 	停止伺服器,或者重新部署 web 應用時銷毀 servlet 對象。隻調用一次。
	 */
	@Override
	public void destroy() {
		System.out.println("4、destroy 方法被調用了");
	}

}