Welcome to Yumao′s Blog.
Servlet 中文乱码解决方法
, 2012年04月19日 , Java Language , 评论 在〈Servlet 中文乱码解决方法〉中留言功能已關閉 ,

一j2ee學習中亂碼無處不在 為了避免亂碼問題 需要注意
1 url傳輸的編碼問題
java.net.URLEncoder java.net.URLDecoder 對應的encode 與decode進行編碼解碼
在傳輸數據時候瀏覽器會自動對要表單傳輸的數據進行url編碼 所使用的編碼方式取決於當前網頁顯示
時候使用的編碼方式。
2 對於http請求消息的url地址後的參數,getparameter等方法進行自動url解碼使採用的編碼方式
取決servlet引擎 tomcat默認用iso8859-1進行解碼。
因此無法返回中文
3 對於post方式getparameter採用servletrequest.getcharacterencoding()方法返回的編碼方式進行url解碼

如果getcharacterencoding返回null則用iso8859-1進行解碼 因此無法顯示中文
4 servletrequest.setcharacterencoding方法設置字符編碼隻影響post請求的解碼不影響get請求的url解碼
亂碼的解決方法:
二具體解決途徑
1.解決輸出亂碼
在servlet類中的doGet()方法中的request.setContentType("text/html;charset=gb2312");

2.解決數據庫的亂碼
1>.字符串的重新格式化 (同上面的 1.解決輸出亂碼)

2>.在jdbc.url中明確字符集 (不適用於sqlserver)
在連接數據庫時:con=DriverManager.getConnection(url,"sa","");
url="jdbc:協議:子協議://IP:端口; 庫 ? useUnicode=true & characterEncoding=gb2312";

3.解決輸入亂碼
1>.設置請求字符集
在servlet類中的doGet()方法中,在request.getParameter()之前加上requset.setCharacterEncoding("gb2312");

2>.字符集的重新格式化
通過String的構造方法: String (byte[] bytes, String charsetName) ----構造一個新的 String,方法是使用指定的字符集解碼指定的字節數組。
如:
在.jsp中:username:

在servlet類中:
String user=request.getParamter("user");
user=new String(user.getBytes("ISO-8859-1"),"UTF-8");

3>.過濾器 Servlet (對所有的文件都有效)————————《可以解決輸入、輸出亂碼》

<1>.新創建一個servlet時,Interfaces接口:繼承javax.servlet.Filter
      options中只需選中:create Inherited Methods; create Constructors;
      建好後在其doFilter()方法中:
arg0.setCharacterEncoding("gb2312"); //實現請求亂碼的處理
arg1.setCharacterEncoding("gb2312"); //實現響應亂碼的處理
arg2.doFilter(arg0,arg1); //繼續執行其他過濾器 或 jsp、servlet
<2>.再在web.xml中把過濾器servlet中的相關內容的改為
      並修改中的/* ; “/*”表示執行任何文件

////////////////////////////////////////////////////////////////////////////////////

簡介過濾器:

1.
每個過濾器都會在 web.xml中有單獨的配置:

過濾器的別名
過濾器的物理地址,帶有完整的包路徑的


過濾器的別名
過濾器訪問的路徑


2.
當由於某種原因想要刪除servlet類時,刪除後在web.xml中還會保留刪除的servlet類的記錄,
所以必須手動在web.xml中刪除一下已刪除的servlet類的信息

关键字:, , ,

评论已关闭