1. 程式人生 > >【WEB 三大核心 Servlet Filter 和 Listener 的生命週期 和 執行流程 】

【WEB 三大核心 Servlet Filter 和 Listener 的生命週期 和 執行流程 】

1. Servlet 的 生命週期 和 執行流程
1.1 Servlet 的執行流程
1. 客戶端傳送請求 (以 GET 或者 Post 方式傳送請求 )
超連結 : <a href="servlet/HelloServlet"/> 或者 表單形式 : <form name="regForm" action="servlet/HellServlet" method="post">
2. 在web.xml中找到 <servlet-mapping><servlet-name>HelloServlet</servlet-name> <url-pattern>/servlet/HelloServlet</url-pattern></servlet-mapping> (第一條中的請求路徑對應的就是url-pattern中的請求路徑)
3. 同樣是 在 web.xml 檔案中 尋找
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>servlet.HelloServlet</servlet-class> </servlet>
2 和 3 的 servlet- name 相同 我們根據 name 找到 servlet-class Servlet 對應的類
4. 根據servlet-class 找到對應的類 根據請求方式 確定呼叫 doGet() 或者 doPost() 方法
1.2 Servlet 生命週期

1. 客戶端傳送 請求後首先判斷 是否存在Servet 例項 如果沒有 首先建立 Servlet 的例項(呼叫Servlet的構造方法) 2. 如果 存在 Serlvet 例項 則開始他的初始化階段 執行初始化方法 ( init() 方法) 3. 第三階段 是 響應 客戶端的 請求 呼叫Service() 方法 根據請求方式選擇執行 doGet() 或者 doPost()方法 4. 最後階段是 銷燬階段 程式結束 或者 伺服器停止 呼叫他的 銷燬方法 destroy()方法 。
2.Filter 的 生命週期和執行流程


1. Filter 的執行流程
當 WEB 容器接收到一個 客戶端的請求時 他就會判斷 是否有 過濾器 和 這個資源 相關聯 (這是一個自動的過程) 如果有 那麼容器會將 請求交給過濾器進行處理 在過濾器中 你可以改變請求的內容 或者重新設定請求的報頭資訊 然後 將請求 傳送給目標資源 當目標資源 對請求做出 響應時候 容器同樣會將響應先轉發給 過濾器 在過濾中 你可以將響應做出轉換 然後再將響應傳送給客戶端
2. Filter 的生命週期
當伺服器啟動時 web應用載入後 立即建立這個 web 應用中 的 所有過濾器 過濾器得到創建出來後立即呼叫 init ()方法執行初始化的操作
創建出來後一直駐留在記憶體中為後續的攔截進行服務 每次攔截請求都會導致 doFilter 方法執行
在伺服器關閉後 或者 web應用 被移除 容器時 隨著 WEB 應用的銷燬 過濾器物件銷燬 銷燬之後執行 destory方法 進行完善工作