在tomcat5中發現了以前處理tomcat4的方法不能適用于處理直接通過url提交的請求,上網找資料終于發現了最完美的解決辦法,不用每個地方都轉換了,而且無論get,和post都正常。????
??
? ------------------- ?
? ?
? 問題描述: ?
? ?
? 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> ?
? ?
? 測試結果如果你輸入文本框或者點超鏈都會顯示:你提交了”中國”,說明成功!!!!!??