1. 程式人生 > >表單提交欄位到servlet亂碼問題

表單提交欄位到servlet亂碼問題

TestServlet.java如下 
  // 在servlet層出現了亂碼問題 
  1. package com.test;  
  2. import java.io.IOException;  
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7. public class TestServlet extends
     HttpServlet {  
  8.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  9.             throws IOException, ServletException {  
  10.         // 處理get提交方式  
  11.         this.doPost(request, response);  
  12.     }  
  13.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  14.             throws IOException, ServletException {  
  15.         // 處理post提交方式  
  16.         String username = request.getParameter("username");  
  17.         // servlet層測試亂碼  
  18.         System.out.println("servlet = "+username); // 顯示成了亂碼  
  19.     }  
  20. }  

4、初步判定 
通過的servlet-web層打印出字串就顯示成了亂碼格式、那麼再通過dao層插入到資料庫後肯定是亂碼的,問題定位在jsp頁面到servlet程式碼之間,就要考慮jsp、IE、tomcat容器的編碼方式了。前面已經說明了,全部設定成了utf-8格式了,所以進一步查看了網上許多解決方案,解決方案比較多比較亂,針對我遇到的問題,我從中提取和學習了下面的一些知識內容。


5、提取內容 
  一、表單post方式提交——中文欄位出現亂碼,也就是上面例子描述的問題了。 
       1、原因為tomcat的內部編碼格式為ISO-8859-1,在沒有設定提交的編碼格式時會以ISO-8859-1的方式提交,而此時jsp編碼格式為utf-8 
          所以導致了亂碼產生。解決辦法如下三種,懷著好奇心都嘗試了一把。 
       2、方法:接收引數時進行轉碼、在請求頁面開始處設定編碼格式、過濾器處理。 
       3、具體實現程式碼如下所示:
Java程式碼  收藏程式碼
  1. 1)轉碼方式  
  2.         String username = request.getParameter("username");  
  3.     // 進行轉碼操作處理  
  4.     username = new String(username.getBytes("iso-8859-1"),"utf-8");  
  5.     // servlet層測試亂碼  
  6.     System.out.println("servlet = "+username);