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 方法被調用了");
}
}