![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=1738948319-XDGkKAAeGOmUABrsEShdldaSZMO9F3Ro-0-1f2d3581c915f8711eb08b635f2489bb)
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=1738948319-stlc3x6OXew2kEO6Z3rpDW7yXOLVPH8g-0-ce33cce5accd0d26ed562c408f3999eb)
在这个实例中,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=1738948319-LSZezMkDZxqm0LQXIX3QhRsIATze1ERn-0-113ff0cba1fd5f9acba97eac6cca1b8d)
图4-1 requestInfo.jsp页面运行结果
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P100_7460.jpg?sign=1738948319-TK4wHX41cNfsI6cIBhPB9L9OCzmntMq1-0-b89d791e4f5c7e723cc7311fca4afdb3)
图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=1738948319-sHFQiwq7oTEEPQMJY3Tnhx19WVSbIGGJ-0-5b639f7f3868646df01f5f2673816ba5)
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=1738948319-0Kw4WWqRhhiS8BiYFc2b1NbqYct50JWA-0-c228887938ff54b615c1ad1919588628)
hobbyInfo.jsp页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_76107.jpg?sign=1738948319-tSCJhQDSyYERpDiEt9LBFN1L470N2RBD-0-a34145d436f1e5317daf20b66fe451c5)
程序运行结果如图4-3和图4-4所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_7967.jpg?sign=1738948319-Vpf0giHjNxDvI0s6tE4wxmmqrWdVqbXB-0-5026c5b89d6905e0e470eb5904646504)
图4-3 hobby.html页面运行结果
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P103_7970.jpg?sign=1738948319-U0hIiuk3myJH1a2ZUzrkx37aMWmwplI9-0-4dcade66ece315491904f83685145070)
图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=1738948319-ZX544fE1mKiFCb99bXlfN7IOIRSy60Iz-0-691a2a8437b0bc4e18d5f8ad1885c63c)
cityInfo.jsp页面的代码如下:
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P104_76110.jpg?sign=1738948319-4dfnl8KDSTFFHfzG57xiWY6TsmQG5WuW-0-d378e5d722b4da9ab1e61b86c5b8125f)
程序运行结果如图4-5和图4-6所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P104_8238.jpg?sign=1738948319-RGnSgAyajsIy2UbVBxwRhv23EhH9jHB0-0-d64ffb2455d38577884b58c83473c77e)
图4-5 city.html页面运行结果
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P104_8241.jpg?sign=1738948319-VJF5iu87aqdEim4lr3nk7WYcodyHGUw7-0-b981c3c8a37d80346b76d0fa18e7b857)
图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=1738948319-SBBdQBuXeCRvQhaPEX2xFQVVrR3Kp2YL-0-be4b0f89cdc0d1a9966e40fdfac9dca6)
程序运行结果如图4-7所示。
![](https://epubservercos.yuewen.com/B91E50/17214369404807006/epubprivate/OEBPS/Images/Figure-P105_8631.jpg?sign=1738948319-pZ3mXn4E9eQP8vvBI7XQtjvDcH1MiuhH-0-9c1833a04827e766c9c3beadf258e2ae)
图4-7 request.jsp回显系统信息