Servlet中請求中文亂碼問題解決
造成亂碼問題的原因只有一個:即客戶端與服務端的字元編碼不一致所導致。
tomcat預設的編碼處理時ISO-8859-1的編碼解析器,所以我i們需要對tomcat對獲取到的資料進行處理:
get與post的亂碼處理是不一致的,當get請求時,其傳遞給伺服器的資料是附加在URL地址之後的;而post的請求時,其傳遞給伺服器的資料是作為請求體的一部分傳遞給伺服器
1、使用String進行重新編碼:
uname=new String(uname.getBytes("iso8859-1"),"utf-8"); 把iso8859-1編碼的字串解碼成位元組陣列,然後重新編碼成ut。
缺點:麻煩
2、使用公共配置
Post方式請求:
在service方法中使用: req.setCharacterEncoding(“utf-8”); (獲取資料之前)
Get方式請求:
URL的引數沒有使用編碼(即使用了ISO-8859-1等)
上面Post方式對Get來說不好使了,應為Get的請求資料在url裡面。
在tomcat伺服器目錄下的conf檔案下找到server.xml檔案,開啟進 行如下配置:
找到Connector標籤
加上一個屬性 useBodyEncodingForURI="true"
配置好上面了
在獲取資料之前加上 req.setCharacterEncoding(“utf-8”);就可以正常獲取資料了。
我做的是公共配置,可能會造成其他的問題。
tomcat 9.0.5新特性:get方法瀏覽器傳過來的資料在tomcate getParamete()中的編碼是utf-8,所以當用get方法請求在控制檯顯示時,Servlet中不需要再改變中文字元的編碼方式。
3、流程總結:
Servlet的使用流程:
設定請求編碼格式
設定響應編碼格式
獲取請求資訊
處理請求資訊
響應處理結果
資料流轉流程:
瀏覽器------>伺服器------->資料庫
瀏覽器<------伺服器<-------資料庫