過濾器(Filter)


過濾器(Filter)

Filter:用來過濾網站的數據

filter的用法和servlet基本一樣

作用:

  • 處理中文亂碼
  • 登錄驗證等等
  • 有了過濾器,我們就不需要在每個servlet中設置字符集編碼,這個就提高了開發效率

思路如圖:

開發步驟:

  1. 導包
<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
  </dependency>
</dependencies>
  1. 編寫過濾器(實現Filter接口,重寫對應的方法)
public class CharacterEncodingFilter implements Filter {
    //初始化
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter初始化了");
    }
    /*
        1.過濾中的所有代碼,再過濾特定請求的時候都會執行
        2.必須要讓過濾器繼續前進
            filterChain.doFilter(servletRequest,servletResponse);
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=UTF-8");

        System.out.println("CharacterEncodingFilter執行前");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("CharacterEncodingFilter執行后");
    }
    //銷毀
    @Override
    public void destroy() {
        System.out.println("CharacterEncodingFilter初始化了");
    }
}

重點:一定要寫filterChain.doFilter(servletRequest,servletResponse);這樣才可以讓過濾器繼續前進

  1. 在web.xml中配置
<servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>com.kuang.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/servlet/show</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <!--要過濾什么,路徑包含什么就可以了-->
    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>

這樣改過濾的servlet就得到了過濾。

注意:這里的 / 一定不要把中間的/給丟掉,因為之前一直沒注意這個/,導致在寫路徑時沒有加/,結果運行tomcat一直報錯,找了近半個小時錯誤沒解決,最后發現是這個小問題!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM