1、過濾器屬于Servlet規範,從2.3版本就開始有了。
2、過濾器就是對通路的内容進行篩選(攔截)。利用過濾器對請求和響應進行過濾
1、編碼步驟:
a、編寫一個類:實作javax.servlet.Filter接口
b、配置web.xml,指定需要過濾的資源。(和Servlet的配置相當類似)
2、過濾器的執行過程(生命周期)
生命周期:
誕生:過濾器的執行個體是在應用被加載時就完成的執行個體化,并初始化的。
存活:和應用的生命周期一緻的。在記憶體中是單例的。針對攔截範圍内的資源通路,每次通路都會調用void doFIlter(request,response.chain)進行攔截。
死亡:應用被解除安裝。
一個過濾器接着另外一個過濾器。執行的順序 按照web.xml的先後順序
随意 通路 會先直接FilterDemo2 的 再執行 FilterDemo3的
會輸出 :
FilterDemo2前
FilterDemo3前
執行内容
FilterDemo3後
FilterDemo2後
四、案例:
将 編碼類型寫在 Filter參數中
Servlet/JSP:動态資源不要緩存。
這裡 将 Servletrequest 和 ServletResponse 轉換為 HttpServlet 的方法 避免發生錯誤
動态過濾掉 Servlet 和Jsp
使用了Md5 加密
Base64編碼:很重要
編寫
一、裝飾
1、編寫一個類,實作與被包裝類(資料庫驅動對Connection的實作)相同的接口。(使這個類和資料庫的驅動實作有着相同的行為)
2、定義一個變量,引用被包裝類的執行個體。
3、定義構造方法,傳入被包裝類的執行個體。
4、對于要改寫的方法,編寫自己的代碼即可。
5、對于不需要改寫的方法,調用原有對象的對應方法。
二、裝飾變體(BufferedReader本身就是包裝類,對Reader的包裝。LineNumberReader,對BufferedReader的包裝,還是他的子類)
1、編寫一個類,繼承已經是包裝類的類。
4、覆寫掉需要改寫的方法
之前解決了 post 的亂碼 問題 這裡 添加 get的 解決問題
1.定義一個類 EncodingHttpServletRequest 繼承 HttpServletRequestWrapper 前對 後 的 包裝 得到自己想要的 方法
2.重寫 HttpServletRequestWrapper 的 getParameter 方法 。
3.将get傳入的值使用 該 super.getCharacterEncoding()的編碼 方式傳回
如果 使用 get方法 就可以 得到 應有的編碼方式
1.建立 DWHttpServletRequest 類 繼承 HttpServletRequestWrapper ,
2.包裝 getParameter 發方法 過濾 髒話
3.執行 内容 時 得到的是 DWHttpServletRequest 的 request 是以使用的方法是 DWHttpServletRequest的 getParameter。
方法和前2種類似