在使用tomcat9以及之前的版本,request-character-encoding和response-character-encoding使用的字符编码默认不是utf-8,所以导致前端发送到后台的中文乱码.如果使用的是tomcat10以及之后的版本,在apache-tomcat-10.1.25\conf\web.xml已设置好默认的字符集编码为utf-8,如果所示:
所以使用tomcat9以及之前的版本,可以手动编写过滤器来处理中文乱码:
- 首先编写实现Filter接口的实现类
package com.powernode.springmvc.filter;import jakarta.servlet.*;import java.io.IOException;public class CharacterEncodingFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//设置请求体的字符集request.setCharacterEncoding("utf-8");//设置响应体的字符集response.setCharacterEncoding("utf-8");//执行下一步chain.doFilter(request,response);}
}
- 然后在web.xml中,定义过滤器的名称等
<!--配置字符编码过滤器--><filter><!-- 定义过滤器的名称,这个名字是唯一的,并且在整个web.xml文件中被引用 --><filter-name>characterEncodingFilter</filter-name><!-- 定义过滤器的全类名,即这个过滤器实现类的完整路径 --><filter-class>com.powernode.springmvc.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
这样提交post中含有中文就不会乱码了.