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步)。
2. 這兩種方法有本質的區別,get只有一個流,參數附加在url後,大小個數有嚴格限制且只能是字符串。post的參數是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進制數據,如文件的上傳。
3. 在servlet開發中,以doGet()和doPost()分別處理get和post方法。
另外還有一個doService(), 它是一個調度方法,當一個請求發生時,首先執行doService(),不管是get還是post。在 HttpServlet這個基類中實現了一個角度,首先判斷是請求時get還是post,如果是get就調用doGet(), 如果是post就調用 doPost()。
配置描述文件中每個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鏈。
2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器。
3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。
4、攔截器可以訪問Action上下文、值棧裏的對象,而過濾器不能。
5、在Action的生命週期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。