* Java Filter
1. Java Filter(即:Java 過濾器):它可以對目標資源的請求或響應進行截取,即對服務器接受的請求資源或響應給瀏覽器的資源進行截取,一般用於攔截 Request 請求
2. 在 Web 項目中能夠有多個 Java 過濾器
3. 應用場景:
a.統一設置編碼格式
b.Session 管理
c.權限管理,如:訪問權限控制等
d.資源管理,如:敏感字符過濾等
4. 生命週期:從服務器啓動直到關閉
* Filter 的使用
1. 在 web.xml 中配置過濾器:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.ncdx.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:
a.url-pattern:/* 表示攔截全部的請求:
b.url-pattern:*.do 表示攔截全部以 ".do" 結尾的請求,通常進行模塊攔截處理
c.url-pattern:url 表示攔截指定 url 的請求。針對指定的 Servlet 進行攔截處理,能夠實現對 Servlet 的保護
2. 建立一個實現 Filter 接口的 Java 類,複寫接口方法:
1)public void init (FilterConfig filterConfig) throws ServletException;
a.服務器啓動即執行,資源初始化
2)public void doFilter (ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException;
a.攔截資源的方法體,在此方法中能夠對目標資源進行處理
b.調用放行方法:chain.doFilter(req, resp);
3)public void destroy();
a.服務器關閉即執行
* Java 過濾器的工做原理以下圖所示:
1. 客戶端發起請求到服務器,服務器接收到請求後,根據 URI 信息在 web.xml 中找到對應的過濾器執行 doFilter() 方法
2. doFilter() 方法對這次請求處理後若是符合要求則調用 chain.doFilter(req, resp); 放行
3. 放行後若是還有符合要求的過濾器則繼續進行過濾,直到被對應的 Servlet 處理
4. Servlet 完成對請求的處理後,也就是 service() 方法結束後,還須要繼續返回到相應的 doFilter() 方法中執行
5. 最後,把處理結果響應給客戶端
/** * 利用 Java 過濾器統一設置編碼格式 */
public class FlowerFilter implements Filter{ @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { //設置請求編碼格式 req.setCharacterEncoding("utf-8"); //設置響應編碼格式 resp.setContentType("text/html;charset=utf-8"); //放行 chain.doFilter(req, resp); } } /* 在 web.xml 中的配置以下:*/ <filter> <filter-name>myFilter</filter-name> <filter-class>com.ncdx.filter.myFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>