tomcat+SSH中遇到中文乱码的解决方法
最近開始又轉向J2EE的開發。很久沒用,重新熟悉。
本地環境ubuntu 12.13,mysql5.x,tomcat7.x,struts2.3.15.x,spring3.1.0,hibernate4.1.x
之前一直連線上服務器上測試數據庫,沒有發現有中文亂碼問題。
現在在本地搭建此環境,使用本地數據庫,便于調試,但是發現每次對數據庫操作,有中文就會出現????亂碼。
那現在一步步排除什么原因引起:
前端jsp或者html界面:
對于在頁面中顯示出現亂碼,這個問題比較簡單,便是檢查你的JSP文件里是不是出現了中文要處理,因為JSP默認的編碼格式為“ISO-8859-1”,當JSP中出現要處理的中文時,其顯示就出現亂碼了,這種情況一般出現在手寫JSP,或修改時。
<%@?page?language="java"?contentType="text/html;?charset=utf-8"pageEncoding="UTF-8"%>2、傳參數過程中亂碼
傳遞參數出現的亂碼,參數的內容為中文。無論是post或者get。
需要關注的位置:
?tomcat 配置,位置 tomcat->conf->server.xml,加入URIEncoding="utf-8"
web.xml中加入過濾器filter
上面項目中用的spring帶的web字符過濾器
tomcat 配置,位置 tomcat->conf->web.xml ? ? 放開注釋的過濾器
編寫過濾器Filter (這個沒用到)
3、后臺部分
主要是關注:hibernate和mysql(我項目用的mysql數據庫)
?hibernate注意:
連接mysql,如果用hibernate.cfg.xml加上屬性.
<property name="connection.useUnicode">true</property>?
<property name="connection.characterEncoding">UTF-8</property>?
如果用spring配置文件:
有兩種方法,1、直接寫到applicationContext.xml中;2、寫到database-config.properties中,由applicationContext.xml調用
database-config.properties:
mydata.driverClass=com.mysql.jdbc.Driver #mydata.url=jdbc:mysql://localhost:3306/sdk?useUnicode=true&characterEncoding=UTF-8 mydata.url=jdbc:mysql://localhost:3306/sdk?useUnicode=true&characterEncoding=UTF-8 mydata.username=root wshouyouDB.password=xxxx(我遇到的問題是出現上段代碼中)
applicationContext.xml:
<!--?讀取jdbc.properties配置文件?--><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property?name="locations"><value>classpath:database-config.properties</value></property></bean><bean?id="dataSource"?destroy-method="close"class="com.mchange.v2.c3p0.ComboPooledDataSource"><property?name="driverClass"?value="${mydata.driverClass}"?/><property?name="jdbcUrl"?value="${mydata.url}"?/><property?name="user"?value="${mydata.username}"?/><property?name="password"?value="${mydata.password}"?/>mysql部分
創建數據庫表中,注意:
show create table gamepad_model;看一下創建表的語句
CREATE?TABLE?`gamepad_model`?(`edit_id`?varchar(50)?NOT?NULL,`filedata`?text,`gamepad_type`?varchar(100)?NOT?NULL,`pic_url`?varchar(255)?DEFAULT?NULL,`sdk_version`?varchar(50)?NOT?NULL,`update_date`?timestamp?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?ON?UPDATE?CURRENT_TIMESTAMP,PRIMARY?KEY?(`edit_id`) )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8需要加上: CHARSET=utf8
排除是不是mysql的問題,可以手動插入一條含有中文的數據,看看表中是否有亂碼;
?
insert?into?gamepad_model(edit_id,filedata,gamepad_type,sdk_version)?values('test3_測試','ttt','testtt_你好','1');如果沒有問題,則排除mysql問題
一步一步排除
1、前臺,是否有亂碼,不是,傳遞參數層
2、傳遞參數,到java中,看到傳遞過來的中文,debug下是否有中文亂碼,如果沒有,排除之
3、前兩步排除后,就應該是后臺問題,hibernate或者mysql問題,
4、可以先看上邊提到的,手動插入一句有中文內容的語句,看數據庫中是否有亂碼,如果沒有,排除之
5、到這一步,就只剩下hibernate問題了。在上文中,提到注意的地方,檢查。
我的問題就在這一步,
mydata.url=jdbc:mysql://localhost:3306/sdk?useUnicode=true&characterEncoding=UTF-8一般不在xml中,連接數據庫需要加上
useUnicode=true&characterEncoding=UTF-8但是如果在xml中,需要轉意一下
mydata.url=jdbc:mysql://localhost:3306/sdk?useUnicode=true & characterEncoding=UTF-8
其他方面沒有研究,有的話,請多指教!
相關文章推薦:
Tomcat在Linux上使用Native Library
apache+3tomcat+jk+memcached集群環境搭建
Linux(ubuntu12.04)下搭建Nginx+Tomcat
本文來自:愛好Linux技術網
本文鏈接:http://www.ahlinux.com/tomcat/9253.html
轉載于:https://blog.51cto.com/9626185/1579052
總結
以上是生活随笔為你收集整理的tomcat+SSH中遇到中文乱码的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js中用到的正则表达式
- 下一篇: 《3D数学基础系列视频》1.1向量基本概