您的位置:首页 > 产品设计 > UI/UE

jsp内置对象【03】request对象详解【01】

2013-02-04 15:05 483 查看
在jsp内置对象【02】中我们简单的学习了page、request、session、application四种对象的属性范围。那么从这篇文章开始我们共同来具体学习request、response、session和application的用法。先从request讲起

request内置对象介绍:
request内置对象时使用最多的一个对象了,其主要作用是用来接收客户端发送而来的请求信息,例如:请求的参数、发送的头信息等都属于客户端发来的信息,request是javax.servlet.HttpServletRequest接口的实例化对象,表示此对象主要是应用在HTTP协议上

从java Servlet API中,我们可以发现HttpServletRequest接口的定义

从文档中可以发现,HttpServletRequest是ServletRequest的子接口,而ServletRequest只有一个子接口----HttpServletRequest
既然ServletRequest只有一个子接口HttpServletRequest,那么为什么不将两个接口合并一个接口呢?
只能从长远来看,从长远来看,现在使用的主要协议是HTTP协议,但是以后有可能出现更多的心的协议,例如:XXX ,以后如果要想支持这种新的协议,则肯定直接继承ServletRequest接口即可。
request内置对象常用操作




接下来我们一起看一下request几个常用方法的

接受参数问题
我们都知道request的招牌是接受参数,招牌方法是getParameter();但是如果现在又这样一个程序(如下),我们看一下会出现什么结果。
Request_03.jsp
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<form action="request_04.jsp" method="post">
姓名:<input type="text" name="uname"><br>
兴趣:<input type="checkbox" name="inst" value="唱歌">唱歌
<input type="checkbox" name="inst" value="跳舞">跳舞
<input type="checkbox" name="inst" value="游泳">游泳
<input type="checkbox" name="inst" value="看书">看书
<input type="checkbox" name="inst" value="旅游">旅游
<br>
<input type="hidden" name="id" value="3">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>

Request_04.jsp
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%
request.setCharacterEncoding("gbk");
String id=request.getParameter("id");
String name=request.getParameter("uname");
String inst=request.getParameter("inst");
%>
<h2>编号:<%=id%></h2>
<h2>姓名:<%=name%></h2>
<h2>兴趣:<%=inst%></h2>
</body>
</html>

运行一下,在兴趣上选择多个兴趣,但是显示的时候只是显示了我选中的第一个兴趣,其他的兴趣就不显示了。这是怎么回事。
其实,这个兴趣的传递是个复选框的操作,复选框属于数组,那么我们接受的时候就得换一下接受方式了。
在request中有个方法:
String[] getParameterValues(String name)
将request_04.jsp页面改成如下:

<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%
request.setCharacterEncoding("gbk");
String id=request.getParameter("id");
String name=request.getParameter("uname");
String inst[]=request.getParameterValues("inst");
%>
<h2>编号:<%=id%></h2>
<h2>姓名:<%=name%></h2>
<h2>兴趣:
<%
for(int x=0;x<inst.length;x++){
%>
<%=inst[x]%>、
<%
}
%>
</h2>
</body>
</html>

这样就可以显示我们选中的多个兴趣了。上述程序灰色部分就是对数组接受参数的操作。
这儿注意一个问题,希望大家能了解。上述程序是通过表单传递过来的,然后在接受页接受参数,但是还有一种参数传递的方法,就是地址重写,地址重写只有接受页,参数的设定在运行的时候设定。看下面的一个例子:

request_05.jsp
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%
request.setCharacterEncoding("gbk");
String name=request.getParameter("name");
String password=request.getParameter("password");
%>
<h2>姓名:<%=name%></h2>
<h2>密码:<%=password%></h2>
</body>
</html>

这儿注意,运行的时候,我们要在地址栏中写:(假设我的项目名称是test51cto,页面放在了jsp文件夹中) http://localhost:8080/test51cto/jsp/request_03.jsp?name=hello&password=123 运行一下可以发现依然能显示接受的参数,名字和密码正式我们在地址栏中写入的name和password的值。
学习到这个地方,不得不学习一个重要的只是点,关于表单提交方式:get和post.
在学习表单的时候,大家还有印象吧,<form name="" action="" method="post/get"></form>,在这儿,表单的提交方式有两种,他们的区别是什么呢?
post提交:提交后的地址栏改变,但是不会附加目标地址的其他内容
get提交:提交后 地址栏发生改变,而且会使用地址栏重写的方式完成,既然所有的内容都要显示,则传递时,肯定受到地址栏长度的限制。
在接受参数的方法中还有一个重要的方法:Enumeration getParameterNames()
这个方法可以返回所有的参数,而不需要一个一个接受了。看一下一个实例如下:

request_06.jsp
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<form action="request_05.jsp" method="get">
姓名:<input type="text" name="uname"><br>
性别:<input type="radio" name="sex" value="男" CHECKED>男
<input type="radio" name="sex" value="女">女
<br>
城市:<select name="city">
<option value="北京">北京</option>
<option value="滨州">滨州</option>
<option value="沂水">沂水</option>
</select><br>
自我介绍:<textarea cols="30" rows="3" name="note">
</textarea><br>
兴趣:<input type="checkbox" name="inst" value="唱歌">唱歌
<input type="checkbox" name="inst" value="跳舞">跳舞
<input type="checkbox" name="inst" value="游泳">游泳
<input type="checkbox" name="inst" value="看书">看书
<input type="checkbox" name="inst" value="旅游">旅游
<br>
<input type="hidden" name="id" value="1">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>

request_07.jsp
<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%
request.setCharacterEncoding("gbk");
Enumeration enu=request.getParameterNames();  //接受参数
%>
<table border="1">
<tr>
<td>参数名称</td>
<td>参数内容</td>
</tr>
<%
while(enu.hasMoreElements()){
String paramName=(String) enu.nextElement(); //遍历的方式,类似迭代遍历
%>
<tr>
<td><%=paramName%></td>
<td><%=request.getParameter(paramName)%></td>
</tr>
<%
}
%>
</table>
</body>
</html>

这样做的运行一下后可以发现的确可以接受所有的参数,但是这个地方有一个问题,不能处理复选框的内容了,又出现了兴趣只能是一个的问题了。我们要修改一下:
将request_06.jsp改成如下:

<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<form action="request_05.jsp" method="post">
姓名:<input type="text" name="uname"><br>
性别:<input type="radio" name="sex" value="男" CHECKED>男
<input type="radio" name="sex" value="女">女
<br>
城市:<select name="city">
<option value="北京">北京</option>
<option value="滨州">滨州</option>
<option value="沂水">沂水</option>
</select><br>
自我介绍:<textarea cols="30" rows="3" name="note">
</textarea><br>
兴趣:<input type="checkbox" name="**inst" value="唱歌">唱歌
<input type="checkbox" name="**inst" value="跳舞">跳舞       //将inst之前都加上两个**作为标致
<input type="checkbox" name="**inst" value="游泳">游泳
<input type="checkbox" name="**inst" value="看书">看书
<input type="checkbox" name="**inst" value="旅游">旅游
<br>
<input type="hidden" name="id" value="1">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>


将request_07.jsp改成如下:

<%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>web开发</title>
</head>
<body>
<%
request.setCharacterEncoding("gbk");
Enumeration enu=request.getParameterNames();
%>
<table border="1">
<tr>
<td>参数名称</td>
<td>参数内容</td>
</tr>
<%
while(enu.hasMoreElements()){
String paramName=(String) enu.nextElement();
%>
<tr>
<td><%=paramName%></td>
<td>

//对复选框的操作
<%
if(paramName.startsWith("**")){
String paramValue[]=request.getParameterValues(paramName);
for(int x=0;x<paramValue.length;x++){
%>
<%=paramValue[x]%>、
<%
}

}else{
String paramValue=request.getParameter(paramName);
%>
<%=paramValue%>
<%
}
%>
</td>
</tr>
<%
}
%>
</table>
</body>
</html>

运行一下可以发现,程序已经很完美了。注意,这种操作一般都是在表单不确定的情况下使用,如购物车系统。
关于request的方法还有很多,我们会在下一篇request详解【02】中学习。大家要注意讲解中的代码里面的方法的作用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息