流程:
web.xml
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.zte.util.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(1)写web.xml,tomcat一启动,创建两个config
实现ServletConfig的接口类对象
实现FilterConfig的接口类对象
(2)读取web.xml组件,将filter组件的初始化参数封装到config中
(3)tomcat继续读取filter,通过filter-class到WEBINFO/classes中找到filter包对应的classes文件中找到filter对象
(4)执行init,把封装的初始化参数注入
(5)在init()中拿到cofig初始化参数,将参数传给filter组件的实例全局化变量
(6)通过表单发请求(post),调用doFilter()处理
(7)下传demo01.jsp,客户端跳转,输出内容
public void init(FilterConfig config) throws ServletException {
this.encoding = config.getInitParameter("encoding");
System.out.println("encoding=" + encoding);
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
//造型
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
//System.out.println("CharsetEncodingFilter.doFilter()");
//设置字符集
//this.encoding从实例全局化变量拿编码方式
request.setCharacterEncoding(this.encoding);只能对表单里的汉字做编码
//System.out.println("--------doFilter begin----------");
//下传,如果继续执行其他的操作,必须显示的执行如下语句
chain.doFilter(request, response);
//System.out.println("--------doFilter end----------");
}
public void destroy() {
System.out.println("CharsetEncodingFilter.destroy()");
}
缺点:直对post请求的汉字处理
编码拦截器与业务没有关系,可以通过第三方插件部署,具有通用性