web应用中乱码问题是经常会遇到的,下面介绍一种全局乱码的解决方法.
web.xml文件中配置我们的编码过滤器(过滤器自己实现).
<!-- 解决乱码问题的过滤器 -->
<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>cn.filter.EncodingFilter</filter-class>//自己写的过滤器
<init-param>
<param-name>Encoding</param-name>//初始化参数,过滤器类中的成员变量,用web配置
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面配置好过滤器,拦截URL为/*,所以我们的请求响应会全部通过过滤器的拦截后才会被放行,那么保证我们的编码都是utf-8.
下面是我们自己的编码过滤器类.
public class EncodingFilter implements Filter {
protected FilterConfig config;
protected String encoding = null;
@Override
public void init(FilterConfig arg0) throws ServletException {
this.config = arg0;
/* 从web.xml里读取编码的配置初始值 */
this.encoding = config.getInitParameter("Encoding");
}
/**具体实现的过滤方法*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain arg2)
throws IOException, ServletException {
if (encoding == null) {
encoding = "UTF-8";
}
//基本上这三种编码设置后,请求\响应都不会出现乱码了
response.setCharacterEncoding(encoding);
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=" + encoding);
arg2.doFilter(request, response);
}
/**自动调用destroy方法*/
@Override
public void destroy() {
encoding = null;
}
}
是不是很简单呢,这可以解决大部分web应用的乱码问题,其他的情况我这里就不写了.