关闭

重定向和请求转发的区别

标签: urlwebjava web重定向转发
197人阅读 评论(0) 收藏 举报
分类:

一次重定向的过程

我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为:

1、以指定方式(表单看method,直接URL发起就是GET)发一次请求到后台,后台处理重定向,返回一个302的HTTP状态码给客户端,并在response里面带一个Location用于标识重定向的地址

2、以Location的地址为目标地址,客户端再发起一次请求

 

一次请求转发的过程

以指定方式(表单看method,直接URL发起就是GET)发一次请求到后台,后台直接跳转到将要重定向的地址,如果成功则返回状态码200给客户端:

 

重定向和请求转发的区别

1、从上面的一次重定向和一次转发的过程来看,我们可以得出第一个差别点,就是重定向是两次请求,转发是两次请求,因此转发的速度要快于重定向

2、第二个差别点也很明显,重定向之后地址栏上的地址会发生变化,变化成第二次请求的地址,转发之后地址栏上的地址不会变化,还是第一次请求的地址

网上关于重定向和请求转发的区别的文章有很多,里面的区别点也有很多,但是总结起来无非就是这两点,再多的区别点也都是这两点的扩充,所以,重定向和请求转发的区别理解了这两点的差别就可以了。另外还有一点,不是重定向和请求转发之间的区别,但是值得注意,那就是重定向和请求转发之后的代码都会运行,直到方法结束或者遇到了return语句

 

重定向和请求转发URL参数的解读

我们知道在Java Web中,一个Servlet分别是这么写重定向和转发的代码的:

1、response.sendRedirect("XXX");

2、request.getRequestDispatcher("XXX").forward(request, response);

这个括号里面的参数也是有一定的规则的,我自己的总结如下:

1、重定向的时候,如果参数为"http://xxxxxxxxxx",那么重定向到的是指定的重定向地址,无论该重定向地址是内部的还是外部的

2、如果参数不是"http://xxxxxxxxxx"的样子,而是一般的写法,那么都是Tomcat内部跳转(注意是Tomcat内部跳转而不是项目内部跳转),重定向和请求转发的时候有些区别:

(1)重定向,如果XXX以"/"开头,则表示目标地址为http://ip:port/XXX;如果不以"/"开头,则表示目标地值为http://ip:port/项目名/XXX

(2)请求转发,无论XXX是否以"/"开头,都跳转到http://ip:port/项目名/XXX

 

重定向和请求转发选择的个人建议

页面跳转建议使用重定向,有内部Servlet跳转建议使用转发。

选择重定向作为页面跳转的理由

1、转发请求地址不会变化,这就导致了开发者并不知道实际转发的目标页面是哪个,对于开发者来说这真的是一件糟糕的事,不知道转发的目标页面会在出错的时候给定位问题带来很大的麻烦

2、假如开发者在Servlet中做了耗时间的查询数据库操作,然后放到session里面去,让目标页面拿session显示给用户。此时如果使用转发,那么在刷新这个页面的时候,该Servlet会被再请求一遍,也就是说把查询数据库->设置session这个步骤再做一遍,而实际上这是毫无意义的。重定向则不会有问题,由于重定向之后的是一个.jsp页面,刷新页面无非是让页面重新加载一次罢了。

3、转发只能在站内跳转,重定向可以跳转到任意想要的地址----只要这个地址存在,所以请求页面的时候转发相比重定向也有局限性

因此,虽然转发的速度比重定向快,但是从规避问题的角度而言,页面跳转使用重定向绝对是比转发更好的选择。

选择转发作为内部Servlet跳转的理由

如果代码逻辑是ServletA->ServletB->*.jsp,使用转发,那么这三次操作都在一次请求中,而如果使用重定向,那么客户端将发起三次请求,这真的毫无必要。因此,如果代码逻辑中含有内部的Servlet跳转,使用转发会使一个好的选择。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

请求转发与请求重定向的区别

请求转发: 请求转发,即request.getRequestDispatcher().forward(),是一种服务器的行为,客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的URL地址...
  • u012877472
  • u012877472
  • 2016-03-04 18:48
  • 22208

深入浅出Java 重定向和请求转发的区别

客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的stude...
  • lishehe
  • lishehe
  • 2014-04-08 07:58
  • 53995

重定向和请求转发区别

请求转发与重定向的区别 2011-03-07 22:56 1907人阅读 评论(0) 收藏 举报 浏览器服务器urlwebweb服务jsp 重定向与转发的区别: 1.重定向访问...
  • u010226454
  • u010226454
  • 2014-12-01 17:04
  • 4030

请求包含,转发,重定向的区别

当浏览器请求一个jsp,servlet时,会调用相应的service方法 注意:在同一个servlet中无法   字节流和字符流共存,服务器对于请求只响应一次给浏览器的信息,只会选择一个流一次性输出...
  • jrdgogo
  • jrdgogo
  • 2016-07-24 22:49
  • 1405

servlet转发与重定向基本概念与区别

1.转发与重定向概念介绍1.1转发 浏览器的请求发送给组件1,组件1经过一些处理之后,将request和response对象“传递”给组件2,由组件2继续处理,然后输出响应(当然,也可以继续向其...
  • cuiyaoqiang
  • cuiyaoqiang
  • 2016-07-01 09:29
  • 805

HTTP中的重定向和请求转发的区别

一、调用方式 我们知道,在servlet中调用转发、重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(request, respo...
  • zhangyuan19880606
  • zhangyuan19880606
  • 2016-03-16 10:51
  • 601

重定向和请求转发的区别

一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: ...
  • zhangyuan19880606
  • zhangyuan19880606
  • 2016-04-13 11:30
  • 1725

Struts2中转发和重定向的区别

结果类型中redirect和redirectAction的区别: redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源。redirectAction也是重定向,但它重定向到的...
  • u013067402
  • u013067402
  • 2017-02-01 21:31
  • 2111

请求转发与重定向的区别

重定向与转发的区别: 1.重定向访问服务器两次,转发只访问服务器一次。 2.重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。 3.重定向跳转后必须加上...
  • xybelieve1990
  • xybelieve1990
  • 2015-10-29 09:09
  • 6052

请求转发、重定向、包含的区别

概述Servlet的service()方法是由Servlet容器来调用的,用户不能在一个Servlet对象中直接调用另一个Servlet对象的servie()方法,因为一个Servlet对象无法得到另...
  • SiMaXiaoChen
  • SiMaXiaoChen
  • 2016-05-17 16:00
  • 745
    个人资料
    • 访问:41673次
    • 积分:777
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:112篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论