java web項目發布到linux服務器上運行出現亂碼


我們項目的開發是在windows下完成的。
然后導出.sql數據庫文件,並導出war包,准備部署到linux下的tomcat服務器上。
部署完成出現中文問題:

問題描述:
1.數據庫中原有的數據都能正常顯示
2.頁面顯示讀取出來出現亂碼
問題的解決過程:

考慮流程:1、數據庫存儲格式,索引的格式編碼 2、項目的文件編碼  3、瀏覽器(tomcat部署編碼格式)

一、項目中默認編碼設置是UTF-8
二、項目開發環境Eclipse的編碼方式是UTF-8(確保代碼中的中文顯示正常)
三、Tomcat配置:
       更改兩個文件的配置
       1.server.xml(添加紅色部分)
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"

URIEncoding="UTF-8" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8"/>

 

        2.web.xml
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>

默認tomcat7中上面這段代碼在注釋中,把它注釋去掉。
重啟tomcat使配置生效。
四、mysql配置
1.修改mysql默認配置:
默認的mysql配置:server、client都是latin1,對中文是不支持的,這里改為utf8
方法:
修改配置文件:
#vim /etc/mysql/my.cnf 
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

重啟mysql

/etc/init.d/mysql restart

檢查編碼方式:

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                 |
| character_set_database   | latin1               |
| character_set_filesystem | binary               |
| character_set_results    | utf8                      |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

2.修改項目使用的數據庫的配置
修改此數據庫的編碼方式為utf8(默認是latin1)
mysql> alter database 數據庫名 character set utf8;

查看此數據庫的編碼:
mysql> status

Connection id:        41
Current database:    tslcrms
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.5.38-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:            53 min 14 sec

mysql> show create database tslcrms;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| tslcrms  | CREATE DATABASE `數據庫名` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+

3.導入數據庫文件中的表、字段的編碼方式都修改成utf8
可以直接改.sql文件,改完導入。
也可以先導入,再用命令查看和更改。


附:在mysql中使用命令修改字符集:
     mysql> SET character_set_client = utf8 ;
     mysql> SET character_set_connection = utf8 ;
     mysql> SET character_set_database = utf8 ;
     mysql> SET character_set_results = utf8 ;
     mysql> SET character_set_server = utf8 ;
     mysql> SET collation_connection = utf8 ;
     mysql> SET collation_database = utf8 ;
     mysql> SET collation_server = utf8 ;

 
   SET NAMES 'utf8';
相當於下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
---------------------

3.這個方法行不通后,我就開始設置linux服務器中的編碼方式

在/etc/sysconfig/i18n中添加編碼方式

LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"

4.添加之后,重啟系統還是不行,由於我是把項目放到tomcat服務器下,最后嘗試了一下修改tomcat編碼

在server.xml文件中添加編碼方式

    <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

5.重啟服務后,運行項目OK




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM