Filter過濾器介紹

1.Filter的創建

定義一個類讓其實現Filter接口

2.Filter的設置

在doFilter()方法中加入相應的攔截代碼,加入了相應的攔截代碼之後需要使用chain.doFilter(req,resp)讓請求繼續走

3.Filter的配置

在web.xml中進行配置

 <filter>
    <filter-name>TestFilter</filter-name>
    <filter-class>org.itat.filter.MyFilter</filter-class>
 </filter>

<filter-mapping>
  <filter-name>TestFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

url-pattern表示要攔截哪些請求:/
·/* :表示攔截所有請求
·/01/1.jsp : 表示僅僅只對01/1.jsp文件進行攔截
·/01/* : 表示攔截01/這個文件夾中的所有信息
特別注意:/01/*.jsp這種方式是不允許的,只允許以上三種方式

4.使用過濾器解決字符編碼

定義一個CharacterEncodingFilter,在doFilter中使用request.setCharacterEncoding(xxx);來解決
注意:當有多個Filter被定義的時候會每一個filter都執行,執行順序按照web.xml中配置先後執行
爲了讓一些常量在配置文件中定義,可以使用

<filter>
  <filter-name>CharacterFilter</filter-name>
  <filter-class>org.itat.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>Char</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>

init-param就是用來定義相應的初始化參數,需要在Filter的init中通過config來獲取

@Override
  public void init(FilterConfig config) throws ServletException {
    charEncoding = config.getInitParameter("Char");//獲取初始化參數
    if(charEncoding==null||"".equals(charEncoding)) {
       charEncoding = "UTF-8";
    }
  }

charEncoding需要在doFilter中使用,所以將charEncoding定義成成員變量。

request.setCharacterEncoding(charEncoding);
chain.doFilter(request,response);

使用過濾器根據正則表達式過濾訪問地址
1、在初始化參數中傳遞一個正則表達式

<init-param>
    <param-name>pattern</param-name>
    <param-value>.*\.jsp|.*Servlet</param-value>
</init-param>

.*.jsp|.*Servlet表示匹配.jsp結尾和Servlet結尾的所有字符串

2、獲取瀏覽器的訪問地址

HttpServletRequest req = (HttpServletRequest)request;
String url = req.getRequestURI();//獲取瀏覽器的訪問地址
//參數中是ServletRequest,ServletRequest中沒有getRequestURI方法,getRequetURL方法是在HttpServletRequest中,所以需要進行強制類型轉換(HttpServletRequest req = (HttpServletRequest)request;)。

3、判斷是否匹配

if(url.matches(pattern)) {
       System.out.println(url);
       System.out.println(url.matches(pattern));
       request.setCharacterEncoding(charEncoding);//修改字符編碼
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章