1 通路Request對象
1.1 通路請求參數
(1)在index.jsp中添加一個連結到deal.jsp頁面的超連結
<code><a href=</code><code>"deal.jsp?id=1&user="</code><code>>處理頁</a></code>
(2)在deal.jsp頁面中擷取請求參數id、user和pwd的值并輸出
<code><%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=GB18030"</code> <code>pageEncoding=</code><code>"utf-8"</code><code>%></code>
<code><%</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>%></code>
<code><html></code>
<code><head></code>
<code><meta http-equiv=</code><code>"Content-Type"</code> <code>content=</code><code>"text/html; charset=utf-8"</code><code>></code>
<code><title>處理頁</title></code>
<code></head></code>
<code><body></code>
<code>id參數的值為:<%=id %><br></code>
<code>user參數的值為:<%=user %><br></code>
<code>pwd參數的值為:<%=pwd %></code>
<code></body></code>
<code></html></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><%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=utf-8"</code> <code>pageEncoding=</code><code>"utf-8"</code><code>%></code>
<code><title>Insert title here</title></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><jsp:forward page=</code><code>"deal.jsp"</code><code>/></code>
(2)deal.jsp頁面
<code><title>結果頁</title></code>
<code><%</code><code>String</code> <code>message=request.getAttribute(</code><code>"result"</code><code>).toString(); %></code>
<code><%=message %></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><%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=utf-8"</code> <code>pageEncoding=</code><code>"utf-8"</code><code>%></code>
<code><%@ page </code><code>import</code><code>=</code><code>"java.net.URLDecoder"</code> <code>%></code>
<code><title>通過cookie儲存并讀取使用者登入資訊</title></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 < 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) && </code><code>""</code><code>.equals(date)) {</code><code>//如果沒有注冊</code>
<code> </code><code>遊客您好,歡迎您初次光臨!</code>
<code> </code><code><form action=</code><code>"deal.jsp"</code> <code>method=</code><code>"post"</code><code>></code>
<code> </code><code>請輸入姓名:<input name=</code><code>"user"</code> <code>type=</code><code>"text"</code> <code>value=</code><code>""</code><code>></code>
<code> </code><code><input type=</code><code>"submit"</code> <code>value=</code><code>"确定"</code><code>></code>
<code> </code><code></form></code>
<code> </code><code>} </code><code>else</code> <code>{</code><code>//已經注冊</code>
<code> </code><code>歡迎[<b><%=user %></b>]再次光臨<br></code>
<code> </code><code>您注冊的時間是:<%=date %></code>
<code><%@ page </code><code>import</code><code>=</code><code>"java.net.URLEncoder"</code> <code>%></code>
<code><title>寫入cookie</title></code>
<code><script type=</code><code>"text/javascript"</code><code>>window.location.href=</code><code>"index.jsp"</code><code>;</script></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><%@ page language=</code><code>"java"</code> <code>contentType=</code><code>"text/html; charset=UTF-8"</code> <code>pageEncoding=</code><code>"UTF-8"</code><code>%></code>
<code><meta http-equiv=</code><code>"Content-Type"</code> <code>content=</code><code>"text/html; charset=UTF-8"</code><code>></code>
<code><title>使用request對象的相關方法擷取用戶端資訊</title></code>
<code><br>客戶送出資訊的方式:<%=request.getMethod()%></code>
<code><br>使用的協定:<%=request.getProtocol()%></code>
<code><br>擷取送出請求字元串的用戶端位址:<%=request.getRequestURI()%></code>
<code><br>擷取送出請求字元串的用戶端位址:<%=request.getRequestURL()%></code>
<code><br>擷取送出資料的用戶端IP位址:<%=request.getRemoteAddr()%></code>
<code><br>擷取伺服器端口号:<%=request.getServerPort()%></code>
<code><br>擷取伺服器的名稱:<%=request.getServerName()%></code>
<code><br>擷取用戶端的主機名:<%=request.getRemoteHost()%></code>
<code><br>擷取用戶端所請求的腳本檔案的檔案路徑:<%=request.getServletPath()%></code>
<code><br>獲得Http協定定義的檔案頭資訊Host的值:<%=request.getHeader(</code><code>"host"</code><code>)%></code>
<code><br>獲得Http協定定義的檔案頭資訊User-Agent的值:<%=request.getHeader(</code><code>"user-agent"</code><code>)%></code>
<code><br>獲得Http協定定義的檔案頭資訊accept-language的值:<%=request.getHeader(</code><code>"accept-language"</code><code>)%></code>
<code><br>獲得請求檔案的絕對路徑:<%=request.getRealPath(</code><code>"index.jsp"</code><code>)%></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><a href=</code><code>"show.jsp?name=張三&sex=男"</code><code>>解決中文亂碼</a></code>
show.jsp頁面:
<code>name參數的值為:<%=</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>) %><br></code>
<code> </code><code>sex參數的值為:<%=</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>) %></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,如需轉載請自行聯系原作者