转发是服务器行为,重定向是客户端行为。

  转发(Forword) :通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。

  RequestDispatcher 可以通过HttpServletRequest 的 getRequestDispatcher()方法获得。例如下面的代码就是跳转到 login_success.jsp 页面。

  request.getRequestDispatcher("login_success.jsp").forward(request, response);

  重定向(Redirect): 是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

  转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

  重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

从地址栏显示来说: 

  forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

  redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

从数据共享来说: 

  forward:转发页面和转发到的页面可以共享request里面的数据.

  redirect:不能共享数据.

从运用地方来说: 

  forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

  redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

从效率来说: 

  forward:高.

  redirect:低.

最新文章

  1. Windows 10 虚拟桌面切换
  2. 引入Ember插件 大概流程
  3. No.010:Regular Expression Matching
  4. java中i=i++字节码分析
  5. 1005. 继续(3n+1)猜想 (25)
  6. 各种HelloWorld
  7. Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)
  8. eclipse的各种错误和解决方法
  9. spring-boot-starter-mail技术总结
  10. Oracle体系结构之内存结构(3)
  11. 本地Git仓库和Github仓库的关联
  12. 【frame系列标签】
  13. listview 异步加载图片并防止错位
  14. 可重入锁 & 不可重入锁
  15. kill-9导致weblogic无法启动
  16. windows 7 中使用命令行创建WiFi热点
  17. JAVA I/O(五)多线程网络Socket和ServerSocket
  18. nexus 组件下载和上传
  19. [转]Using Browser Link in Visual Studio 2013
  20. 用Python语言写Hadoop MapReduce程序Writing an Hadoop MapReduce Program in Python

热门文章

  1. java类的回顾
  2. js 格式化时间、字符串指定长度、随机字符串
  3. Composer 安装和使用
  4. CSS——margin
  5. dos 设置 Windows 网络命令
  6. 字体选择框QFontComboBox
  7. [USACO]地震 (二分答案+最优比率生成树详解)
  8. [转]mmap和madvise的使用
  9. 不修改加密文件名的勒索软件TeslaCrypt 4.0
  10. SpringBoot整合Jest操作ES