萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> jsp編程 >> 如何解決JSP參數傳遞亂碼

如何解決JSP參數傳遞亂碼

  計算機生於美國,英語是他的母語,而英語以外的其它語言對他來說都是外語。他跟我們一樣,不管外語掌握到什麼程度,也不會像母語那樣使用得那麼好,時常也會出一些“拼寫錯誤”問題。

       亂碼的出現根本原因在於編碼和解碼使用了不同的編碼方案。比如用GBK編碼的文件,用UTF-8去解碼結果肯定都是火星文。所以要解決這個問題,中心思想就在於使用統一的編碼方案。

 

jsp頁面間的參數傳遞有以下幾種方式:1、表單(form)的提交。2、直接使用URL後接參數的形式(超級鏈接)。3、如果兩個jsp頁面在兩個不同的窗口中,並且這兩個窗口是父子的關系,子窗口中的jsp也可以使用javascript和DOM(window.opener.XXX.value)來取得父窗口中的jsp的輸入元素的值。下面就前兩種方式中出現的亂碼問題做一下剖析。

 

1、表單(form)的提交實現參數頁面間的傳遞

在介紹表單傳遞參數的內容之前,先來了解一些預備知識。表單的提交方式和請求報文中對漢字的處理。

 

表單的提交方式:

通常使用的表單的提交方式主要是:post和get兩種。兩者的區別在於:post方式是把數據內容放在請求的數據正文部分,沒有長度的限制;get方式則是把數據內容直接跟在請求的頭部的URL後面,有長度的限制。下面是同一個頁面兩種方式的請求報許文。

Requesttest.jsp代碼

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"   
  2.     pageEncoding="UTF-8"%>    
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/lo
  4. ose.dtd">    
  5. <html>    
  6. <head>    
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    
  8. <title>Insert title here</title>    
  9. </head>    
  10. <body>    
  11. <%-- post方式提交表單 --%>    
  12. <form action="http://localhost:8888/EncodingTest/requestresult.jsp" method="post">    
  13.     UserName:<input type="text" name="username"/>    
  14.     Password:<input type="password" name="password"/>    
  15.     <input type="submit" value="Submit">    
  16. </form>    
  17. </body>    
  18. </html>   
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!D
  2. OCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loos
  3. e.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <t
  4. itle>Insert title here</title> </head> <body> <%-- post方式提交表單 --%> <form action="http://loc
  5. alhost:8888/EncodingTestb/requestresult.jsp" method="post"> UserName:<input type="text" nam
  6. e="username"/> Password:<input type="password" name="password"/> <input type="submit" va
  7. lue="Submit"> </form> </body> </html>  

在上面的請求頁面的username輸入框裡輸入的是“世界杯”三個漢字,password輸入框中輸入"123"後按下Submit按鈕提交請求。截獲到的請求報文如下:

Post方式的請求報文代碼

  1. POST /EncodingTest/requestresult.jsp HTTP/1.1   
  2. Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, applicati
  3. on/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*    
  4. Referer: http://localhost:8080/TomcatJndiTest/requesttest.jsp    
  5. Accept-Language: zh-cn    
  6. User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; aff-kingsoft-ci
  7. ba; .NET CLR 2.0.50727)    
  8. Content-Type: application/x-www-form-urlencoded    
  9. Accept-Encoding: gzip, deflate    
  10. Host: localhost:8888   
  11. Content-Length: 49   
  12. Connection: Keep-Alive    
  13. Cache-Control: no-cache    
  14.    
  15. username=%E4%B8%96%E7%95%8C%E6%9D%AF&password=123   
  16. POST /EncodingTest/requestresult.jsp HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjp
  17. eg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, applicati
  18. on/msword, */* Referer: http://localhost:8080/TomcatJndiTest/requesttest.jsp Accept-Language: zh-cn Us
  19. er-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; aff-kingsoft-ciba; .N
  20. ET CLR 2.0.50727) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate H
  21. ost: localhost:8888 Content-Length: 49 Connection: Keep-Alive Cache-Control: no-cache username=%E
  22. 4%B8%96%E7%95%8C%E6%9D%AF&password=123  

以上報文內容,可以看出post方式的請求報文是有專門的數據部的。,

下面的同一請求頁面的get提交方式的請求報文:

Get方式的請求報文代碼

  1. GET /EncodingTest/requestresult.jsp?username=%E4%B8%96%E7%95%8C%E6%9D%AF&password=123 H
  2. TTP/1.1   
  3. Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, applica
  4. tion/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*    
  5. Referer: http://localhost:8080/TomcatJndiTest/requesttest.jsp    
  6. Accept-Language: zh-cn    
  7. User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; aff-kingsoft-cib
  8. a; .NET CLR 2.0.50727)    
  9. Accept-Encoding: gzip, deflate    
  10. Host: localhost:8888   
  11. Connection: Keep-Alive   
  12. GET /EncodingTest/requestresult.jsp?username=%E4%B8%96%E7%95%8C%E6%9D%AF&passwo
  13. rd=123 HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockw
  14. ave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Refer
  15. er: http://localhost:8080/TomcatJndiTest/requesttest.jsp Accept-Language: zh-cn User-Agent: Mozi
  16. lla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; aff-kingsoft-ciba; .NET CLR 2.0.50
  17. 727) Accept-Encoding: gzip, deflate&nb
copyright © 萬盛學電腦網 all rights reserved