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介面原始碼規定的: