SSM项目经常遇到的乱码问题

开发时使用jetty一切正常的项目,部署到linux中tomcat下,卧槽,各种乱码问题,记录一下解决过程:

1. 路径上有中文无法打开,是因为tomcat不支持

修改conf/server.xml,添加URIEncoding(搜索port="8080")

  

 <Connector port="8080" protocol="HTTP/1.1"

            connectionTimeout="20000"

            redirectPort="8443"

         URIEncoding="UTF-8"/>

2. form提交后,(springmvc)后台接受到乱码

web.xml添加过滤器:

<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>

3. Mybaits中文查不出数据

使用 类似Mybatis查询在语句select..from.. where s.username= #{username} 查询条件查询

传入username的是中文,在数据库中可以正常查询出来,但是mybatis查不出来(执行查询结果显示返回0条数据),折腾了很久,怀疑还是编码问题导致。

以下是网上找到的解决办法,果然有效! (个人安装的my.cnf文件只有mysqld选项,所以只要在[mysqld]下添加一行default-character-set=utf8就行)

估计数据库编码是latin的吧,最终找到原因,数据库安装后,编码没设置,设置成utf-8就好了,修改配置文件,最简单的完美修改方法,修改mysqlmy.cnf文件中的字符集键值(注意配置的字段细节):

1、在[client]字段里加入default-character-set=utf8,如下:

 

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

2、在[mysqld]字段里加入character-set-server=utf8,如下:

 

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8

3、在[mysql]字段里加入default-character-set=utf8,如下:

[mysql]
no-auto-rehash
default-character-set=utf8

修改完成后,service mysql restart重启mysql服务就生效。

 

再一查询OK

 

 

4.其他应该注意的地方

在springmvc配置中有编码配置的地方,一律UTF-8

如果使用servlet,response写中文返回,记得加上:

response.setHeader("Content-type", "text/html;charset=UTF-8");  

使用JSP,不要忘记修改:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

 

posted on 2017-05-20 22:08  耐旺旺  阅读(3343)  评论(0编辑  收藏  举报

导航