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