首页 > 试题广场 >

forward和redirect的区别?

[问答题]
请求转发是服务器行为,请求重定向是客户端行为,
请求转发是一次请求,共用一个request对象,URL路径不发生变化,请求重定向是两次请求,URL路径发生变化,request对象发生变化。
请求转发只可以到一个web环境下,请求重定向可到任何位置。

发表于 2019-06-09 14:43:15 回复(0)
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。

直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL。

间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

直接转发就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;

间接转发就相当于:"A找B借钱,B说没有,让A去找C借"。

发表于 2019-06-18 17:53:55 回复(0)
forward(转发)一次请求,服务端处理两次,request信息共享,地址栏不变。
redirect(重定向)两次请求,服务端处理一次,第一次请求,服务端返回3xx和新地址,客户端发送新地址的请求,地址栏改变。request信息不共享。

发表于 2019-06-10 09:29:33 回复(0)
① 从地址栏显示来说,
    1)forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的地址栏还是原来的地址;
    2)redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新请求那个地址,所以地址栏显示的是新的URL
② 从数据共享来说
    1)forward转发页面和转发后的页面可以共享request里的数据
    2)redirect不能共享数据
③ 从运用地方来说
    1)forward一般用于用户登录的时候,根据角色转发到相应的模块
    2)redirect一般用于用户注销登录的时候返回主页面和跳转到其他的网站等
④ 从效率来说
    1)forward:高
    2)redirect:低
发表于 2019-08-19 22:44:26 回复(0)
forward 是转发,不会刷新地址栏地址,只请求一次数据,但是只能转发给服务器内部对象
redirect 是重定向,重定向会刷新地址栏地址,要请求两次数据,但是无论是服务器内部外部都可以重定向的对象
发表于 2019-07-09 19:35:45 回复(0)
1.从地址栏显示:
  1. forward是服务器内部的重定向,服务器直接访问目标地址的url网址,取出资源,客户端浏览器的网址是不会发生变化的;
  2. redirect是服务器依据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏改变,是新的地址。
2.从数据共享:
  1. 由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或servlet中,即可以数据共享;
  2. redirect不可数据共享。
3.从运用上:
  1. forward一般用于用户登录的时候,根据角色转发到相应的模块;
  2. redirect一般用于用户注销登录时返回主页或跳转其他网站。
4.从效率上:
forward效率高,redirect效率低。
5.本质上:
forword转发是服务器上的行为,而redirect是客户端的行为。
发表于 2019-07-04 19:40:56 回复(0)
forward:转发,一次请求,request共享,地址栏不会变化
redirect:重定向,二次请求,request不共享,地址栏会变化。
发表于 2019-06-29 14:56:24 回复(0)
forward表示转发。即:容器对一个请求没有处理完成,然后转交给另一个组件进行处理。
  • 转发浏览器只发起一次请求。
  • 浏览器地址栏不会改变。
  • 转发是发生在服务器端。
  • 转发只能转发到本站中的位置。
redirect表示重定向。即:某一个组件对浏览器发送的请求不能处理,然后该组件响应一个302状态码,告知浏览器再次发送请求去另外一个组件。
  • 重定向发送两次请求。
  • 浏览器地址栏会改变。
  • 重定向发生在浏览器端。
  • 重定向可以定向到任意地址。
发表于 2019-06-25 20:12:01 回复(0)
forward是服务器请求资源,服务器直接访问目标地址的url,把那个url的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪来的,所以它的地址栏中还是原来的地址。
redirect是服务器根据逻辑,发送一个状态码告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
发表于 2019-06-20 20:20:57 回复(0)
两者的区别总结:

1. 从地址栏显示来说:

1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。

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

2。 从数据共享来说:

1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据

2)redirect不能共享

3. 从运用的地方来说

1)forword 一般用于用户登录的时候,根据角色转发到相应的模块

2) redirect一般用于用户注销登录时返回主页面或者跳转到其他网站

4。 从效率来说:

1)forword效率高,而redirect效率低

5. 从本质来说:

forword转发是服务器上的行为,而redirect重定向是客户端的行为

6. 从请求的次数来说:

forword只有一次请求;而redirect有两次请求,

原文:https://blog.csdn.net/weixin_37766296/article/details/80375106 

发表于 2019-06-08 10:40:47 回复(0)