過濾Servlet--過濾器
從使用上看Servlet分為簡單Servlet,過濾Servlet(過濾器)和監聽Servlet(監聽器),這裡重點介紹過濾器。
基本概念:
Filter是Servlet2.3之後增加的新功能,當需要限制使用者訪問某些資源或者在處理請求時,提前處理某些資源時,可使用過濾器。
過濾器是以一種元件的形式繫結到Web應用程式中的,支援熱插拔。
過濾器採用鏈的方式處理
過濾器實現:
1.實現Filter介面
直接讓類實現javax.servlet.Filter介面,就定義了一個Filter,該介面定義了3個操作方法;
public void init(FilterConfig filterConfig) throws ServletException {
//過濾器初始化時呼叫,通過FilterConfig取得配置的初始化引數。 引數在Web.xml中配置<inti-param>
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
<span style="white-space:pre"> </span>//完成具體過濾操作,通過FilterChain,鏈式傳遞下去;
}
public void destroy() { //銷燬時使用
}
doFilter方法為核心方法,引數中的FilterChain介面,可以將請求向下繼續傳遞給其他過濾器或者Servlet;
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
<span style="white-space:pre"> </span>//請求向下繼續傳遞
}
2.配置Web.xml檔案
1.配置Filter對映的類,<filter-class>
2.配置Filter初始化引數;<init-param>
3.配置過濾器的過濾位置;<url-pattern>
(1)擴充套件匹配 *.jsp
(2)路徑字首匹配,包含一個目錄和一個/*
(3)全部匹配 /*
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<!-- 傳遞引數 -->
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<!-- 設定Filter對那些檔案起作用;這裡設定對Jsp頁面起作用; -->
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
3.呼叫過程
過濾器初始化時,初始化方法在容器中自動載入,通過FilterConfig的getInitParameter()方法讀取配置的初始化引數,只初始化一次.
doFilter方法會在請求和響應時分別呼叫。呼叫兩次;
應用:
filter可用來進行字元編碼的過濾,檢測使用者是否登陸的過濾,禁止頁面快取等。
Filter是以一種元件的形式,橫切入請求中的,支援熱插拔,不會對程式碼產生影響;
Filter加入前
Filter加入後
為了解決中文亂碼問題,在所有的請求中都加入了對於字符集的設定。這樣會造成大量重複的程式碼,這裡用Servlet中的過濾器Filter統一設定字符集,將編碼格式的設定放入到Filter中.
package com.bjpowernode.drp.util.filter;
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;
/**
* 採用Filter統一處理字符集
* @author fxq
*
*/
public class CharsetEncodingFilter implements Filter {
private String encoding;
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding=filterConfig.getInitParameter("encoding");
System.out.println("CharsetEncodingFilter.init()-->>encoding="+encoding);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("CharsetEncodingFilter---->>>begin");
//設定字符集
request.setCharacterEncoding("GB18030");
//繼續往下執行,並返回來;
chain.doFilter(request, response);
System.out.println("CharsetEncodingFilter---->>>end");
}
public void destroy() {
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
<!-- 傳遞引數 -->
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<!-- 設定Filter對那些檔案起作用;這裡設定對Jsp頁面起作用; -->
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>
通過Web.xml中配置,Filter只對所有的Jsp起作用,當向Jsp傳送請求時,會先通過過濾器執行init和doFilter方法,設定字符集,進行統一配置;
總結
Filter在請求前,先進行處理,並決定是否繼續往下鏈式傳遞,幫助我們解決類似字元統一的共享問題,減少程式碼重複。在使用的過程中應該考慮過濾和效能問題,把需要通過過濾的請求,做的詳細而不是讓所有的都執行過濾器。
相關文章
- 過濾器過濾器
- 4、過濾器的使用及自定義過濾器過濾器
- 代理過濾器過濾器
- vue 過濾器Vue過濾器
- Filter過濾器Filter過濾器
- hbase過濾器過濾器
- CAN過濾器過濾器
- Servlet過濾器Servlet過濾器
- 26、過濾器過濾器
- jms過濾器過濾器
- DataV過濾器過濾器
- Vue過濾器Vue過濾器
- 點雲濾波器與過濾器過濾器
- Xor過濾器:比布隆Bloom過濾器更快,更小過濾器OOM
- 誠翔濾器光刻膠過濾器濾芯:保障光刻過程的高效與安全過濾器
- asp.net core MVC 過濾器之ActionFilter過濾器(二)ASP.NETMVC過濾器Filter
- Vue中過濾器Vue過濾器
- 布隆過濾器過濾器
- vue---過濾器Vue過濾器
- PHP 過濾器(Filter)PHP過濾器Filter
- vue filters過濾器VueFilter過濾器
- Java Filter過濾器JavaFilter過濾器
- lucene Filter過濾器Filter過濾器
- 四種過濾器過濾器
- Spring Cloud Gateway ---GatewayFilter過濾器、過濾器工廠(入門)SpringCloudGatewayFilter過濾器
- 過濾
- 過濾器應用【編碼、敏感詞、壓縮、轉義過濾器】過濾器
- Spring Cloud Gateway中的過濾器工廠:重試過濾器SpringCloudGateway過濾器
- 5.scrapy過濾器過濾器
- NetCore過濾器NetCore過濾器
- 攔截過濾器模式過濾器模式
- Filter過濾器的使用Filter過濾器
- JavaWeb 中 Filter過濾器JavaWebFilter過濾器
- SpringSecurity過濾器原理SpringGse過濾器
- 4、angularJS過濾器AngularJS過濾器
- 監聽器和過濾器過濾器
- 13.gateway中的過濾器的介紹以及自定義過濾器Gateway過濾器
- 【過濾器】web中過濾器的使用與亂碼問題解決過濾器Web