過濾器解壓縮Servlet和JSP頁面內容
部署Servlet過濾器
事實上,與 Web 應用程序一起部署過濾器絕對不涉及任何復雜性。只需把過濾器類和其他 Web 組件類包括在一起,并像您通常所做的那樣把 web.xml 文件(連同過濾器定義和過濾器映射聲明)放進 Web 應用程序結構中,Servlet 容器將處理之后的其他所有事情。
過濾器的許多應用
您在 J2EE Web 應用程序中利用過濾器的能力,僅受到您自己的創(chuàng)造性和應用程序設計本領的限制。在適合使用裝飾過濾器模式或者攔截器模式的任何地方,您都可以使用過濾器。過濾器的一些最普遍的應用如下:
加載:對于到達系統(tǒng)的所有請求,過濾器收集諸如瀏覽器類型、一天中的時間、轉發(fā) URL 等相關信息,并對它們進行日志記錄。
性能:過濾器在內容通過線路傳來并在到達 Servlet和JSP頁面之前解壓縮該內容,然后再取得響應內容,并在將響應內容發(fā)送到客戶機機器之前將它轉換為壓縮格式。
安全:過濾器處理身份驗證令牌的管理,并適當?shù)叵拗瓢踩Y源的訪問,提示用戶進行身份驗證和/或將他們指引到第三方進行身份驗證。過濾器甚至能夠管理訪問控制列表(Access Control List,ACL),以便除了身份驗證之外還提供授權機制。將安全邏輯放在過濾器中,而不是放在 Servlet和JSP頁面中,這樣提供了巨大的靈活性。在開發(fā)期間,過濾器可以關閉(在 web.xml 文件中注釋掉)。在生產(chǎn)應用中,過濾器又可以再次啟用。此外還可以添加多個過濾器,以便根據(jù)需要提高安全、加密和不可拒絕的服務的等級。
會話處理:將 Servlet和JSP頁面與會話處理代碼混雜在一起可能會帶來相當大的麻煩。使用過濾器來管理會話可以讓 Web 頁面集中精力考慮內容顯示和委托處理,而不必擔心會話管理的細節(jié)。
XSLT 轉換:不管是使用移動客戶端還是使用基于 XML 的 Web 服務,無需把邏輯嵌入應用程序就在 XML 語法之間執(zhí)行轉換的能力都絕對是無價的。
使過濾器適應 MVC 體系結構
模型-視圖-控制器(Model-View-Controller,MVC)體系結構是一個有效的設計,它現(xiàn)在已作為最重要的設計方法學,整合到了諸如 Jakarta Struts 和 Turbine 等大多數(shù)流行的 Web 應用框架中。過濾器旨在擴充 MVC 體系結構的請求/響應處理流。不管請求/響應發(fā)生在客戶機和服務器之間,還是發(fā)生在服務器上的其他組件之間,過濾器在處理流中的應用都是相同的。從 MVC 的觀點看,調度器組件(它或者包括在控制器組件中,或者配合控制器組件工作)把請求轉發(fā)給適當?shù)膽贸绦蚪M件以進行處理。這使得控制器層成為包括 Servlet 過濾器的***位置。通過把過濾器放在控制器組件本身的前面,過濾器可以應用于所有請求,或者通過將它放在控制器/調度器與模型和控制器之間,它可以應用于單獨的 Web 組件。
MVC 體系結構廣為傳播,并具有良好的文檔。請通過 參考資料 中的鏈接了解關于 MVC 和 MVC 體系結構中的 Servlet 實現(xiàn)的更多信息。
【編輯推薦】