過濾器
過濾器是處於客戶端與服務器資源文件之間的一道過濾網,在訪問資源文件之前,通過一系列的過濾器對請求進行修改、判斷等,把不符合規則的請求在中途攔截或修改。也可以對響應進行過濾,攔截或修改響應。
Filter也稱之為過濾器,它是Servlet技術中最實用的技術,WEB開發人員通過Filter技術,對web服務器管理的所有web資源:例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。
它主要用於對用戶請求進行預處理,也可以對HttpServletResponse 進行後處理。使用Filter 的完整流程:Filter 對用戶請求進行預處理,接著將請求交給Servlet 進行處理並生成響應,最後Filter 再對服務器響應進行後處理。
建立Filter
CharsetEncodingFilter.java
package com.drp.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統一處理filter
* @author Danny
*
*/
public class CharsetEncodingFilter implements Filter {
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("CharsetEncodingFilter---->>>>Filter開始");
request.setCharacterEncoding("utf-8"); //設置字符集
chain.doFilter(request, response); //繼續執行
System.out.println("CharsetEncodingFilter---->>>>Filter結束");
}
@Override
public void init(FilterConfig config) throws ServletException {}
}
此過濾器CharsetEncodingFilter實現了javax.servlet.Filter接口(任何filter過濾器也必須實現這個接口);在服務器創建此filter並進行初始化執行init方法時,讀取配置文件並存入FilterConfigure的對象中;實現doFilter方法,在請求到達jsp之前將字符集編碼設置為utf-8,chain.doFiler()方法的作用是在對request對象進行處理之後,跳轉到被攔截的servlet繼續執行,執行完之後還要回到此處,chain.doFilter()下面還可以對response對象進行處理。
尚學堂立志解決中國教育不公平和低效率問題,幫助千千萬萬被傳統教育方式耽誤的人,傳授實用、前沿的知識,成就學員個人理想,為愛你的人和你愛的人創造美好的生活。尚學堂12大精英團隊+各類實戰項目,真正實現1+1>10的目標效果。幫助學員迅速成長,持久騰飛,成就學員“高富帥”人生。
閱讀更多 小菜鳥學Java 的文章