Spring MVC中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEncoding)即可:
!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--
filter filter-name CharacterEncodingFilter /filter-name filter-class org.springframework.web.filter.CharacterEncodingFilter /filter-class init-param param-name encoding /param-name param-value utf-8 /param-value /init-param init-param param-name forceEncoding /param-name param-value false /param-value /init-param /filter filter-mapping filter-name CharacterEncodingFilter /filter-name url-pattern /* /url-pattern /filter-mapping
通过参考文档,我们可以知道:
l第一个方法setEncoding()相当于:ServletRequest.setCharacterEncoding(java.lang.String)
2.第二个方法setForceEncoding()的作用是:
强制ServletResponse的编码格式和ServletRequest的编码格式一样。
也就是说,无论是request还是response,encoding设置了两者的编码格式,只不过forceEncoding默认值为false,此时就只是设置了request的编码格式,即在Servlet中:
request.setCharacterEncoding("XXXX");
如果设置forceEncoding的值为true时,相当于Servlet中:
request.setCharacterEncoding("XXXX");
response.setCharacterEncoding( XXXX );
现在我们回过头来看看最初给大家看的web.xml中那部分过滤器的配置,相信大家都明白了,配置的作用相当于Servlet中的:
@RequestMapping() public void XXXXX(User user,HttpServletRequest req,HttpServletResponse resp) throws UnsupportedEncodingException //对服务器响应进行重新编码 resp.setCharacterEncoding("UTF-8"); //对请求进行重新编码 req.setCharacterEncoding("UTF-8"); ...... }