Tomcat 5環境下的jsp中文亂碼問題(分別針對POST、GET方法)

noter發表於2007-05-31

請教:Tomcat 5環境下的jsp中文亂碼問題(分別針對POST、GET方法)

樓主ETCN(天外來客)2005-01-13 15:57:36 在 Java / 應用伺服器 提問

我知道這個問題肯定已經問過很多次了,不過我搜尋了一下,雖然帖子不少,看完以後還有些疑問想請教一下。  
   
  1、從我看過的一些相關文章來看,對於不同的jsp平臺,亂碼的解決方法並不相同,往往在Tomcat上挺好的辦法,拿到其他平臺反而更亂了。似乎確實沒有一種一勞永逸的辦法解決所有平臺上的中文亂碼問題是嗎?如果有,應該怎麼做呢?  
   
  2、如果僅針對Tomcat   5平臺,我看到過有文章介紹的方法是通過設定一個   filter   來解決POST方法的編碼問題,而通過在   server.xml   裡的   Connector   里加入   URIEncoding="GBK"   來解決GET方法的編碼問題。  
   
  設定   filter   比較簡單,不過在修改   server.xml   檔案的時候遇到了一些問題:  
  我的機器是將Tomcat與IIS整合到了一起,也就是可以通過   localhost/jsp/   來訪問   tomcat目錄/webapps/jsp目錄下的內容。在   Connector   里加入   URIEncoding="GBK"   的結果是隻針對通過     http://localhost:8080/   方法訪問的內容有效,畢竟   Connector   裡指定的port是   8080   。如果我將port改成80,那麼整個tomcat都不能啟動了。  
   
  所以上述方法來解決GET亂碼似乎不成功,不知道我應該怎麼做?  
   
  3、因為我修改   Connector   不能成功,所以想通過修改   filter   來解決問題,我想在其中加一個判斷,如果是POST方法,就呼叫   setCharacterEncoding(encoding)   來處理,如果是GET方法,則通過類似   String   name   =   new   String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK")   的方法來處理。可是我該如何將整個   QueryString   處理完的結果存回到   request   中以便繼續傳遞呢?能否請各位高手給提供一個大概思路?  
   
  4、如果上面方法再不成功,那麼似乎只能將處理編碼的過程作成一個bean,然後每個jsp檔案通過呼叫該bean來處理亂碼,是這樣嗎?  
   
   
  以上是小弟的一個在Tomcat環境下處理中文亂碼的思路,不知道各位都是用什麼方法解決這類問題的呢?請幫忙提示一下。謝謝!  
  問題點數:20、回覆次數:4Top

1 樓ETCN(天外來客)回覆於 2005-01-13 16:02:29 得分 0

下面轉一下我在第2個問題裡提到的文章:  
   
  tomcat5中文問題解決之道(原創)  
  mineral  
  http://www.jdon.com  
  May   9,   2004   9:20   PM  
   
   
  在tomcat5中發現了以前處理tomcat4的方法不能適用於處理直接通過url提交的請求,上網找資料終於發現了最完美的解決辦法,不用每個地方都 轉換了,而且無論get,和post都正常。寫了個文件,貼出來希望跟我有同樣問題的人不再像我一樣痛苦一次:-)  
   
  上傳檔案有問題,只好直接貼了,難看點:-)  
   
  -------------------  
  Tomcat   5中文問題  
  author:kiss__sky@163.com  
  -------------------  
   
  問題描述:  
   
  1   表單提交的資料,用request.getParameter("xxx")返回的字串為亂碼或者??  
  2   直接通過url如http://localhost/a.jsp?name=中國,這樣的get請求在服務端用request.getParameter ("name")時返回的是亂碼;按tomcat4的做法設定Filter也沒有用或者用request.setCharacterEncoding ("GBK");也不管用  
   
  原因:  
  1   tomcat的j2ee實現對錶單提交即post方式提示時處理引數採用預設的iso-8859-1來處理  
  2   tomcat對get方式提交的請求對query-string   處理時採用了和post方法不一樣的處理方式。(與tomcat4不一樣,所以設定setCharacterEncoding("GBK"))不起作用。  
   
   
  解決辦法:  
   
  首先所有的jsp檔案都加上:  
   
   
  1   實現一個Filter.設定處理字符集為GBK。(在tomcat的webapps/servlet-examples目錄有一個完整的例子。請參考web.xml和SetCharacterEncodingFilter的配置。)    
   
  1)只要把%TOMCAT安裝目錄%/   webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class 檔案拷到你的WEB-INF/classes目錄filters下,如果沒有filters目錄,就建立一個。  
  2)在你的web.xml里加入如下幾行:  
   
          <filter>  
                  <filter-name>Set   Character   Encoding</filter-name>  
                  <filter-class>filters.SetCharacterEncodingFilter</filter-class>  
                  <init-param>  
                          <param-name>encoding</param-name>  
                          <param-value>GBK</param-value>  
                  </init-param>  
          </filter>  
   
          <filter-mapping>  
                  <filter-name>Set   Character   Encoding</filter-name>  
                  <url-pattern>/*</url-pattern>  
          </filter-mapping>  
   
  3)完成.  
   
  2   get方式的解決辦法  
  1)   開啟tomcat的server.xml檔案,找到區塊,加入如下一行:  
  URIEncoding=”GBK”  
  完整的應如下:  
          <Connector    
  port="80"                               maxThreads="150"   minSpareThreads="25"   maxSpareThreads="75"  
                                enableLookups="false"   redirectPort="8443"   acceptCount="100"  
                                debug="0"   connectionTimeout="20000"    
                                disableUploadTimeout="true"   URIEncoding="GBK"   />  
   
  2)重啟tomcat,一切OK。  
   
  執行如下jsp頁頁測試是否成功  
   
   
  <%@   page   contentType="text/html;charset=gb2312"%>  
  <%@   page   import="java.util.*"%>  
  <%  
          String   q=request.getParameter("q");  
          q   =   q   ==   null?   "沒有值"   :   q;  
  %>  
  <HTML>  
  <HEAD><TITLE>新聞列表顯示</TITLE>  
  <META   http-equiv=Content-Type   content="text/html;   charset=gb2312">  
  <META   http-equiv=pragma   content=no-cache>  
  </HEAD>  
   
  <body>  
  你提交了:  
  <%=q%>  
  <br>  
  <form   action="tcnchar.jsp"   method="post">  
  輸入中文:<input   type="text"   name="q"><input   type="submit"   value="確定">  
  <br> <a   href="tcnchar.jsp?q=中國">通過get方式提交</a>  
  </form>  
  </BODY>  
  </HTML>  
   
  測試結果如果你輸入文字框或者點超鏈都會顯示:你提交了”中國”,說明成功!!!!!  
   
  特別感謝下面這篇帖子,幫我解決了中文問題.最後祝大家好運!!!  
  參考網址:  
   
  http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&sty=1&tpg=1&age=0

【來源】

相關文章