Servlet之Filter過濾器

n672 9年前發布 | 14K 次閱讀 Servlet Java開發

過濾器是一個實現了javax.servlet.Filter 接口的 Java 類。javax.servlet.Filter 接口定義了三個方法:

1    public void doFilter (ServletRequest, ServletResponse, FilterChain)

該方法在每次一個請求/響應對因客戶端在鏈的末端請求資源而通過鏈傳遞時由容器調用。

2    public void init(FilterConfig filterConfig)

該方法由 Web 容器調用,指示一個過濾器被放入服務。

3    public void destroy()

該方法由 Web 容器調用,指示一個過濾器被取出服務。

  字符編碼過濾器

    public class CharacterEncodingFilter implements Filter{  
          private String characterEncoding;  
          private boolean enabled;  

          public void init(FilterConfig config)throws ServletException{  
                 characterEncoding = config.getInitParameter(“characterEncoding”);  
                 enabled =  
                 "true".equalsIgnoreCase(config.getInitParameter("enabled").trim());  
          }  
          public void doFilter(ServletRequestrequest,ServletResponse response,  
                 FilterChainchain) throws IOException,ServletExceprion{  
          if(enabled&& characterEncoding !=null){  
                 request.setCharacterEncoding(characterEncoding);  
                 response. setCharacterEncoding(characterEncoding);  
          }  
          chain.doFilter(request,response);  //不能漏寫這一句  
          }  

          public void destroy(){  
                 characterEncoding = null;  //銷毀時清空  
          }  

    }  

配置如下:
    <filter>  
       <filter-name> CharacterEncodingFilter </filter-name>  
       <filter-class> filter.CharacterEncodingFilter</filter-class>  
       <init-param>  
           <param-name> characterEncoding </param-name>  
           <param-value>UTF-8</param-value>  
       </init-param>  
          <init-param>  
           <param-name> enabled </param-name>  
           <param-value>true</param-value>  
       </init-param>  
    </filter>  

    <filter-mapping>  
       <filter-name> CharacterEncodingFilter </filter-name>  
       <url-pattern>/*</url-pattern>  
          <dispatcher>REQUEST</dispatcher>  
    </filter-mapping>  

頁面編碼方式與Filter的編碼方式必須一致,另外,如果表單是GET方式提交的,還需要修改Tomcat的server.xml,指定URIEncoding(默認為ISO-8859-1)

<Connect port= "8080" protocol = ”HTTP/1.1” connectionTimeout = “20000”

redirectPort = “8443” URIEncoding = "UTF-8"/>

<dispatcher>標簽一般不用配置,默認為REQUEST,一共有四種

REQUEST:只有直接請求Servlet時才生效

FORWARD:只有當某Servlet通過forward到該Servlet時才生效

INCLUDE:JSP中通過<jsp:include/>請求某Servlet時才生效

ERROR:JSP通過<%@ pageerrorPage = “error.jsp” %>指定錯誤頁面時才生效

filter的順序是按照<filter-mapping>的配置先后來執行的

filter的典型應用還有身份驗證過濾器(Authentication Filters)、數據壓縮過濾器(Data compression Filters)、加密過濾器(EncryptionFilters)、觸發資源訪問事件過濾器、圖像轉換過濾器(Image Conversion Filters)、日志記錄和審核過濾器(Loggingand Auditing Filters)、MIME-TYPE 鏈過濾器(MIME-TYPE Chain Filters)、標記化過濾器(TokenizingFilters)、XSL/T 過濾器(XSL/T Filters)、轉換 XML 內容,此外,通過重載HttpServletRequestWrapper類,自定義request還可以實現文件上傳的Filter

 本文由用戶 n672 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!