Servlet过滤器

Filter可以改变一个request和修改一个response。Filter不是一个Servlet,它不能产生一个response,它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。

一个Filter必须实现javax.servlet.Filter接口并定义三个方法:
    · public void init(FilterConfig config):Filter实例化后进行初始化的回调方法。
    · public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain):处理过滤业务的方法。
    · public void destory():Filter在释放时回调的方法。
package com.yyq.filter;
import javax.servlet.*;
import java.io.IOException;
/**
 * Created by gao on 16-4-14.
 */
public class CharacterEncodingFilter implements Filter {
    private FilterConfig filterConfig;
    //Filter初始化时的回调方法
    //FilterConfig接口实例中封装了这个Filter的初始化参数
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }
    //主要负责过滤工作
    //FilterChain用于调用过滤器链中的下一个顾虑器
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //获取此Filter的初始化参数的值
        String encoding = filterConfig.getInitParameter("encoding");
        if (null != encoding && !"".equals(encoding)){
            //设置请求数据的编码方式
            servletRequest.setCharacterEncoding(encoding);
        }
        //把请求和响应对象传给过滤器链中的下一个要调用的过滤器或Servlet
        filterChain.doFilter(servletRequest,servletResponse);
    }
    //此Filter被释放时的回调方法
    @Override
    public void destroy() {
       //
    }
}

 web.xml注册这个Filter实现类,并配置初始化参数

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
 <!--定义一个过滤器-->
    <filter>
        <!--过滤器的标识名-->
        <filter-name>characterEncodingFilter</filter-name>
        <!--过滤器实现类的全限定名-->
        <filter-class>com.yyq.filter.CharacterEncodingFilter</filter-class>
        <!--配置初始化参数-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <!--过滤器的映射配置-->
    <filter-mapping>
        <!--过滤器的标识名-->
        <filter-name>characterEncodingFilter</filter-name>
        <!--过滤器的URL匹配模式-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
原文地址:https://www.cnblogs.com/yangyquin/p/5427154.html