狼愛上貍

          我胡漢三又回來了

          jsp中文問題最終解決方案

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

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

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

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

           

          2)數(shù)據(jù)庫

          在寫JSP時(shí),里面面有涉及到數(shù)據(jù)庫操作,當(dāng)保存時(shí)就會(huì)彈出

          save could not be completed

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

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

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

          3)eclipse設(shè)置

          用eclipse 編寫jsp頁面或

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

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

          接著看看別的地方有沒有設(shè)置編碼的地方,

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

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

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

          右邊有個(gè)樹形的text,

          展開找到"JSP",開始沒發(fā)現(xiàn),

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

          大家不要像我粗心,

          最低下有個(gè)"Default encoding",

          里面默認(rèn)的是"ISO-8859-1",

          終于找到了,

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

          在點(diǎn)一下"update",

          OK。再保存,

          就沒有錯(cuò)誤了..............

          4)tomcat中設(shè)置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設(shè)置數(shù)據(jù)庫數(shù)據(jù)源

          <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 表單提交的數(shù)據(jù),用request.getParameter(“xxx”)返回的字符串為亂碼或者??

          2 直接通過url如http://localhost/a.jsp?name=中國,這樣的get請(qǐng)求在服務(wù)端用request. getParameter(“name”)時(shí)返回的是亂碼;按tomcat4的做法設(shè)置Filter也沒有用或者用request.setCharacterEncoding("GBK");也不管用

          原因:

          1 tomcat的j2ee實(shí)現(xiàn)對(duì)表單提交即post方式提示時(shí)處理參數(shù)采用缺省的iso-8859-1來處理

          2 tomcat對(duì)get方式提交的請(qǐng)求對(duì)query-string 處理時(shí)采用了和post方法不一樣的處理方式。(與tomcat4不一樣,所以設(shè)置setCharacterEncoding(“gbk”))不起作用。

          解決辦法:

          首先所有的jsp文件都加上:

          1 實(shí)現(xiàn)一個(gè)Filter.設(shè)置處理字符集為GBK。(在tomcat的webapps/servlet-examples目錄有一個(gè)完整的例子。請(qǐng)參考web.xml和SetCharacterEncodingFilter的配置。)

          1)只要把%TOMCAT安裝目錄%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目錄/filters下,如果沒有filters目錄,就創(chuàng)建一個(gè)。

          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文件,找到區(qū)塊,加入如下一行:

          URIEncoding=”GBK”

          完整的應(yīng)如下:

          <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。

          執(zhí)行如下jsp頁頁測(cè)試是否成功

          <%@ 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>

          測(cè)試結(jié)果如果你輸入文本框或者點(diǎn)超鏈都會(huì)顯示:你提交了”中國”,說明成功!!!!!

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

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

          詳細(xì)如下

          只要修改一個(gè)地方就行了,文件為: 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生成兩個(gè)class文件.再然后用jar命令把它打包成原來的catalina.jar,覆蓋原來的,最后重新啟動(dòng)tomcat就可以。

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

          主站蜘蛛池模板: 宝清县| 永顺县| 丁青县| 改则县| 南部县| 怀远县| 赤水市| 偏关县| 建始县| 乐亭县| 保定市| 新宁县| 贡山| 颍上县| 沂源县| 惠来县| 美姑县| 兴仁县| 临高县| 白银市| 手游| 云林县| 五峰| 朔州市| 乳源| 遵义市| 阳谷县| 池州市| 五峰| 鹤山市| 阳城县| 南岸区| 新绛县| 万宁市| 铁岭市| 西宁市| 镇赉县| 沙坪坝区| 青龙| 明水县| 新密市|