天天看點

Request對象

1 通路Request對象

1.1 通路請求參數

(1)在index.jsp中添加一個連結到deal.jsp頁面的超連結

<code>&lt;a href=</code><code>"deal.jsp?id=1&amp;user="</code><code>&gt;處理頁&lt;/a&gt;</code>

(2)在deal.jsp頁面中擷取請求參數id、user和pwd的值并輸出

<code>&lt;%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=GB18030"</code> <code>pageEncoding=</code><code>"utf-8"</code><code>%&gt;</code>

<code>&lt;%</code>

<code>String</code> <code>id=request.getParameter(</code><code>"id"</code><code>);   </code><code>//擷取id參數的值</code>

<code>String</code> <code>user=request.getParameter(</code><code>"user"</code><code>);</code><code>//擷取user參數的值</code>

<code>String</code> <code>pwd=request.getParameter(</code><code>"pwd"</code><code>);</code><code>//擷取pwd參數值</code>

<code>%&gt;</code>

<code>&lt;html&gt;</code>

<code>&lt;head&gt;</code>

<code>&lt;meta http-equiv=</code><code>"Content-Type"</code> <code>content=</code><code>"text/html; charset=utf-8"</code><code>&gt;</code>

<code>&lt;title&gt;處理頁&lt;/title&gt;</code>

<code>&lt;/head&gt;</code>

<code>&lt;body&gt;</code>

<code>id參數的值為:&lt;%=id %&gt;&lt;br&gt;</code>

<code>user參數的值為:&lt;%=user %&gt;&lt;br&gt;</code>

<code>pwd參數的值為:&lt;%=pwd %&gt;</code>

<code>&lt;/body&gt;</code>

<code>&lt;/html&gt;</code>

輸出結果:

   id參數的值為:1

  user參數的值為:

  pwd參數的值為:null 

     結論:request的<code>getParameter</code>()方法傳遞參數時,若參數不存在,傳回null,若參數存在但未指派,傳回值為""。

典型應用:

<code>message=request.getParameter(</code><code>"id"</code><code>)!=</code><code>null</code><code>?request.getParameter(</code><code>"id"</code><code>):</code><code>""</code><code>;</code>

1.2 在作用域中管理屬性

      采用request對象的request.setAttribute(String name,Object object)方法和request.getAttribute(String name)方法來實作。

(1)index.jsp頁面:

<code>&lt;%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=utf-8"</code>    <code>pageEncoding=</code><code>"utf-8"</code><code>%&gt;</code>

<code>&lt;title&gt;Insert title here&lt;/title&gt;</code>

<code>try</code><code>{</code><code>//捕獲異常資訊</code>

<code>    </code><code>int</code> <code>money=</code><code>100</code><code>;</code>

<code>    </code><code>int</code> <code>number=</code><code>0</code><code>;</code>

<code>    </code><code>request.setAttribute(</code><code>"result"</code><code>,money/number);</code><code>//儲存執行結果</code>

<code>}</code><code>catch</code><code>(Exception e){</code>

<code>    </code><code>request.setAttribute(</code><code>"result"</code><code>,</code><code>"很抱歉,頁面産生錯誤!"</code><code>);</code><code>//儲存錯誤提示資訊</code>

<code>}</code>

<code>&lt;jsp:forward page=</code><code>"deal.jsp"</code><code>/&gt;</code>

(2)deal.jsp頁面

<code>&lt;title&gt;結果頁&lt;/title&gt;</code>

<code>&lt;%</code><code>String</code> <code>message=request.getAttribute(</code><code>"result"</code><code>).toString(); %&gt;</code>

<code>&lt;%=message %&gt;</code>

    輸出結果:

                   很抱歉,頁面産生錯誤! 

1.3 擷取cookie

      通過cookie的 GetCookies()方法即可擷取到所有的cookied對象的集合;通過cookie對象的getName()方法可以擷取到指定名稱的cookie;通過getValue()方法即可獲得cookie對象的值。将一個cookie對象發送到用戶端,使用request對象的addCookie()方法。

備注:若顯示“Cookie無法解析為類型”錯誤,隻需要在建構路徑”--“配置建構路徑”。點選“庫”頁籤,單擊右邊的添加外部jar,将%Tomcat_Home%/lib/servlet-aip.jar,要将其導入到項目的建構路徑中

(1)index.jsp頁面

<code>&lt;%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=utf-8"</code>  <code>pageEncoding=</code><code>"utf-8"</code><code>%&gt;</code>

<code>&lt;%@ page </code><code>import</code><code>=</code><code>"java.net.URLDecoder"</code> <code>%&gt;</code>

<code>&lt;title&gt;通過cookie儲存并讀取使用者登入資訊&lt;/title&gt;</code>

<code>    </code><code>Cookie[]   cookies = request.getCookies();</code><code>//從request中獲得Cookie對象的集合</code>

<code>    </code><code>String</code> <code>user = </code><code>""</code><code>;   </code><code>//登入使用者</code>

<code>    </code><code>String</code> <code>date = </code><code>""</code><code>;   </code><code>//注冊的時間</code>

<code>    </code><code>if</code> <code>(cookies != </code><code>null</code><code>) {</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; cookies.length; i++) {   </code><code>//周遊cookie對象的集合</code>

<code>            </code><code>if</code> <code>(cookies[i].getName().equals(</code><code>"mrCookie"</code><code>)) {</code><code>//如果cookie對象的名稱為mrCookie</code>

<code>                </code><code>user = URLDecoder.decode(cookies[i].getValue().split(</code><code>"#"</code><code>)[</code><code>0</code><code>],</code><code>"UTF-8"</code><code>);</code><code>//擷取使用者名</code>

<code>                </code><code>date = cookies[i].getValue().split(</code><code>"#"</code><code>)[</code><code>1</code><code>];</code><code>//擷取注冊時間</code>

<code>            </code><code>}</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>    </code><code>if</code> <code>(</code><code>""</code><code>.equals(user) &amp;&amp; </code><code>""</code><code>.equals(date)) {</code><code>//如果沒有注冊</code>

<code>        </code><code>遊客您好,歡迎您初次光臨!</code>

<code>        </code><code>&lt;form action=</code><code>"deal.jsp"</code> <code>method=</code><code>"post"</code><code>&gt;</code>

<code>            </code><code>請輸入姓名:&lt;input name=</code><code>"user"</code> <code>type=</code><code>"text"</code> <code>value=</code><code>""</code><code>&gt;</code>

<code>            </code><code>&lt;input type=</code><code>"submit"</code> <code>value=</code><code>"确定"</code><code>&gt;</code>

<code>        </code><code>&lt;/form&gt;</code>

<code>    </code><code>} </code><code>else</code> <code>{</code><code>//已經注冊</code>

<code>        </code><code>歡迎[&lt;b&gt;&lt;%=user %&gt;&lt;/b&gt;]再次光臨&lt;br&gt;</code>

<code>        </code><code>您注冊的時間是:&lt;%=date %&gt;</code>

<code>&lt;%@ page </code><code>import</code><code>=</code><code>"java.net.URLEncoder"</code> <code>%&gt;</code>

<code>&lt;title&gt;寫入cookie&lt;/title&gt;</code>

<code>&lt;script type=</code><code>"text/javascript"</code><code>&gt;window.location.href=</code><code>"index.jsp"</code><code>;&lt;/script&gt;</code>

<code>    </code><code>request.setCharacterEncoding(</code><code>"utf-8"</code><code>);       </code><code>//設定請求編碼</code>

<code>    </code><code>response.setCharacterEncoding(</code><code>"utf-8"</code><code>);     </code><code>//設定相應編碼</code>

<code>    </code><code>String</code> <code>user=URLEncoder.encode(request.getParameter(</code><code>"user"</code><code>),</code><code>"utf-8"</code><code>);    </code><code>//擷取使用者名</code>

<code>    </code><code>Cookie cookie = </code><code>new</code> <code>Cookie(</code><code>"mrCookie"</code><code>, user+</code><code>"#"</code><code>+</code><code>new</code> <code>java.util.</code><code>Date</code><code>().toLocaleString());</code>

<code>    </code><code>cookie.setMaxAge(</code><code>60</code><code>*</code><code>60</code><code>*</code><code>24</code><code>*</code><code>30</code><code>);      </code><code>//設定cookie有效期30天</code>

<code>    </code><code>response.addCookie(cookie); </code><code>//儲存cookie</code>

備注:

URLEncoder.encode(string)方法

已過時。結果字元串可能因平台預設編碼不同而不同。是以,改用 encode(String,String) 方法指定編碼。

          使用指定的編碼機制将字元串轉換為 <code>application/x-www-form-urlencoded</code> 格式。

1.4  擷取用戶端資訊

<code>&lt;%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=UTF-8"</code>    <code>pageEncoding=</code><code>"UTF-8"</code><code>%&gt;</code>

<code>&lt;meta http-equiv=</code><code>"Content-Type"</code> <code>content=</code><code>"text/html; charset=UTF-8"</code><code>&gt;</code>

<code>&lt;title&gt;使用request對象的相關方法擷取用戶端資訊&lt;/title&gt;</code>

<code>&lt;br&gt;客戶送出資訊的方式:&lt;%=request.getMethod()%&gt;</code>

<code>&lt;br&gt;使用的協定:&lt;%=request.getProtocol()%&gt;</code>

<code>&lt;br&gt;擷取送出請求字元串的用戶端位址:&lt;%=request.getRequestURI()%&gt;</code>

<code>&lt;br&gt;擷取送出請求字元串的用戶端位址:&lt;%=request.getRequestURL()%&gt;</code>

<code>&lt;br&gt;擷取送出資料的用戶端IP位址:&lt;%=request.getRemoteAddr()%&gt;</code>

<code>&lt;br&gt;擷取伺服器端口号:&lt;%=request.getServerPort()%&gt;</code>

<code>&lt;br&gt;擷取伺服器的名稱:&lt;%=request.getServerName()%&gt;</code>

<code>&lt;br&gt;擷取用戶端的主機名:&lt;%=request.getRemoteHost()%&gt;</code>

<code>&lt;br&gt;擷取用戶端所請求的腳本檔案的檔案路徑:&lt;%=request.getServletPath()%&gt;</code>

<code>&lt;br&gt;獲得Http協定定義的檔案頭資訊Host的值:&lt;%=request.getHeader(</code><code>"host"</code><code>)%&gt;</code>

<code>&lt;br&gt;獲得Http協定定義的檔案頭資訊User-Agent的值:&lt;%=request.getHeader(</code><code>"user-agent"</code><code>)%&gt;</code>

<code>&lt;br&gt;獲得Http協定定義的檔案頭資訊accept-language的值:&lt;%=request.getHeader(</code><code>"accept-language"</code><code>)%&gt;</code>

<code>&lt;br&gt;獲得請求檔案的絕對路徑:&lt;%=request.getRealPath(</code><code>"index.jsp"</code><code>)%&gt;</code>

客戶送出資訊的方式:GET 

使用的協定:HTTP/1.1 

擷取送出請求字元串的用戶端位址:/6.05/ 

擷取送出請求字元串的用戶端位址:http://xjuthink:8080/6.05/ 

擷取送出資料的用戶端IP位址:fe80:0:0:0:b878:6ec5:c777:706d 

擷取伺服器端口号:8080 

擷取伺服器的名稱:xjuthink 

擷取用戶端的主機名:fe80:0:0:0:b878:6ec5:c777:706d 

擷取用戶端所請求的腳本檔案的檔案路徑:/index.jsp 

獲得Http協定定義的檔案頭資訊Host的值:xjuthink:8080 

獲得Http協定定義的檔案頭資訊User-Agent的值:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko 

獲得Http協定定義的檔案頭資訊accept-language的值:zh-CN 

獲得請求檔案的絕對路徑:D:\MyEclipse 10\.metadata\.me_tcat\webapps\6.05\index.jsp

1.5  解決中文亂碼

(1)擷取請求參數時亂碼

index.jsp頁面:

<code>&lt;a href=</code><code>"show.jsp?name=張三&amp;sex=男"</code><code>&gt;解決中文亂碼&lt;/a&gt;</code>

show.jsp頁面:

<code>name參數的值為:&lt;%=</code><code>new</code> <code>String</code><code>(request.getParameter(</code><code>"name"</code><code>).getBytes(</code><code>"iso-8859-1"</code><code>),</code><code>"UTF-8"</code><code>) %&gt;&lt;br&gt;</code>

<code>    </code><code>sex參數的值為:&lt;%=</code><code>new</code> <code>String</code><code>(request.getParameter(</code><code>"sex"</code><code>).getBytes(</code><code>"iso-8859-1"</code><code>),</code><code>"UTF-8"</code><code>) %&gt;</code>

輸出結果為:

name參數的值為:張三

sex參數的值為:男

(2)擷取表單送出資訊亂碼

<code>request.setCharacterEncoding(</code><code>"utf-8"</code><code>);       </code><code>//設定請求編碼</code>

<code></code>

     本文轉自stock0991 51CTO部落格,原文連結:http://blog.51cto.com/qing0991/1341479,如需轉載請自行聯系原作者