认识Filter
1.定義
Filter的翻譯就是過濾器,可以認(rèn)為它是一種加強(qiáng)版的Servlet。
幾種常見Filter:
1. 用戶授權(quán)Filter。用于檢查用戶請求,根據(jù)請求過濾用戶非法請求。
2. 日志Filter。用于記錄某些特殊的用戶請求。
3. 解碼Filter
4. 改變XML內(nèi)容的XSLT Filter
2. Filter作用
3.創(chuàng)建 Filter
1. 創(chuàng)建Filter處理類
package com.zrgk.servlet;import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //通過注解方式配置,不需要在web.xml中再配置 @WebFilter(filterName="log",urlPatterns={"/*"}) public class MyFilter implements Filter {@Overridepublic void destroy() {//在Filter銷毀前,對某些資源進(jìn)行回收 }//過濾所有請求:對每個請求和響應(yīng)進(jìn)行額外處理@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {//轉(zhuǎn)換成HttpServletRequest請求,可多一些處理方法HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)resp;//設(shè)置所有路徑都支持跨域請求response.setHeader("Access-Control-Allow-Origin", "*");//打印記錄訪問路徑System.out.println("訪問路徑是:"+request.getServletPath());//放行。Filter是鏈?zhǔn)教幚?#xff0c;只有放行后,才能繼續(xù)往后執(zhí)行//執(zhí)行該方法前,是對用戶請求進(jìn)行預(yù)處理//執(zhí)行該方法后,是對服務(wù)器響應(yīng)進(jìn)行后處理//說明chain.doFilter(...);后面的代碼要在服務(wù)器生成響應(yīng)后才能執(zhí)行chain.doFilter(req, resp);System.out.println("放行后,還可執(zhí)行后面的代碼");}@Overridepublic void init(FilterConfig arg0) throws ServletException {//用于完成對Filter的初始化 }}注:要攔截多個URL時,使用模式字符串來攔截。
2. web.xml文件中配置Filter
若不是采用的注解方式創(chuàng)建Filter就得在web.xml當(dāng)中配置如下代碼:
<!-- 定義Filter --><filter><!-- Filter名字,相當(dāng)于@WebFilter的filterName屬性 --><filter-name>log</filter-name><!-- Filter實現(xiàn)類 --><filter-class>com.zrgk.servlet.MyFilter</filter-class></filter><!-- 定義Filter攔截的URL --><filter-mapping><!-- Filter名字 --><filter-name>log</filter-name><!-- 要攔截的URL,相當(dāng)于指定@WebFilter的urlPatterns屬性 --><url-pattern>/*</url-pattern></filter-mapping>4.Filter注解(@WebFilter)的常用屬性
| asyncSupported | 指定該Filter是否支持異步操作 |
| dipatcherTypes | 指定該Filter僅對哪種dispatcher模式的請求進(jìn)行過濾。該屬性支持ASYNC、ERROR、FORWORD、INCLUDE、REQUEST這5個值的任意組合,默認(rèn)同時過濾這5種。 |
| displayName | 指定該Filter的顯示名字 |
| filterName | 指定該Filter的名稱 |
| initParams | 為該Filter配置參數(shù) |
| servletNames | 指定該Filter對哪些Servlet執(zhí)行過濾,可多個值。 |
| urlPatterns/value | 指定要攔截的URL。這兩個屬性作用是一樣的。 |
5.Filter與Servlet比較
6. 使用URL Rewrite實現(xiàn)網(wǎng)站靜態(tài)
所以請求userinf-XXX.html頁面都會轉(zhuǎn)發(fā)到userinf.jsp頁面。
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: springMVC如何接收和发送json
- 下一篇: xxx cannot be resolv