过滤器(Filter)


过滤器(Filter)

Filter:用来过滤网站的数据

filter的用法和servlet基本一样

作用:

  • 处理中文乱码
  • 登录验证等等
  • 有了过滤器,我们就不需要在每个servlet中设置字符集编码,这个就提高了开发效率

思路如图:

开发步骤:

  1. 导包

  
    junit
    junit
    4.11
    test
  
  
    javax.servlet
    servlet-api
    2.5
  
  
    javax.servlet.jsp
    jsp-api
    2.1
  

  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中配置

    ShowServlet
    com.kuang.servlet.ShowServlet


    ShowServlet
    /servlet/show



    CharacterEncodingFilter
    com.kuang.filter.CharacterEncodingFilter


    CharacterEncodingFilter
    
    /servlet/*

这样改过滤的servlet就得到了过滤。

注意:这里的/一定不要把中间的/给丢掉,因为之前一直没注意这个/,导致在写路径时没有加/,结果运行tomcat一直报错,找了近半个小时错误没解决,最后发现是这个小问题!!!