注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

赵启鹏的博客

lonely@boy

 
 
 

日志

 
 

转发和重定向 详细解析  

2013-09-19 23:45:09|  分类: servlet/jsp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
2 转发  
什么是转发
一个web组件(servlet/jsp)将未完成的处理交给另一个web组件继续完成
常见的情况
一个servlet获得需要展示的数据之后,转发一个jsp文件来将这些数据展现出来。
2 编程
1 绑定数据到request对象上
request.setAttribute(String name,Object obj);
name:绑定名称
obj:绑定值
//getAttribute方法 根据绑定名称获得绑定值 
//如果找不到值 则返回null
object request,getAttribute(String name);
2 获得转发器
RequestDispatcher rd = request.getRequestAttribute("XXX.jsp");
3 转发
rd.forward(request,response);
需要注意的问题
a 转发之前 不能调用out.close()方法 原因(可能是调用out.close或者out.flush会将数据response中的数据发送到客户端)
b 因为转发之前
会将response对象上的数据清空
特点 
a 转发的目的地必须是同一个应用内部某个组件的地址
b 转发之后 浏览器地址栏的地址不变
2 重定向
1 什么是重定向
服务器向浏览器发送一个302状态码和一个location消息头(值为一个地址
成为重定向地址) 浏览器 收到之后 会理解向重定向地址发送请求
2 编程
response.sendRedirect(String url);
url:重定向地址
3 注意两个问题
a 重定向之前 不能够调用out.close();
原因估计也是 调用out.close()/out.flush()方法会导致把response中的数据
发送到客户端
b 重定向之前 servlet容器会清空response对象上缓存的数据的。
4 特点
a 重定向的地址是任意的
b 重定向之后 浏览器的地址栏的地址会变成重定向的地址
转发和重定向的区别
1 转发所涉及的web组件(servlet/jsp)会共享同一个reqeust对象和response对象。
而重定向不能共享 因为request对象和response对象生存的时间是一次请求一次响应(即当容器收到请求之后,会立即创建request和response对象
只要容器 将响应发送出去 会立即销毁这两个对象) 重定向是两次请求(这里我的理解是如下 重定向之前 浏览器向服务器发送请求 然后servlet容器创建这resquest和response对象 然后返回一个302状态码和location消息头 然后servlet容器会立即销毁这两个对象 然后浏览器按照消息头的URL地址发送请求 servlet再次创建request和response对象
2 转发的目的地只能是同一个应用内部某个组件的地址 则重定向是任意的地址
3 转发之后浏览器的地址栏不变 重定向之后浏览器的地址栏会变成URL地址


  评论这张
 
阅读(19)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017