天天看點

JavaWeb 後端 <十二> 之 過濾器 filter 亂碼、不緩存、髒話、标記、自動登入、全站壓縮過濾器一、過濾器是什麼?有什麼?二、編寫步驟和執行過程三、串聯過濾器五、過濾器配置的細節六、鞏固裝飾設計模式七、案例:

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種類似

繼續閱讀