过滤器可以在项目里面一劳永逸的解决我们的乱码问题,不用每个servlet都去手动设置他们request和response里面的编码格式。
1、过滤器的作用 :就是对所有匹配的servlet进行一些信息的过滤或者信息的加工。
2、新建过滤器步骤:
(1)新建过滤器关联的java类,实现Filter接口【在创建类的时候,可以直接点击add--Filter实现接口的继承,选择servlet】
(2)引入几个方法 init destroy dofilter方法 (重写,注意过滤链chain的使用)【如果上面是自动继承则,不用本步】
(3)在web.xml注册
package com.wtt.sysmanage.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter {
private FilterConfig filterConfig;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//获取filter初始化参数值
String encoding = filterConfig.getInitParameter("encoding");
if (encoding != null && !encoding.equals("")) {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset="+encoding);
}
//进行测试
System.out.println("我们即入了字符编码的过滤器");
//把请求和响应继续带到下一个filter,如果没有下一个filter就进入请求的servlet(下一步)
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
}
进行注册
characterEcodingFilter
com.wtt.sysmanage.filter.CharacterEncodingFilter
encoding
UTF-8
characterEcodingFilter
/rebuild