- JSP應用與開發技術(第3版)
- 馬建紅 李學相 韓穎 王瑞娟 張晗
- 1701字
- 2020-06-30 17:13:24
4.2 request對象
request對象主要用于接收客戶端通過HTTP協議連接傳輸到服務器端的數據。在客戶端的請求中如果有參數,則該對象就有一個參數列表,它通常是HttpServletRequest的子類,其作用域就是一次request請求。
4.2.1 request對象常用方法
request對象包括很多方法,它的主要方法及對應的說明如表4-2所示。
表4-2 request對象的主要方法

4.2.2 request對象應用實例
request對象包括很多方法,其中最主要的有getParameter(String name)、getParameterValues(String name)、getParameterNames()等方法,下面通過實例分別加以說明。
1. String getParameter(String name)
用表單和超鏈接、<jsp:param>傳遞參數的時候,使用getParameter(String name)接收傳遞的參數。
返回給定參數的值,當傳遞給此方法的參數名沒有實際參數與之對應時,返回null。
使用getParameter(String name)取得的值都是字符串類型,需要轉換為需要的類型。
【例4-1】request對象應用實例。在requestInfo.jsp頁面中輸入用戶名和密碼,在showInfo.jsp頁面中將輸入的用戶名和密碼顯示出來。
requestInfo.jsp頁面的代碼如下:
<%@ page contentType="text/html; charset=GBK"%> <html> <head> <title>使用Request對象</title> </head> <body bgcolor="#ffc7c7"> <form name="form1" method="post" action="showInfo.jsp"> <p align="center">用戶名:<input type="text" name="username"></p> <p align="center">密 碼 :<input type="password" name="password"> </p> <p align="center"><input type="submit" name="Submit" value="提交"> <input name="cancel" type="reset" id="cancel" value="取消"> </p> </form> </body> </html>
showInfo.jsp頁面的代碼如下:

在這個實例中,requestInfo.jsp頁面將表單中用戶輸入的信息提交給showInfo.jsp頁面,showInfo.jsp頁面利用getParameterNames()和getParameter(String name)這兩個方法獲取表單中傳過來的參數名稱和參數值。程序運行結果如圖4-1和圖4-2所示。

圖4-1 requestInfo.jsp頁面運行結果

圖4-2 showInfo.jsp頁面運行結果
通常客戶端向服務器端提交數據的時候,有多種數據提交機制,最常用的就是get方法和post方法。get傳送的數據量較小,不能大于2KB。get是把參數數據隊列加到提交表單的action屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到;post傳送的數據量較大,一般被默認為不受限制。post是通過http post機制,將表單內各個字段與其內容放置在html header內一起傳送到action屬性所指的URL地址,但用戶看不到這個過程。這兩種方式的參數都可以用request來獲得。
本例中采用post來提交數據,有兩種方法可以使客戶端通過get方法來提交數據。
(1)如直接在瀏覽器中輸入地址來獲取JSP文件,則默認使用的提交方法是get方法:
http://localhost:8080/ch04/request/requestInfo.jsp
如果此時有數據傳遞給服務器,則可以采用以下方法:
http://localhost:8080/ch04/request/requestInfo.jsp?name1=value1$name2=value2...
從上面可以看到,通過get方法傳遞數據的時候,只要將需要傳遞的數值放在URL地址后面,之間通過?隔開。這種方法多用在超級鏈接中,當傳遞數據較少的時候,可以直接通過鏈接來傳遞數據。
(2)get方法提交表單數據。
如把【例4-1】requestInfo.jsp中的<form name="form1" method="post" action="showInfo.jsp">的post改為get,在輸入數據提交的時候地址欄中顯示http://localhost:8080/ch04/request/showInfo.jsp?username=majianhong&password=123&Submit=%CC%E1%BD%BB。其中,Submit后面的數據是該按鈕的顯示值,因為經過了編碼,所以顯示的是各種符號。從地址鏈接可以看到,通過get方法提交數據,會將所有數據都放在URL地址后面,當表單數據比較多的時候,會顯得很難看。通過get方法提交,會將一些隱藏信息顯示出來,比如密碼password=123。
其實通過表單傳遞參數,采用getParameter(String name)接受傳遞參數的實例在第3章已經介紹過,如【例3-6】。
通過表單輸入數據的代碼如下:
<form action="dec-method.jsp" method="get" name="form"> <input type="text" name="radius"> <input type="submit" name="submit" value="開始計算"> </form>
通過
String str = request.getParameter("radius");
得到輸入數據。
由于使用getParameter(String name)取得的值都是字符串類型,所以采用代碼
double r; r = Double.parseDouble(str);
來轉換數據類型。
由于在傳遞參數時,在表單中采用的方法method="get",此時運行如下程序會發現在地址欄中顯示所輸入的數據:
http://localhost:8080/ch04/Script/dec-method.jsp?radius=3
如果在頁面中采用超級鏈接的方法,使用如下代碼:
<a href="dec-method.jsp?radius=3">超級鏈接傳遞參數</a>
那么得到此超級鏈接所傳遞的參數,同樣也可采用以下方法:
String str = request.getParameter("radius");
采用超級鏈接所傳遞的參數也是采用getParameter(String name)取得值。
通過<jsp:param>傳遞參數,同樣使用getParameter(String name)接收傳遞的參數。
2. Enumeration getParameterNames()
返回值類型:枚舉類型Enumeration。
得到客戶端提交的所有參數的名稱。
如【例4-1】中的通過循環可獲取客戶端提交的所有參數的名稱:

3. void setCharacterEncoding(String chaen)
在form表單中采用post方式提交請求時,需要設置request對象的編碼方式,保證能夠正確地取到數據。例如:
<%request.setCharacterEncoding("gb2312");%>
關于解決漢字亂碼問題將在6.5.2節介紹。
4. String [] getParameterValues(String name)
使用getParameterValues()能夠取出變量的多個值,返回值類型為字符串數組String[]。
主要用于獲取復選框的值或是下拉列表帶multiple屬性的值。
【例4-2】讀取復選框數據。在hobby.html頁面中選中多個選項,在hobbyInfo.jsp頁面中將所選內容顯示出來。
hobby.html頁面的代碼如下:

hobbyInfo.jsp頁面的代碼如下:

程序運行結果如圖4-3和圖4-4所示。

圖4-3 hobby.html頁面運行結果

圖4-4 hobbyInfo.jsp頁面運行結果
【例4-3】讀取帶multiple屬性的下拉列表中的數據。在city.html頁面中選中多個下拉列表選項,在cityInfo.jsp頁面中將所選內容顯示出來。
city.html頁面的代碼如下:

cityInfo.jsp頁面的代碼如下:

程序運行結果如圖4-5和圖4-6所示。

圖4-5 city.html頁面運行結果

圖4-6 cityInfo.jsp頁面運行結果
【例4-4】在request.jsp中利用request對象的一些方法,回顯系統信息。
request.jsp頁面的代碼如下:

程序運行結果如圖4-7所示。

圖4-7 request.jsp回顯系統信息
- 從零開始:數字圖像處理的編程基礎與應用
- 計算機圖形學編程(使用OpenGL和C++)(第2版)
- 算法精粹:經典計算機科學問題的Java實現
- DevOps入門與實踐
- R語言編程指南
- Windows Presentation Foundation Development Cookbook
- Flux Architecture
- SQL基礎教程(視頻教學版)
- jQuery開發基礎教程
- Java項目實戰精編
- 蘋果的產品設計之道:創建優秀產品、服務和用戶體驗的七個原則
- Bootstrap 4 Cookbook
- 計算機應用基礎案例教程
- 一本書講透Java線程:原理與實踐
- 從Excel到Python數據分析:Pandas、xlwings、openpyxl、Matplotlib的交互與應用