java中的Filter过滤器

过滤器,顾名思义,就是横亘在用户层和服务层之间的中间人。可以用来拿到通信的内容,通常是用户的请求和响应,并且可以做修改。
要添加一个过滤器,需要三步。

  1. 实现过滤器的接口。
  2. 在web.xml中注册。
  3. 在web.xml中说明过滤的url映射
public class FilterTest implements Filter{

    public void destroy() {
        System.out.println("----Filter销毁----");
    }

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {
        // 对request、response进行一些预处理
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        System.out.println("----调用service之前执行一段代码----");
        filterChain.doFilter(request, response); // 执行目标资源,放行
        System.out.println("----调用service之后执行一段代码----");
    }

    public void init(FilterConfig arg0) {
        System.out.println("----Filter初始化----");
        String t=arg0.getInitParameter("ss");//这里可以获得在web.xml中配置的初始化参数
        System.out.println(t);
    }
}

上面是一个过滤器,有三个方法。
init和destroy分别在web服务器加载和销毁的时候被执行。
deFilter是过滤的核心方法。用法见上述代码。

配置xml代码,注意filter配置必须要放在servet之前

  <filter>
    <filter-name>filter_test</filter-name>
    <filter-class>com.yrk.domain.FilterTest</filter-class>
    <init-param>
      <param-name>ss</param-name>
      <param-value>hhhhh</param-value>
    </init-param>
  </filter>
    <!--配置过滤所有映射-->
  <filter-mapping>
    <filter-name>filter_test</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

java web默认中文会乱码。这时候我们可以使用spring中的过滤器来转码。

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
posted @ 2020-01-17 15:37  开局一把刀  阅读(3)  评论(0)    收藏  举报