1. 程式人生 > >Servlet中請求中文亂碼問題解決

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的使用流程:

     設定請求編碼格式

     設定響應編碼格式

     獲取請求資訊

     處理請求資訊

      響應處理結果

資料流轉流程:

      瀏覽器------>伺服器------->資料庫

      瀏覽器<------伺服器<-------資料庫