前言
本文介绍了springMVC中文乱码的解决方案,同时也贴出了本人遇到过的其他乱码情况,可以根据自身情况选择合适的解决方案。
其他-jdbc、前端、后端、jsp乱码的解决
Tomcat导致的乱码解决
自定义中文乱码过滤器
老方法,通过javaWeb-Filter解决
准备工作
1.把上一章中的取消数据绑定的设置注释掉:
//恢复注解
@NotEmpty(message="不能为空")
private String name;
//MonsterHandler中注释掉取消数据绑定
//webDataBinder.setDisallowedFields("name");
2.输入中文:
3.后台显示中文乱码:name='佩æ©'
Filter回顾
Filter的生命周期图解
自定义实例
1.创建com/stein/springMVC/filter/MyCharacterFilter.java
import javax.servlet.*;
//注意Filter接口不要引用错了
public class MyCharacterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}
}
2.在doFilter()中执行
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
//设置utf-8编码
servletRequest.setCharacterEncoding("utf-8");
//放行过滤器
filterChain.doFilter(servletRequest,servletResponse);
}
3.在web.xml中配置Filter
建议放在最前面
<!--配置自定义的中文乱码过滤器-->
<filter>
<filter-name>MyCharacterFilter</filter-name>
<filter-class>com.stein.springMVC.filter.MyCharacterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyCharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.重新测试
后台输出:name='佩恩'。乱码解决
Spring提供的过滤器
通过上面的自定义的方法,在代码中写死了字符集是"uft-8",属于硬编码的方式,不够灵活;自己灵活处理的话,又比较麻烦。于是有了spring给我们提供的字符过滤器。
1.在web.xmlx中注释掉刚刚自己定义的MyCharacterFilter
2.重新配置spring的过滤器
1)utf-8 或者 UTF-8都一样
2)encoding这个参数名,可以在CharacterEncodingFilter这个类名,按Ctrl+B进入查看到
<!--使用spring提供的过滤器处理中文,放在其它Servlet前-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<!--大小写都可以 utf-8-->
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.重新测试
中文正常显示!