1. 程式人生 > >JAVA學習之 淺析Servlet

JAVA學習之 淺析Servlet

一、什麼是Servlet

       Servlet是一種在伺服器端執行的java編寫的程式,是按照Servlet規範編寫的一個java類。

二、Servlet的工作過程

  

如圖所示:為了實現客戶與伺服器端的動態互動,需要一個遵循HTTP協議的伺服器端應用軟體,來處理客戶的各種請求,並將結果傳送給客戶端。

三、Servlet的生命週期

       Servlet的生命週期是由Servlet的容器(例如:tomcat)來控制的;生命後期分為載入類及建立例項;初始化;服務;銷燬

        1、載入類及建立例項

在預設情況下,Servlet例項是在第一個請求到來的時候建立,即輸入url

的時候建立,以後複用。但是也可以通過配置檔案進行設定引數:<load-on-startup>值</load-on-startup>;其中值預設為負數,當設定為大於等於0的數值時,則在tomcat啟動的時候載入建立例項。

        2、初始化

一旦Servlet例項被建立,web伺服器會自動呼叫init(ServletConfig config)方法來初始化該Servlet,其中方法引數config中包含了Servlet的配置資訊;下面說一下該如何配置Servlet的初始化引數:

   在web.xml中該Servlet的定義標記中,比如:

  <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.tgb.Test.TestServlet</servlet-class>
        <init-param>
           <param-name>encoding</param-name>
           <param-value>GB18030</param-value>
       </init-param>
       </servlet>
<servlet-mapping> 
 
 <servlet-name>TestServlet</servlet-name>   
 <url-pattern>/servlet/TestServlet</url-pattern>  
</servlet-mapping>

<servlet-name>:sevlet物件的名稱。

       <servlet-class>:建立servlet物件需要載入的類

       <init-param>:初始化

       <param-name>:引數名稱

       <param-value>:引數值

      <load-on-startup>:建立servlet物件的時機以及順序

      <servlet-mapping><servlet-name>要與

       <servlet><servlet-name>名稱一致。

       <url-pattern>:客戶端訪問url地址。

          3、服務

初始化成功後,該Servlet例項就可以被伺服器用來服務客戶端提出的請求並響應,在服務階段伺服器會呼叫該例項的Service(ServletRequest request, ServletResponse response)方法,兩個引數由伺服器建立並傳給Servlet例項。其中request物件封裝了客戶端發往伺服器端的資訊,response物件則封裝了伺服器發往客戶端的資訊。

         4、銷燬

web應用被終止時,Servlet容器會先呼叫Servlet物件的destrory()方法,然後再銷燬Servlet物件,同時也會銷燬與Servlet物件相關聯的ServletConfig物件。我們可以在destroy方法的實現中釋放Servlet所佔用的資源。

需要注意的是,Servlet的生命週期中,Servlet的初始化和銷燬階段值會發生一次,而Service方法執行的次數則取決於客戶端訪問的次數。

四、Servlet的執行緒安全問題

         Servlet是單例項多執行緒的,如果存在可以修改的成員變數將會出現執行緒安全問題。

使用Servlet最好保證Servlet是無狀態的,也就是沒有可以修改的成員變數。

總結:現在的感覺是,Servlet用起來很簡單,但是讓我很清楚的描述什麼是Servlet,和Servlet的原理還有些困難,這篇部落格說明了Servlet一些簡單的原理,希望會對以後使用Servlet有很好額幫助。