一、對tomcat_home/conf/server.xml檔案進行配置(本機的完整目錄為d:/users/administrator/tomcat/apache-tomcat-7.0.54/conf/server.xml)
核心**如下(其中最後一句是自己加的):
-->這種方式一般不建議使用,因為它修改的是tomcat平台的編碼,而業內沒人對其不修改,如果人為修改會影響其他專案的執行。
二、逆向編碼解碼還原法
之所以會出現亂碼,是因為瀏覽器將中文傳給tomcat時,tomcat以預設的iso8859-1方式對其解碼,而iso8859-1不屬於中文碼表,故而出現亂碼。根據這個原理可逆向還原。
如:
byte buf = request.getparameter("name").getbytes("iso8859-1");
string name = new
string(buf,"gbk");
這樣得到的name便是前台傳來的正確的中文引數了
這種方式比較偏向底層,而且有乙個弊端,就是當瀏覽器傳送的中文引數很多時,需要乙個個設定,比較羅嗦,不利於節省時間。
三、將瀏覽器的表單的提交方式設為post方式,同時在servlet裡在接受引數前將request的編碼設定為gbk或者utf-8。
前台形如:
action="login.jsp"
method="post">
使用者名稱:type="text"
name="name">
密 碼:type="text"
name="pwd">
type="submit"
value="登入">
form>
後台形如:
request.setcharacterencoding("utf-8");
string name = request.getparameter("name");
這樣也能正確地接受中文引數了。當然,這種方式也存在弊端,試想下當專案發布後,如果需要修改編碼為gbk,則要修改源**,而對客戶而言,這需要反編譯等步驟直接修改**,有點困難。
四、通過web專案的webroot/web-inf/web.xml檔案進行配置引數,同時可在servlet中進行讀取。
web.xml的示例核心**如下:
loginservlet-name>
cn.hncu.servlets.loginservletservlet-class>
characterparam-name>
gbkparam-value>
init-param>
servlet>
servlet示例核心**如下:
public
void
init(servletconfig config) throws servletexception
這種方法彌補了方法3的缺陷,方便後期維護和修改,使用者修改時不需要改源**,只需修改web.xml即可。 解決Tomcat下中文亂碼問題
位址列中引數包含中文並提交 瀏覽器不會採用頁面的charset方式對url中的中文進行編碼後提交至伺服器 ie,firefox都一樣 而是採用系統的gbk轉碼為iso 8859 1之後提交至servlet容器,因為進入容器時中文進行了gbk至iso 8859 1的轉碼,所以頁面上會顯示為亂碼。ser...
Tomcat解決中文亂碼之道 GET POST
1 get方法 問題 後台接收name值的時候是亂碼。原因 tomcat對get方式提交的請求對query string 處理時採用了和post方法不一樣的處理方式。與tomcat4不一樣,所以設定setcharacterencoding gbk 不起作用的 解決方案 uriencoding gbk...
tomcat中文亂碼
問題的現象 我在本地的tomcat的server.xml中設定如下 頁面中沒亂碼,url傳參也沒有問題,但是在192.168.2.40的linux伺服器上做這樣的設定就不行了,雖然頁面沒有亂碼,但是傳參的時候就出現中文亂碼了!原因分析 因為我們伺服器中的tomcat是通過apache 系統請求的,而...