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

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

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

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


1. 處理POST請(qǐng)求亂碼

通過對(duì)請(qǐng)求參數(shù)亂碼問題的分析,我們已經(jīng)了解了請(qǐng)求參數(shù)亂碼的原因。下面通過一個(gè)案例的練習(xí),切身體會(huì)一下如何解決該問題;具體步驟如下:
(1)創(chuàng)建一個(gè)web應(yīng)用,Example12,在該應(yīng)用下新建一個(gè)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è)置請(qǐng)求參數(shù)的編碼,然后再獲取參數(shù)值。
(2)ParamServlet在web.xml中配置的訪問路徑是:“/ParamServlet”。
(3)在Example12應(yīng)用下新建一個(gè)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”(只要是瀏覽器端路徑都需要加上項(xiàng)目名稱)。
(4)將Example12發(fā)布到Tomcat服務(wù)器中,然后啟動(dòng)服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example12/form.html;瀏覽器顯示結(jié)果如圖1-1所示:

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

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

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

2. 處理GET請(qǐng)求亂碼

以上是處理POST請(qǐng)求亂碼的步驟,現(xiàn)在通過一個(gè)案例來體會(huì)如何解決GET請(qǐng)求的亂碼問題。具體如下:
(1)在Example12應(yīng)用下的ParamServlet重寫doGet()方法,如例1-3所示:
例1-3 ParamServlet/doGet()
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
//首先獲得請(qǐng)求參數(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)存在一個(gè)超鏈接,該超鏈接訪問的是ParamServlet,并帶有參數(shù)“username=張三“。
(3)重新啟動(dòng)Tomcat服務(wù)器,在瀏覽器端再次訪問form.html,然后點(diǎn)擊頁面中的“GET“超鏈接,控制臺(tái)打印結(jié)果如圖1-4所示:

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

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