今天在练习一个SSM的CRUD项目时,发现前端页面通过表单提交过来的数据保存到数据库后是乱码的!
于是,开始查找问题原因!
经过测试查找,发现数据库是可以保存中文的,不会发生乱码,不是问题所在;
同时,前端页面可以正常显示中文,问题同样不在这儿;
真正的问题在于:前端的中文数据通过Spring MVC提交到Controller后,数据变为了乱码!
那么,知道了问题所在,接下来就是解决问题了:↓ ↓ ↓
通过搜索查找,成功找到了解决乱码的办法:
首先,确保各个地方的编码格式是【UTF-8】格式,如:HTML页面、JSP页面等,还有如数据库的连接参数等地方(当然,这里我的数据库连接是没有问题的)
[注意:]
在设置数据库的连接参数时,如果是使用配置文件的方式,而配置文件又是XML文件的话,需要注意一个问题:
【 & 】字符需要进行转义!!!
详情,参考我的另一篇博客:https://blog.csdn.net/qq_37164975/article/details/82496826
然后,就是重点了,也是我解决项目中乱码的办法:↓ ↓ ↓
在 web.xml 文件中添加 Spring 编码过滤器配置[注意:form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果]
<!-- 编码过滤器配置 -->
<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>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
需要注意的是:匹配原则必须为【 /* 】,不能为【 / 】因为我们本来就是对【 .html 】或【 .jsp 】页面进行编码过滤!!!
在这里再提一句:【 /* 】和【 / 】 /的区别:
<url-pattern>/</url-pattern>
会匹配到如:【 /springmvc 】这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url。
<url-pattern>/*</url-pattern>
会匹配到所有的url:不管是如【 /springmvc 】这样的路径型url,还是如【 .jsp 】、【 *.html 】这样的后缀型url