说明
之前从表单获取数据,需要设置字符集,否则中文乱码,如下:
req.setCharacterEncoding("UTF-8");
输出中文时,也需要设置字符集,否则中文乱码,如下:
resp.setContentType("text/html; charset="+charset);
通过过滤器实现这一功能,就不用每次都在 jsp、Servlet中设置了
java
public class CharsetFilter implements Filter {
private String charset;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
charset=filterConfig.getInitParameter("charset");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain fc) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)servletRequest;
HttpServletResponse resp=(HttpServletResponse)servletResponse;
req.setCharacterEncoding(charset);
resp.setCharacterEncoding(charset);
// 有 resp.setCharacterEncoding(charset) 代码,就不需要下面代码
// resp.setContentType("text/html; charset="+charset);
// 让过滤器继续往下执行,如果不加此代码,过滤器不再执行,导致页面显示空白
fc.doFilter(req,resp);
}
}
缺点
访问 html 页面时,会产生乱码,详见:javaweb Filter过滤器设置编码,导致html乱码
配置web.xml
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>top.malaoshi.CharsetFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
