1. 程式人生 > >Servlet的理解和執行流程

Servlet的理解和執行流程

1.怎麼理解Servlet?

Public interface Servlet
           Implement by : FacesServlet, GenericServlet, JspPage
  Servlet是一套規範,內部提供一套介面,執行在Application伺服器中,通過http協議用來接收客戶端的請求和回覆響應。具體的實現類需要伺服器廠商提供。

  由於部署在伺服器上的web專案,必須通過在瀏覽器的位址列中輸入地址才可以被訪問到,所以Servlet也需要配置地址才能被瀏覽器訪問。

2.誰建立了Servlet?

Servlet容器:Tomcat、JBoss、webLogic等。

3.如何新建一個Servlet?

①繼承:想要建立一個Servlet,必須繼承HttpServlet類,或實現Servlet介面;
②註冊:在web.xml裡配置Servlet的配置對映資訊。
   Servlet註冊:Servlet程式必須在WEB應用程式的web.xml檔案中進行註冊和對映其訪問路徑,才可以被Servlet引擎載入和被瀏覽器訪問。
   一個<servlet>標籤用於註冊一個Servlet,它包含有兩個主要的子元素:<servlet-name>和<servlet-class>,分別用於設定Servlet的註冊名稱和Servlet的完整類名。
      一個<servlet-mapping>標籤用於對映一個已註冊的Servlet的一個對外訪問路徑,它包含有兩個子元素:<servlet-name>和<url-pattern>,分別用於匹配Servlet的註冊名稱和Servlet的對外訪問路徑。
 告訴TomCat新建立了一個Servlet類; 
<servlet>               
    <servlet-name>LoginServlet</servlet-name>                              這個新建的Servlet類名字叫LoginServlet;
    <servlet-class>com.atguigu.servlet.LoginServlet</servlet-class>        這是LoginServlet類的全類名;
        <init-param
>
通過key-value的形式,設定初始化資訊 <param-name>username</param-name> 初始化引數的名:key <param-value>root</param-value> 初始化引數的值:value </init-param> </servlet> <servlet-mapping> 給這個LoginServlet程式配置訪問地址:/loginServlet <servlet-name>LoginServlet</servlet-name> <url-pattern>/loginServlet</url-pattern> </servlet-mapping> 上面Servlet的標籤內配置的資訊其實就是 ServletConfig介面。

4.Servlet的物件是如何建立的?

通過反射!
預設是:瀏覽器是在第一次請求訪問的時候,TomCat建立對應的Servlet物件。
當發起一個請求,TomCat通過 標籤中對映的url路徑,找到需要執行的對應的com.Servlet類;由於這個Servlet是第一次訪
問,TomCat中還沒有這個Servlet物件,TomCat會通過這個Servlet的全類名,得到這個Servlet類的Class物件;然後TomCat再通過Class反射呼叫Servlet的構造器,把物件創建出來,生命週期開始。
Servlet物件創建出來之後,TomCat呼叫這個物件的init()方法,將ServletConfig做為方法入參,做初始化操作;然後呼叫service()方法處理請求和回傳資料。service()方法會被多次呼叫,客戶端每請求一次Servlet,對應的service()方法就會被呼叫一次;最後根據請求方式的不同去分別呼叫doGet()或doPost()方法做請求分發。
當TomCat伺服器停止或移除當前工程的時候,就會呼叫destroy()方法,Servlet物件銷燬,生命週期結束。

5.如何實現在Tomcat啟動時就把需要的Servlet物件創建出來?

在需要啟動時建立物件的<Servlet>標籤內加上 <load-on-startup> 1 <load-on-startup> 標籤,指定一個大於等於0的正整數就可以了。

   值越小優先順序越高。如果有多個Servlet都需要TomCat啟動時被建立,設定的數越小先被建立。如果是負數就是預設情況:代表第一次被訪問時建立物件。
SpringMVC就是通過再web.xml裡配置<load-on-startup>標籤的方式來實現在TomCat啟動時就建立SpringMVC的核心物件DispatcherServlet,來代替Servlet功能。

6.Servlet的執行詳細流程圖

這裡寫圖片描述
Servlet程式必須通過Web容器來啟動執行,也就是TomCat,並且儲存目錄有特殊要求,通需要儲存在

7.Servlet物件的生命週期:

預設客戶端第一次請求訪問時,建立對應的Servlet物件。
1.先反射呼叫Servlet的構造器,建立Servlet物件,生命週期開始;
2.然後執行init()初始化方法;只會呼叫一次,其中方法引數ServletConfig也是一個介面。
3.執行server()方法,主要用來處理請求和回傳資料;執行多次,每次請求都會呼叫一次。一直點選重新整理位址列,server()就會一直執行。
4.當TomCat伺服器停止或移除當前工程的時候,會呼叫destroy()方法,Servlet物件銷燬,生命週期結束。

Servlet的生命週期是Servlet介面原始碼規定的:
這裡寫圖片描述