1. 程式人生 > >filter的使用

filter的使用

gen ppi destroy www web one event dir con

(1)什麽是filter

過濾器是處於客戶端與服務器資源文件之間的一道過濾網,在訪問資源文件之前,通過一系列的過濾器對請求進行修改,判斷等,把不符合規則的請求在中途攔截或者修改。或者對響應進行過濾、攔截或者修改。

技術分享圖片

xml中的配置:

此處<url—pattern>/*</url-pattern>。則客戶端請求訪問任意資源文件時都要經過過濾器過濾,通過則訪問文件,否則攔截。

當然你可以只作用於某個文件夾下的所有文件::<url—pattern>/dir/*</url-pattern>

作用於某一種類型的文件:<url—pattern>*.擴展名</url-pattern>。比如<url—pattern>*.jsp</url-pattern>過濾所有對jsp文件的訪問請求。

作用於某一文件夾下某一類型文件:<url—pattern>/dir/*.擴展名</url-pattern>

跟servlet類似,如果一個過濾器需要過濾多種文件,則可以配置多個<filter-mapping>,一個mapping定義一個url-pattern來定義過濾規則。

技術分享圖片

詳情參考此圖

重點!!!在web.xml中配置過濾器。這裏要謹記一條原則:在web.xml中,監聽器>過濾器>servlet。也就是說web.xml中監聽器配置在過濾器之前,過濾器配置在servlet之前,否則會出錯。

技術分享圖片

當未加過濾器時,頁面顯示亂碼

技術分享圖片

加了過濾器

技術分享圖片

代碼:

xml

技術分享圖片
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  <display-name>myTest1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default
.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>MyServlet1</servlet-name> <servlet-class>cn.swpu.pang.MyServlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet1</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <filter> <filter-name>MyFilter1</filter-name> <filter-class>cn.swpu.pang.MyFilter1</filter-class> </filter> <filter-mapping> <filter-name>MyFilter1</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
View Code

myFilter1

技術分享圖片
package cn.swpu.pang;

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.annotation.WebFilter;

/**
 * Servlet Filter implementation class MyFilter1
 */
@WebFilter("/MyFilter1")
public class MyFilter1 implements Filter {

    /**
     * Default constructor. 
     */
    public MyFilter1() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("我的filter");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        chain.doFilter(request, response);
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}
View Code

在中間遇到了一個問題,就是如果,用

HttpServletRequest request=(HttpServletRequest) arg0;//獲取request對象
HttpServletResponse response=(HttpServletResponse) arg1;//獲取response對象
進行類型轉換,在再設置編碼格式時,仍然會顯示亂碼,不知道問題所在

filter的使用