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">密 &nbsp;码 :<input type="password" name="password">
     </p>
     <p align="center"><input type="submit" name="Submit" value="提交">
     &nbsp; &nbsp; <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回显系统信息