今天碰到一個問題,在我作的ssh項目中,程序在一個action中將一串中文提示語句 —— 一個字符串存在session中(且不討論用session存這個合不合理),在另一個action渲染的jsp頁面中用el表達式取出來呈現,形如:${requestScope.noright}。html
在個人開發環境中(Tomcat6 + MyEclipse8.5),這一個提示語句顯示正常,並無出現亂碼的情況。可是當我將其部署到was的測試環境時,這一句提示信息顯示成了「????????」,一串問號,而頁面其餘地方都沒有這個問題。java
首先想是什麼致使tomcat和was存在差別,後來回想起來,以前在tomcat conf文件夾下的server.xml中加過這麼一段配置tomcat
<Connector port="9080" protocol="HTTP/1.1" connectionTimeout = "20000" redirectPort ="8443" URIEncoding ="UTF-8" />
,將這段配置註釋後,本地也出現一樣狀況。服務器
was上是不能如上配置的,因而在繼續找問題,百度知道上找到這個回答:session
http://zhidao.baidu.com/link?url=5c5enTpHLCsPvcGhG0McFVLUBJN4ar_rbwF95ISzHyGA0GP4N9JjeOpYmvmTBebZrhKV0mTN26l86pIsSmTRFq pageEncoding是jsp文件自己的編碼 contentType的charset是指服務器發送給客戶端時的內容編碼 JSP要通過兩次的「編碼」,第一階段會用pageEncoding,第二階段會用utf-8至utf-8,第三階段就是由Tomcat出來的網頁, 用的是contentType。 第一階段是jsp編譯成.java,它會根據pageEncoding的設定讀取jsp,結果是由指定的編碼方案翻譯成統一的UTF-8 JAVA源碼(即.java),若是pageEncoding設定錯了,或沒有設定,出來的就是中文亂碼。 第二階段是由JAVAC的JAVA源碼至java byteCode的編譯,不論JSP編寫時候用的是什麼編碼方案,通過這個階段的結果所有是UTF-8的encoding的java源碼。
因而在jsp頁面上加入ssh
<%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8"%>
就顯示正常了。jsp