jsp中request对象的问题
我想知道request对象到底是代表的什么?这么说吧,我有一个客户端的页面a.html,有一个服务器端的页面b.jsp,客户通过a页面登陆,然后我再b页面验证,用requ...
我想知道request对象到底是代表的什么?这么说吧,我有一个客户端的页面a.html,有一个服务器端的页面b.jsp,客户通过a页面登陆,然后我再b页面验证,用request的get表单内容的方法,那么,这个request对象是在b页面中定义的,当验证成功后,b页面将a页面转发到c页面。这时候在c页面中用request对象仍然可以或得a页面想得到的值,这又是为什么呢?
而当我在b页面中用request的 setAttribute()方法时,转发到c页面,c页面通过request的get方法可以获取其值,但是如果重定向的话就不会了,可是这跟a调到b页面的区别又是什么?为什么重定向之后request跟前一个页面又没有联系了,知道的大神麻烦把重定向的特点顺便讲解下,拜谢! 展开
而当我在b页面中用request的 setAttribute()方法时,转发到c页面,c页面通过request的get方法可以获取其值,但是如果重定向的话就不会了,可是这跟a调到b页面的区别又是什么?为什么重定向之后request跟前一个页面又没有联系了,知道的大神麻烦把重定向的特点顺便讲解下,拜谢! 展开
4个回答
展开全部
如果有兴趣,这可以深入到http协议和sevelet内核。http协议中,要求客户端(可以是浏览器或者是java、JSP、ASP程序)按照一定格式发送请求,并以“流”的形式通过低层的TCP/IP传送到服务器,这就是request的最初源头,只不过当服务器端用以接受http请求的程序是基于sevelet如tomcat之类的时,这个请求“流”就会以java的思维进行处理封装成一个对象,并且在原始“流”的基础上附加一些信息如服务器环境。一次请求完成后,服务器端做出响应(具体可参考孙卫琴 tomcat 第二版)。以你这个为例,并不是有一个"客户端"页面a,a页面是存在服务端,浏览器提出请求得到响应后下载至本地,然后浏览器借助a页面的链接、表单或JS代码等发出请求,这个请求一旦发出,和a页面没有任何关系(除非把这段关系就注册在请求中)。服务器接收到请求(注意不是b.jsp接收到请求)后,先对请求进行解析,验证是否符合http协议,然后封装成java类,在进行调用请求中URL所指向的资源b.jsp。当b.jsp使用转发代码时,将request中包含的“流”信息原封不动地转发到c.jsp(其实它并不是页面),也就是b进行请求,请求的内容同原始请求,也就是最初a页面里面的值。此外如果在b页面做一些“手脚”的话,也就是setattribute方法的话,会在原始的请求基础上额外附加一些内容一并转发到c。重定向的话就是完全抛弃那个原始的请求,“重新”请求,是另一个request实例。这些过程和区别在很多技术书上可以用楼上 zabzd985的话来概括了。
2016-01-21 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
jsp中request对象的一些常用的方法如下:
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
序号 方 法 说 明
1 object getAttribute(String name) 返回指定属性的属性值
2 Enumeration getAttributeNames() 返回所有可用属性名的枚举
3 String getCharacterEncoding() 返回字符编码方式
4 int getContentLength() 返回请求体的长度(以字节数)
5 String getContentType() 得到请求体的MIME类型
6 ServletInputStream getInputStream() 得到请求体中一行的二进制流
7 String getParameter(String name) 返回name指定参数的参数值
8 Enumeration getParameterNames() 返回可用参数名的枚举
9 String[] getParameterValues(String name) 返回包含参数name的所有值的数组
10 String getProtocol() 返回请求用的协议类型及版本号
11 String getScheme() 返回请求用的计划名,如:http.https及ftp等
12 String getServerName() 返回接受请求的服务器主机名
13 int getServerPort() 返回服务器接受此请求所用的端口号
14 BufferedReader getReader() 返回解码过了的请求体
15 String getRemoteAddr() 返回发送此请求的客户端IP地址
16 String getRemoteHost() 返回发送此请求的客户端主机名
17 void setAttribute(String key,Object obj) 设置属性的属性值
18 String getRealPath(String path) 返回一虚拟路径的真实路径
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
序号 方 法 说 明
1 object getAttribute(String name) 返回指定属性的属性值
2 Enumeration getAttributeNames() 返回所有可用属性名的枚举
3 String getCharacterEncoding() 返回字符编码方式
4 int getContentLength() 返回请求体的长度(以字节数)
5 String getContentType() 得到请求体的MIME类型
6 ServletInputStream getInputStream() 得到请求体中一行的二进制流
7 String getParameter(String name) 返回name指定参数的参数值
8 Enumeration getParameterNames() 返回可用参数名的枚举
9 String[] getParameterValues(String name) 返回包含参数name的所有值的数组
10 String getProtocol() 返回请求用的协议类型及版本号
11 String getScheme() 返回请求用的计划名,如:http.https及ftp等
12 String getServerName() 返回接受请求的服务器主机名
13 int getServerPort() 返回服务器接受此请求所用的端口号
14 BufferedReader getReader() 返回解码过了的请求体
15 String getRemoteAddr() 返回发送此请求的客户端IP地址
16 String getRemoteHost() 返回发送此请求的客户端主机名
17 void setAttribute(String key,Object obj) 设置属性的属性值
18 String getRealPath(String path) 返回一虚拟路径的真实路径
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说半天你是两个概念区分不清:
请求转发,和重定向
请求转发:不管你转发多少次,都是同一次请求
重定向:一旦客户端的请求发生重定向,那么之前的那个请求就结束了,重定向后是一个新的请求。
请求转发,和重定向
请求转发:不管你转发多少次,都是同一次请求
重定向:一旦客户端的请求发生重定向,那么之前的那个请求就结束了,重定向后是一个新的请求。
追问
那么如果我从b页面转发到c页面,c页面定义一个request对象,c页面中的request对象是不是就可以同时的或得a页面和b页面的表单内同。假设a页面和b页面都有表单的话
追答
request对象不是你定义的,表达不正确。一个request对象是这样产生的:客户端发生一次请求,服务器端接收到该请求,然后创建一个request对象和response对象,无论你怎么转发,一次请求,对应一个request对象。很显然,b页面转发到c页面c页面是可以拿到a和b页面的参数的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没那么复杂,request只是当前页面表单对象的提交。它就是这么一个作用域而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询