教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓(xùn)之處理請求參數(shù)亂碼

更新時間:2016年06月29日18時05分 來源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):


1. 處理POST請求亂碼

通過對請求參數(shù)亂碼問題的分析,我們已經(jīng)了解了請求參數(shù)亂碼的原因。下面通過一個案例的練習(xí),切身體會一下如何解決該問題;具體步驟如下:
(1)創(chuàng)建一個web應(yīng)用,Example12,在該應(yīng)用下新建一個Servlet類,ParamServlet,主要代碼如例1-1所示:
例1-1 ParamServlet.java
public class ParamServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
          request.setCharacterEncoding("utf-8");
         String name= request.getParameter("username");
         System.out.println(name);
}
}
例1-1中,先設(shè)置請求參數(shù)的編碼,然后再獲取參數(shù)值。
(2)ParamServlet在web.xml中配置的訪問路徑是:“/ParamServlet”。
(3)在Example12應(yīng)用下新建一個html文件,form.html,主要代碼如例1-2所示:
例1-2 form.html
<body>
This is my HTML page. <br>
    <form action="/Example12/ParamServlet" method="post">
    用戶名:<input type="text" name="username" value="李四"/><br/>
    <input type="submit" value="提交"/>
    </form>
    <hr/>
    <a href="/Example12/ParamServlet?username=張三">GET</a>
</body>
例1-2中,form.html文件的頁面編碼是“utf-8”,表單的提交方式是post,提交的路徑是“/Example12/ParamServlet”(只要是瀏覽器端路徑都需要加上項目名稱)。
(4)將Example12發(fā)布到Tomcat服務(wù)器中,然后啟動服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example12/form.html;瀏覽器顯示結(jié)果如圖1-1所示:

圖1-1 瀏覽器顯示結(jié)果
(5)點擊圖1-1中的【提交】按鈕去訪問ParamServlet,并使用HttpWatch抓包工具,抓取內(nèi)容如圖1-2所示:

圖1-2 請求信息
(6)控制臺打印結(jié)果如圖1-3所示:

圖1-3 控制臺打印結(jié)果
由打印結(jié)果可知通過request.setCharacterEncoding(“utf-8”)方法的設(shè)置,請求參數(shù)已正常顯示。

2. 處理GET請求亂碼

以上是處理POST請求亂碼的步驟,現(xiàn)在通過一個案例來體會如何解決GET請求的亂碼問題。具體如下:
(1)在Example12應(yīng)用下的ParamServlet重寫doGet()方法,如例1-3所示:
例1-3 ParamServlet/doGet()
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
//首先獲得請求參數(shù)的值
String username =request.getParameter("username");
//進(jìn)行iso-8859-1編碼
byte b[]=username.getBytes("iso-8859-1");
//在進(jìn)行utf-8編碼
String value=new String(b,"utf-8");
System.out.println(value);
}
(2)在form.html中已經(jīng)存在一個超鏈接,該超鏈接訪問的是ParamServlet,并帶有參數(shù)“username=張三“。
(3)重新啟動Tomcat服務(wù)器,在瀏覽器端再次訪問form.html,然后點擊頁面中的“GET“超鏈接,控制臺打印結(jié)果如圖1-4所示:

圖1-4 控制臺打印結(jié)果
GET請求亂碼的處理步驟相對POST請求來說有些復(fù)雜,但是大家理解了這個原理后就不會覺得困難了。

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://metathetuscanyresort.com/javaee
 
0 分享到:
和我們在線交談!