Jboss Seam, mysql中文亂碼問題4步驟總結

來源:互聯網
上載者:User
其實以下總結適合於任何hibernate+mysql的情況;

步驟1:在建立資料庫Schema的時候請指定編碼,例如mysql,就用這樣的語句來建立Schema:

Sql代碼

create schema xxxx default character set utf8;

這一步必須這樣,因為至少我在網上還沒找到hbm2ddl的配置方法使得hibernate產生的資料庫表的編碼能被指定,那麼為schema設定一個預設的編碼就是最簡便的方法;當然,你也可以不在schema上設定預設編碼,等到hibernate產生表之後,在一個一個表地去改編碼。具體可查閱資料庫協助文檔。 

“步驟1”得不到確認的話,下面的步驟可以忽略;

步驟2:在工程中的每一個頁面,設定meta資訊

Html代碼

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

這個不多解釋了,設定了這個後,起碼你的頁面能“容得下”中文了。這一步建議在模板技術裡解決,在最外層的模板裡加上這個meta就行了,不用每個頁面都加。

至此,你會發現直接寫死在頁面上的中文沒問題;直接用資料庫管理用戶端的console插入的中文也沒問題;就是經由程式插入的中文資料有問題;那麼:

步驟3:指定資料庫連接url的參數,例:

Xml代碼

jdbc:mysql://localhost:3306/data115?useUnicode=true&amp;characterEncoding=utf-8

這樣,經由程式插入的資料應該也能行了。

最後,有時候需要用GET方式在url的參數裡傳中文,url裡的中文是需要被編碼之後才能傳的,像tomcat預設的uriEncoding是iso-8859-1,這會導致經由url傳過來的中文值變亂碼;這就需要在server.xml的connector節點裡配置“URIEncoding='UTF-8'”,例如:

Xml代碼

<Connector port="8080" address="${jboss.bind.address}" 
 maxThreads="250" maxHttpHeaderSize="8192" 
 emptySessionPath="true" protocol="HTTP/1.1" 
 enableLookups="false" redirectPort="8443" acceptCount="100" 
 connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='UTF-8'/>

我這個是jboss的,server.xml位置在deploy/jboss-web.deployer下,tomcat的話很好找了,配置起來都一樣。

最最後,你是不是認為還有一招“filter”的方式?以前用過一段時間struts的時候filter很管用,但現在我在seam下實驗過後發覺有沒有這個filter都沒關係,只要確認上述4步驟那麼亂碼應該就能解決了;我估計如果架構程式裡沒有寫入程式碼使用非UTF-8的字元集來encode的話都用不著filter.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.