![JSP应用与开发技术(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/554/31794554/b_31794554.jpg)
4.2 request对象
request对象主要用于接收客户端通过HTTP协议连接传输到服务器端的数据。在客户端的请求中如果有参数,则该对象就有一个参数列表,它通常是HttpServletRequest的子类,其作用域就是一次request请求。
4.2.1 request对象常用方法
request对象包括很多方法,它的主要方法及对应的说明如表4-2所示。
表4-2 request对象的主要方法
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-T98_76084.jpg?sign=1739485400-W5YfRjq3vSvVUMAwClmZRpR5SBOrBUNT-0-9793160b94af06096970bbd6499e1fca)
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页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P99_76089.jpg?sign=1739485400-XzqXhFua54EmApgzeIHUw6KCdjAmeKjN-0-4c750dff3213d8a605e5aae667b16a10)
在这个实例中,requestInfo.jsp页面将表单中用户输入的信息提交给showInfo.jsp页面,showInfo.jsp页面利用getParameterNames()和getParameter(String name)这两个方法获取表单中传过来的参数名称和参数值。程序运行结果如图4-1和图4-2所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P100_7457.jpg?sign=1739485400-EOZ8nwzzrF6wu3hZnxApGWB18WwJNEi1-0-2e7239dd0dc3c08348ebfd9eb4626f42)
图4-1 requestInfo.jsp页面运行结果
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P100_7460.jpg?sign=1739485400-MfIVGzwjKkreP9mHn8YBEKl5lT2XVhp3-0-f5ef055f4c38d04550ef9ba8de195ad6)
图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】中的通过循环可获取客户端提交的所有参数的名称:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P101_76104.jpg?sign=1739485400-r7eCkyNr13tmnSwpRsXxUpBLVVmdQjjL-0-5ab5e44415bb65d1c2bfc5d630b648fc)
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页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P102_76105.jpg?sign=1739485400-FErVujFVvjwDGO5aAfnyVqkUMBl9V2rc-0-aa35f31c5142f9e64de17237704c13a5)
hobbyInfo.jsp页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_76107.jpg?sign=1739485400-UukkCNWs7zjxuGb2XzrLB3TPanUDf8vu-0-3845a4d92359fcf0f472d9664b2c61e0)
程序运行结果如图4-3和图4-4所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_7967.jpg?sign=1739485400-FtZybfliBWhQW6GKrT3uAglCGO0gojCO-0-daf31883d6455ad8a2ab9875e6c4f2c2)
图4-3 hobby.html页面运行结果
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_7970.jpg?sign=1739485400-nJ85kUWaYtYiXpFpBAgzDZrot4H15N6u-0-c613dcf26f82ae2a052c7b88cb9c1b46)
图4-4 hobbyInfo.jsp页面运行结果
【例4-3】读取带multiple属性的下拉列表中的数据。在city.html页面中选中多个下拉列表选项,在cityInfo.jsp页面中将所选内容显示出来。
city.html页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_76108.jpg?sign=1739485400-Kv2iTbcdQL0OBFv5dnMsnM5VetCJ4pQi-0-036497f84cc7a5cb69df3208ae319a9e)
cityInfo.jsp页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P104_76110.jpg?sign=1739485400-09NIyQcPaMRpkAgOnb4OQgtnDdmusgdu-0-6b77c0bc5d96a9765beee78d7038cb89)
程序运行结果如图4-5和图4-6所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P104_8238.jpg?sign=1739485400-7qCF4kmhi4PVlTLg2hsQRUB3kEeNso7D-0-68bbe12612c638eb25af2efdd648f173)
图4-5 city.html页面运行结果
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P104_8241.jpg?sign=1739485400-ZkwK9dI6LdW5aNUdf2EdVq6tahpPASea-0-9a25f1d8543d68575000ee516adb7fe6)
图4-6 cityInfo.jsp页面运行结果
【例4-4】在request.jsp中利用request对象的一些方法,回显系统信息。
request.jsp页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P105_76114.jpg?sign=1739485400-sK8Oiyj84TINrDghs2SkrP3aq3LhvUfc-0-8fac5d7794e0968bd34b9b655bfccecf)
程序运行结果如图4-7所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P105_8631.jpg?sign=1739485400-jLdkzwwokj5KNm64ktmBXJGEX3LKsqud-0-0919180c01a4b824137d68d05644700d)
图4-7 request.jsp回显系统信息