java servlet 参数乱码_JSPServlet处理参数中的中文乱码总结
從form表單提交信息到一個JSP頁面或者一個Servlet進行處理的時候,提交的中文信息若不加處理的話就會顯示亂碼,如一串???。現在通過一個例子來進行總結如下:
寫一個用戶信息提交頁面,通過這個頁面向一個JSP頁面或者一個servlet提交用戶信息,代碼如下:
1
23
4表單提交5678????????用戶名:9????????密??碼:
10????????愛??好:運動?11音樂
12??131415
現在寫deal處理頁面,代碼如下:
1
23
4顯示用戶信息567//request.setCharacterEncoding("gb2312");9String?username=request.getParameter("username");10//String?username?=?new?String(request.getParameter("username").getBytes("iso-8859-1"),"gbk");11String?password=request.getParameter("password");12//String?love?=?new?String(request.getParameter("love").getBytes("iso-8859-1"),"gbk");13String?love=request.getParameter("love");14%>15您好,你的密碼是:,您的愛好是:!1617從前面的信息提交頁面提交來的信息包含中文,這時就會出現亂碼。如:
??????您好,你的密碼是:1234569,您的愛好是:????!
現在,把第8行的注釋符號去掉,重新執行頁面(請確保web服務器會自動加載更改后的頁面,否則請重新啟動web服務器),這時可以看到正確的中文信息了,如:
王冰您好,你的密碼是:9856322,您的愛好是:音樂!
也可以使用另外一種方法進行處理,把deal.jsp的第8行注釋掉,然后把第9行、第13行也注釋掉,去掉第10行和第12行的注釋符號,保存好重新執行頁面(方法同上),同樣會顯示正常的信息。
下面通過前面的信息提交頁面向一個servlet提交信息,然后對其中的中文亂碼進行處理。寫一個servlet程序(formdeal.java),如下:
1
packageorg.wzhongyu;23importjava.io.IOException;4importjava.io.PrintWriter;5importjavax.servlet.ServletException;6importjavax.servlet.http.HttpServlet;7importjavax.servlet.http.HttpServletRequest;8importjavax.servlet.http.HttpServletResponse;910
publicclassformdealextendsHttpServlet{11
publicvoiddestroy(){12super.destroy();//Just?puts?"destroy"?string?in?log13//Put?your?code?here14}1516publicvoiddoGet(HttpServletRequest?request,?HttpServletResponse?response)17
throwsServletException,?IOException{18this.doPost(request,?response);19????}2021publicvoiddoPost(HttpServletRequest?request,?HttpServletResponse?response)22
throwsServletException,?IOException{23//response.setContentType("text/html;?charset=gbk");24PrintWriter?out=response.getWriter();25//request.setCharacterEncoding("gbk");26String?username=request.getParameter("username");27????????String?password=request.getParameter("password");28????????String?love=request.getParameter("love");29????????out.print("您的用戶名:"+username+"
");//30out.print("您的密碼:"+password+"
");//31out.print("您的愛好:"+love);//32}33
publicvoidinit()throwsServletException{34//Put?your?code?here35}36}37
該servlet的部署描述文件(web.xml)如下:
1
<?xml ?version="1.0"?encoding="UTF-8"?>2????xmlns="http://java.sun.com/xml/ns/javaee"4????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee6????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">78This?is?the?description?of?my?J2EE?component9This?is?the?display?name?of?my?J2EE?component10formdeal11org.wzhongyu.formdeal12131415formdeal16/servlet/formdeal1718把信息提交頁面的第7行改為:
重新部署并執行頁面,同樣看到顯示的中文信息是亂碼。現在把第23行的注釋符去掉,重新執行會看到下面的信息,提交過來的中文信息是亂碼:
您的用戶名:??????您的密碼:123465您的愛好:????把第25行的注釋符也去掉,重新執行,可以看到可以顯示正常的信息了,如下:
您的用戶名:王冰
您的密碼:5632215您的愛好:音樂如果只去掉第25行的注釋,執行程序則會顯示下面的信息:
??????????????123456???????由此可見,這個兩個都不可以忽略掉,也可以從下面的方式驗證必須寫上兩個,把formdeal.java里的第29,30,31行的中文換成英文,同樣注釋掉第23行,而不要注釋掉第25行,執行后顯示的信息如下:
username???password65462458
love??
這是由于沒有設置servlet響應的頁面的字符編碼造成的。
在servlet里也可以這樣進行處理,把第25行注釋掉,而不要注釋第23行,把第26行和第28行分別改為如下代碼:
String?username=newString(request.getParameter("username").getBytes("iso-8859-1"),"gbk");?
????????String?love=newString(request.getParameter("love").getBytes("iso-8859-1"),"gbk");這樣也可以正常顯示中文信息。
1
2011年2月27日補充23源于最近項目在不同的Linux系統中部署導致部分程序字符為亂碼的問題,進行處理時需要注意以下問題:4getBytes()方法在將字符串進行轉碼時,是根據操作系統平臺的默認字符編碼進行轉碼的。5getBytes(Charset?charset)方法是使用指定的字符編碼進行轉碼。67對于亂碼問題,最好是項目的所有出入口都統一編碼,文件的編碼也要統一,請求部分使用過濾器進行處理。
posted on 2007-11-11 17:41 wzhongyu 閱讀(3190) 評論(2) ?編輯 ?收藏 所屬分類: Java學習
總結
以上是生活随笔為你收集整理的java servlet 参数乱码_JSPServlet处理参数中的中文乱码总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 习惯性流产是什么状况
- 下一篇: 求顾开头的成语接龙!