狼愛上貍

          我胡漢三又回來了

          jsp中文問題最終解決方案

          綜合了網上眾多方案后,最終從工具選項設置到編碼解決全部解決.感謝網上眾多分享者的無私.

          1)保持這2句的字符編碼一致:

           <%@ page contentType="text/html;charset=UTF-8" language="java"%>

          <%@ page language="java" import="java.util.*,hy.*" pageEncoding="UTF-8"%>

           

          2)數據庫

          在寫JSP時,里面面有涉及到數據庫操作,當保存時就會彈出

          save could not be completed

          原因是some characters could not be mapped using iso8859-1

          <%@ page language="java" pageEncoding="GBK"%>

          設成GBK或UTF-8就可以了,只要他里面的支持中文就ok了

          3)eclipse設置

          用eclipse 編寫jsp頁面或

          window-->preferences-->general-->editor-->text file encoding,

          我打開perferences還是沒有找到,狂暈~~~~~~~~~,

          接著看看別的地方有沒有設置編碼的地方,

          還是沒有找到..........

           又回到perferences,覺得還是在這里可以解決,呵呵,問題還是出在這里,

          我找到"General"--"Content Types",

          右邊有個樹形的text,

          展開找到"JSP",開始沒發現,

          那家伙躲在最低下...........,

          大家不要像我粗心,

          最低下有個"Default encoding",

          里面默認的是"ISO-8859-1",

          終于找到了,

          刪掉"ISO-8859-1"填上"UTF-8",

          在點一下"update",

          OK。再保存,

          就沒有錯誤了..............

          4)tomcat中設置server.xml

          <Connector

                      port="8080" maxHttpHeaderSize="8192"

                      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                      enableLookups="false" redirectPort="8443" acceptCount="100"

                      connectionTimeout="20000" disableUploadTimeout="true" 

                      URIEncoding="GBK" useBodyEncodingForURI="true" />

          4)tomcat設置數據庫數據源

          <Context path="/roller" docBase="E:\MyWorks\Websites\4.5K\server\apache-tomcat\webapps\roller" debug="0">

            <Resource auth="Container"

                type="javax.sql.DataSource"

              driverClassName="com.mysql.jdbc.Driver"

              url="jdbc:mysql://localhost:3306/test?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;mysqlEncoding=utf8"

              username="root"

              password=""

              maxActive="20"

              maxIdle="3"

              removeAbandoned="true"

              maxWait="3000" />

            <!-- If you want e-mail features, un-comment the section below -->

            <!--

            <Resource auth="Container"

               type="javax.mail.Session"

               mail.smtp.host="mailhost.example.com" />

            -->

          </Context>

          5)提交表單

          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文件拷到你的webapp目錄/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>

          <body>

          你提交了:

          <%=q%>

          <br>

          <form action="tcnchar.jsp" method="post">

           輸入中文:<input type="text" ><input type="submit" value="確定">

           <br>

           <a href="tcnchar.jsp?q=中國">通過get方式提交</a>

           

          </form>

          </BODY></HTML>

          測試結果如果你輸入文本框或者點超鏈都會顯示:你提交了”中國”,說明成功!!!!!

          6) 一不小心看到一個非常好的辦法,可以讓我們不必寫

          new String(st.getBytes("ISO8859_1"),"GBK")

          詳細如下

          只要修改一個地方就行了,文件為: tomcat4/src/catalina/src/share/org/apache/catalina/connector/HttpReque stBase.java

           

           

          找到protected void parseParameters()方法,把

          if (encoding == null) encoding = "ISO-8859-1";

          改為

          if (encoding == null) encoding = "GBK";

          然后編譯

          javac HttpRequestBase.java生成兩個class文件.再然后用jar命令把它打包成原來的catalina.jar,覆蓋原來的,最后重新啟動tomcat就可以。

          posted on 2007-09-20 10:56 狼愛上貍 閱讀(503) 評論(0)  編輯  收藏 所屬分類: Tomcat

          主站蜘蛛池模板: 东港市| 苗栗县| 江陵县| 万山特区| 兴隆县| 油尖旺区| 商城县| 平罗县| 金溪县| 监利县| 攀枝花市| 左权县| 濉溪县| 新野县| 怀宁县| 民县| 宁化县| 潮安县| 济阳县| 光泽县| 高尔夫| 杂多县| 阳东县| 屯昌县| 海阳市| 介休市| 蒲江县| 连州市| SHOW| 江门市| 长葛市| 安平县| 云浮市| 咸阳市| 鄂伦春自治旗| 霍林郭勒市| 义乌市| 云安县| 岗巴县| 积石山| 喀喇沁旗|