两者比较如下:

跳转类型  客户端请求次数 服务端响应次数 URL变化 站外跳转            作用域
服务器跳转     1     1    无   否 pageContext、request、session、application
客户端跳转     2     2    有   能 session、application

请求次数与响应次数

服务端跳转:客户端发起一次请求,服务端接收请求后,将结果跳转到另一个页面,作为此次请求结果返回给客户端
客户端跳转:客户端发起一次请求,服务端返回此次请求的结果,结果内容是一个URL地址,客户端拿到此URL,再次发送一次请求,服务端再次响应最终结果给客户端

所以,对于服务器跳转,请求次数和响应次数均是1次,对于 客户端跳转,请求次数和响应次数均是2次

 

URL是否变化

服务端跳转:只是服务端内部不断进行forward,不管进行多少次forward,客户端是不知情的,服务端将最后的结果返回给客户端,即完成此次请求。客户端的URL没有变化。
客户端跳转:客户端发起两次请求,URL发生变化(PS:除非闲得蛋疼,两次请求的URL地址是一样的)

能否进行站外跳转

服务端跳转:不能进行站外跳转。服务端请求只能在服务内,将请求响应的结果不断的跳转, 使用的都是服务内部的资源。不能跳到其他服务上去。
客户端跳转:可以。直接跳转到其他服务的URL即可

作用域

以jsp的四大作用域,关于作用域详见地址  http://www.cnblogs.com/mengzhen123/p/5968831.html

pageContext:当前页面

request:当前请求

session:当前会话

application:整个应用。狭义的理解为application的生命周期为 服务的开启到关闭

从上面我们说请求次数和响应次数就可以知道,对于客户端跳转,pageContext、request发生了改变。因为客户端URL发生了变化,pageContext即发生了变化,客户端是发送了是两次请求,request即发生了变化。所以如果使用客户端跳转的时候,共享数据建议存放在session中。

服务端为什么没有发生变化,我们从selvet实现服务端跳转方法forward不难看出, forward方法调用时,带着request、response参数,即不论服务端进行多少次forward,都是使用同一个request、response。所以pageContext、request作用域并没有变化。共享数据放在这两个作用域的对象中,依然可以取到。

PS:selvet、Struts2、SpringMVC  实现请求跳转的方式有差异,但是其本质是一样的。

最新文章

  1. [Django]模型提高部分--聚合(group by)和条件表达式+数据库函数
  2. How-to-uninstall-Meteor // install Meteor manually
  3. coalesce函数用法
  4. TXT导入出现乱码
  5. [转] VS 整合NUnit进行单元测试
  6. Bias/variance tradeoff
  7. 分享一个圆角自定义的漂亮AlertDialog
  8. SQL Server2008数据库自动备份步骤
  9. 常用的windowd属性和对象
  10. study note--(Education)
  11. js深入研究之匿名函数
  12. 配置hibernate数据库连接
  13. UWP的Converter妙用
  14. k60详细引脚功能截图
  15. java内置线程池ThreadPoolExecutor源码学习记录
  16. 设计模式八: 委派(Delegate)
  17. sitecore系统教程之禁用xDB和Xdb跟踪
  18. css3中Animation
  19. 20145209刘一阳《JAVA程序设计》第十五周补充测试
  20. 爬虫框架Scrapy之案例二

热门文章

  1. PHP图片处理
  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_3_Map接口中的常用方法
  3. django在线教育网站开发---需求分析
  4. linux如何处理多连接请求?
  5. Myeclipse 快捷键大全(绝对全)
  6. docker--docker架构
  7. 手把手教你用Pytorch-Transformers——实战(二)
  8. java实战应用:MyBatis实现单表的增删改
  9. Xilinx源语-------FDRE
  10. sys模块与shutil模块