MyEclipse 下利用Struts2進行Web開發的亂碼問題的綜合解決方案

          今天做實驗室的網站,整合kindeditor到struts2框架內,提交新聞標題和內容時,又遇到了常見的亂碼問題,去網上百度了很多相關的解決方案,基本上都無法給出綜合的答案,片面的居多,有可能不是自己想要的解決方案.因此,我結合搜索到的解決方案再加上早上調試的成果,整理了這篇文章,供後來遇到這個問題的同學分享下,下次遇到就不必向我這樣弄了一個早上,少走點彎路,.

         我遇到的問題是利用JSP往後臺的action傳遞表單數據時出現了亂碼的問題.我剛開始以爲是MyEclipse編輯器的問題,於是點擊MyEclipsede的Project->Properties->Resources,在彈出的對話框中統一了頁面的編輯格式爲UTF8.以支持UTF8編碼的呈現.再修改JSP頁面的編碼,並且修改了Struts默認的編碼格式;如下

1.在struts.xml中添加<constant name="struts.i18n.encoding" value="UTF-8"/>
2.在jsp頁面中添加<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

其中<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>是約束JSP頁面中嵌套的Java代碼的編碼的編碼方式

而 <meta http-equiv="content-type" content="text/html; charset=utf-8" />使約束JSP中的html靜態頁面的編碼方式的

修改表單提交的方法爲get方法.但是依舊出現亂碼問題,在後臺打印得到的字符串得到的是????????????這樣的亂碼.於是嘗試在Struts2中調用的set方法對獲取到的String變量(假設爲content)調用

new String(content.getBytes(),"utf8")打印出來的是另一種亂碼.

於是索性自己寫了個main方法,將瀏覽器裏uri裏帶的content內容給截取下來,如下所示:

public static void main(String args[])
{
try {

String str=java.net.URLDecoder.decode("%E4%BD%A0%E5%A5%BD%E5%95%8A","utf8");
System.out.println("str:"+str);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

%E4%BD%A0%E5%A5%BD%E5%95%8A實際是我提交的"你好啊"轉成utf8格式後的表示形式.因此可以斷定,JSP頁面提交給後臺的編碼格式是正確的,問題出在了Tomcat服務器這邊

我又調用了

String param = ServletActionContext.getRequest().getParameter("參數名");方法獲取下content的內容,依舊是?????????這樣的亂碼.因此可以斷定,Tomcat在幫助我解析URI參數時並沒有指定用UTF8格式的方式進行轉碼.因此百度了下.找到下面的解決方法:
在服務器apache-tomcat-5.5.23\conf\這個目錄下有個server.xml文件,打開它,大約在80行左右
<Connector/>中加URIEncoding="utf-8"  這麼一句話就OK啦! 如下: 
 <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"  URIEncoding="utf-8"/>
指定了Connector的URIEncoding爲UTF8.Connector是Tomcat服務器中非常重要的一個組件,它負責解析用戶發送過來的request對象並將解析好的結果交由後面的Container進行處理,在Connector中會對Uri中的附帶參數利用底層的String方法獲取下來,獲取的同時會指定編碼的格式.由於此處並沒有顯式指定編碼格式,往哪種編碼格式轉就不清楚了,因此會出現諸如????的亂碼問題,修改後Run一下,中文提交的亂碼終於被解決了.
發此篇文章並不是提供絕對準確地解決方案,而重在於問題的解決方法和思路,在這裏跟大家分享下.上百度找文章發現針對同一個問題出現了很多頁面,點進去結果都是轉載自同一篇文章的.希望大家多動點腦筋思考下,親身實踐下別人的方法行得通了再轉載.在google搜索的時候,發現針對同一個問題有很多種不同的解決方法.這就是不同的學習風氣啊,少年們,我們是祖國計算機界未來的接班人,要多動腦筋思考解決問題啊.寫得很拙見笑了.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章