jsp内置对象【03】request对象详解【01】
2013-02-04 15:05
615 查看
在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中有个方法:
String[] getParameterValues(String name)
将request_04.jsp页面改成如下:
这样就可以显示我们选中的多个兴趣了。上述程序灰色部分就是对数组接受参数的操作。
这儿注意一个问题,希望大家能了解。上述程序是通过表单传递过来的,然后在接受页接受参数,但是还有一种参数传递的方法,就是地址重写,地址重写只有接受页,参数的设定在运行的时候设定。看下面的一个例子:
这儿注意,运行的时候,我们要在地址栏中写:(假设我的项目名称是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改成如下:
将request_07.jsp改成如下:
运行一下可以发现,程序已经很完美了。注意,这种操作一般都是在表单不确定的情况下使用,如购物车系统。
关于request的方法还有很多,我们会在下一篇request详解【02】中学习。大家要注意讲解中的代码里面的方法的作用
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】中学习。大家要注意讲解中的代码里面的方法的作用
相关文章推荐
- jsp内置对象【03】request详解【02】
- ASP内置对象详解之Request对象
- jsp内置对象【04】response对象详解
- JSP九大内置对象详解
- Jsp内置对象详解
- jsp 九大内置对象详解以及示例
- jsp 九大内置对象和其作用详解
- JSP内置对象:request对象,response对象、请求重定向、请求转发
- JSP中九大内置对象详解
- jsp内置对象详解
- JSP九大内置对象详解(二)
- JSP 9 大内置对象方法详解
- JSP入门<1>九大内置对象实例详解
- jsp小结10 - 9个内置对象03 exception
- 实例详解JSP内置对象
- 实例详解JSP内置对象
- JSP九大内置对象详解
- JSP 9 大内置对象详解
- JSP内置对象--request对象 (setCharacterEncoding("GBK"),getParameter(),getParameterValues(),getParameterNames(),getServletPath(),getContextPath()
- JSP的内置对象-----request对象