JavaWeb 之 Servlet的生命週期

Servlet 生命週期

1、實現重寫servlet

  建立一個類,實現 servlet 這個接口時,須要實現裏面的抽象方法。java

 1 import javax.servlet.*;  2 import java.io.IOException;  3  4 public class ServletDemo implements Servlet {  5 public ServletDemo() {  6 System.out.println("一、構造器方法");  7  }  8 /**  9  * 初始化方法,在servlet被建立時,執行,只會執行一次 10  * @param servletConfig 11  * @throws ServletException 12 */ 13  @Override 14 public void init(ServletConfig servletConfig) throws ServletException 15 System.out.println("二、初始化方法init..."); 16  } 17 18 /** 19  * 獲取servletconfig對象 20  * servletConfig:servlet的配置對象 21  * @return 22 */ 23  @Override 24 public ServletConfig getServletConfig() { 25 return null; 26  } 27 28 /** 29  * service:提供服務方法,專門用來處理請求和響應的 30  * 每一次servlet被訪問時,執行,執行屢次 31  * @param servletRequest 32  * @param servletResponse 33  * @throws ServletException 34  * @throws IOException 35 */ 36  @Override 37 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { 38 System.out.println("三、服務方法service..."); 39  } 40 41 /** 42  * 獲取servlet的一些信息,如版本,做者等。。 43  * @return 44 */ 45  @Override 46 public String getServletInfo() { 47 return null; 48  } 49 50 /** 51  * 銷燬方法 52  * 在服務器正常關閉時,在servlet被殺死時,被執行,只執行一次 53 */ 54  @Override 55 public void destroy() { 56 System.out.println("四、銷燬方法destory..."); 57  } 58 }

2、生命週期

  一、被建立時期

    執行 Servlet 構造器方法,通常是在第一次訪問 Servlet時,由Web容器(Tomcat)來建立 Servlet。web

    Servlet何時被建立?安全

      默認狀況下,Servlet 第一次被訪問,Servlet 被 Web 容器建立。服務器

    能夠配置 Servlet 的建立時機ide

      在 web.xml 中 <servlet> 標籤下配置 <load-on-startup>,默認值爲 -1。spa

      ① 第一次訪問時,建立,設置 <load-on-startup>的值爲負數線程

      ② 在服務器啓動時,建立,設置<load-on-startup>的值爲0或正整數code

1 <!--配置servlet--> 2 <servlet> 3 <!--servlet名稱--> 4 <servlet-name>demo1</servlet-name> 5 <!--servlet全類名--> 6 <servlet-class>cn.ks.web.servlet.ServletDemo1</servlet-class> 7 <!-- 建立時機--> 8 <load-on-startup>5</load-on-startup> 9 </servlet>

  二、初始化時期

     當類被建立後,馬上執行 init() 初始化方法,只執行一次。xml

    Servlet的 init() 方法,只執行一次(通常用來加載資源),說明一個Servlet在內存中只存在一個對象,Servlet是單例的對象

     a、多個用戶同時訪問時,可能存在線程安全問題。

     b、解決:儘可能不要在Servlet中定義成員變量。即便定義了成員變量,也不要對修改值

  三、服務時期

    該時期執行 service() 方法來提供服務,這個方法能夠執行屢次。每次訪問 servlet 時,Service 方法都會被調用一次。

  四、銷燬時期

    被銷燬時,執行 destory() 方法,只執行一次

      ① Servlet被銷燬時執行。服務器關閉時,Servlet被銷燬

      ② 只有服務器正常關閉時,纔會執行destroy方法。

      ③ destroy方法在Servlet被銷燬以前執行,通常用於釋放資源  

相關文章
相關標籤/搜索