问题引出
无论是get请求还是post请求,当请求或者响应的编码与项目编码格式不一致时,会导致中文乱码。如果每个Servlet都设置请求和响应格式的话,那会变得很麻烦。
解决方案
使用全局过滤器,对于每一次请求我们都可以捕捉到,到Fileter过滤器中设置请求和响应编码格式即可。
代码:
/**
* 解决全站乱码问题,处理所有的请求
*/
public class CharchaterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//这是初始化方法
}
@Override
public void doFilter(ServletRequest req, ServletResponse rep, FilterChain filterChain) throws IOException, ServletException {
//将父接口转为子接口
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) rep;
//获取请求方法
String method = request.getMethod();
//解决post请求中文数据乱码问题,get请求在tomcat8.0以后已经内部解决
if(method.equalsIgnoreCase("post")){
request.setCharacterEncoding("utf-8");
}
//处理响应乱码
response.setContentType("text/html;charset=utf-8");
//放行处理
filterChain.doFilter(request,response);
}
@Override
public void destroy() {
//销毁的时候执行
}
}
web.xml文件配置
<filter>
<filter-name>CharchaterFilter</filter-name>
<filter-class>com.gg.filter.CharchaterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharchaterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
只需要以上两步就可以解决问题啦