← 回到文章列表

Servlet 中文乱码解决方法

一j2ee学习中乱码无处不在 为了避免乱码问题 需要注意 1 url传输的编码问题 java.net.URLEncoder java.net.URLDecoder 对应的encode 与decode进行编码解码 在传输数据时候浏览器会自动对要表单传输的数据进行url编码 所使用的…

一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:<input type="text" name="user">

在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中的相關內容的<servlet></servlet>改為<filter></filter>
      並修改<filter-mapping></filter-mapping>中的<url-patterm>/*</url-patterm> ; “/*”表示執行任何文件

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

簡介過濾器:

1.
每個過濾器都會在 web.xml中有單獨的配置:
<filter>
<filter-name>過濾器的別名</filtr-name>
<filter-class>過濾器的物理地址,帶有完整的包路徑的</filter-class>
</filter>
<filter-mapping>
<filter-name>過濾器的別名</filter-name>
<filter-patterm>過濾器訪問的路徑</filter-patterm>
</filter-mapping>

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

在这里找找

输入关键词,找一篇过去的记录。