Servlet專題

1. Servlet 生命週期?
從Tomcat處理用戶請求,我們可以清晰的看到容器Servlet的生命週期管理過程:
  1、客戶發出請求—>Web 服務器轉發到Web容器Tomcat;
  2、Tomcat主線程對轉發來用戶的請求做出響應創建兩個對象:HttpServletRequest和HttpServletResponse;
  3、從請求中的URL中找到正確Servlet,Tomcat爲其創建或者分配一個線程,同時把2創建的兩個對象傳遞給該線程;
  4、Tomcat調用Servlet的service()方法,根據請求參數的不同調用doGet()或者doPost()方法;
  5、假設是HTTP GET請求,doGet()方法生成靜態頁面,並組合到響應對象裏;
  6、Servlet線程結束,Tomcat將響應對象轉換爲HTTP響應發回給客戶,同時刪除請求和響應對象。
  從該過程中,我們可以理解Servlet的生命週期:Servlet類加載(對應3步);Servlet實例化(對應3步);調用init方法(對應3步);調用service()方法(對應4、5步);調用destroy()方法(對應6步)。
有時候希望在servlet首次載入時,執行復雜的初始化任務,但並不想每個請求都重複這些任務的時候,用init()方法他在servlet初次創建時被調用,之後處理每個用戶的請求時,則不在調用這個方法。
2) servlet中 service dopost doget方法之間的區別?
1. get和post這是http協議的兩種方法,另外還有head, delete等
2. 這兩種方法有本質的區別,get只有一個流,參數附加在url後,大小個數有嚴格限制且只能是字符串。post的參數是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進制數據,如文件的上傳。
3. 在servlet開發中,以doGet()和doPost()分別處理get和post方法。
另外還有一個doService(), 它是一個調度方法,當一個請求發生時,首先執行doService(),不管是get還是post。在 HttpServlet這個基類中實現了一個角度,首先判斷是請求時get還是post,如果是get就調用doGet(), 如果是post就調用 doPost()。

 

3) filter生命週期:
web應用發佈完成之後,在request訪問web資源之前,容器必須定位需要應用到該資源上的filter列表。容器需要確保實例化列表中的每個filter並調用它的init方法。如不能正確執行,filter可以拋出異常。
  配置描述文件中每個filter的聲明在每個虛擬機中僅僅只有一個實例。容器提供filter配置祕書中聲明的config對象, 它包含了該web應用的ServletContext引用,和filter初始參數。
  當容器接收到request,將取得列表中的第一個filter實例,並調用它的doFilter方法。將傳入ServletRequest,ServletResponse和filterchain的引用。
  doFilter方法遵循以下模式:
  1.該方法檢測request的頭信息
  2.可能會用一個定製的ServletRequest或HttpServletRequest包裝request對象。
  3.可能會用一個定製的ServletResponse或HttpServletResponse包裝response對象。
  4.filter可以調用filter鏈中的下一個入口,可能是一個filter,也可能是目的web資源。
  5.調用鏈中的下一個filter之後,filter可以檢測響應頭信息。
  6.處理過程中,filter可能拋出異常。如果在doFilter中拋出UnavailableException,容器不要繼續filter鏈的處理,如非永久性異 常,它可以選擇在稍晚的時候重新執行整個filter鏈。
 
4) Struts2中過濾器,攔截器他們之間有什麼區別?
1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。
2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器。
3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。
4、攔截器可以訪問Action上下文、值棧裏的對象,而過濾器不能。
5、在Action的生命週期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。
 
5) java反射機制 寫道
在struts,spring等框架中配置類的實例化等...
 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章