今天写代码的时候发现前台传到后台的参数总是乱码,记录一下解决方法。
SpringMVC编码格式过滤器配置(通过该过滤器,能够设置请求和应答的编码格式)
<filter>
<filter-name>EncodingFilter</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>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
设置了该过滤器,发现后台的参数还是乱码。发现请求参数在进入该filter之前就已经是乱码了,说明在此之前还需要进行编码格式指定。想了一下请求的过程,前台参数不是乱码,但是进入filter之前变成乱码了,说明在tomcat接受到请求的时候,参数已经是乱码了。网上查了一下,修改server.xml可以修改tomcat编码格式。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
这下好了,前后台通讯终于没有乱码了。
但是奇怪的事情又发生了,控制台的sql和参数在数据库中运行能够检索到结果,但是页面却没有显示结果。无条件检索的情况下是可以检索到结果的,说明前后台本身的代码没有问题,那么问题只能是应用服务器和数据库通信的时候,中文参数没有正确解析,导致数据库没有检索到结果。目标很明确,直接找度娘。
jdbc.url=jdbc:mysql://192.168.174.129:3306/mydb?useUnicode=true&characterEncoding=UTF-8
重点是userUnicode和characterEncoding两个参数。详解可以参考这篇文章,很清楚。
乱码问题暂时告一段落。