forward与redirect请求的区别原理

这个问题在面试的时候经常会被问到,主要是考察下面的三个方面的只是。

  • 请求转发的含义;
  • Forward转发请求的原理;
  • Redirect转发请求的原理。

 Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。

直接转发(Forward)方式,客户端和浏览器只发出一次请求,servlet ,html,jsp或其他信息资源,由第二个信息资源响应该请求,在请求对象request 中,保存的对象对于每个信息资源都是共享的。

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

下面是解析两个的原理:

间接转发(redirect):有时候也叫重定向,它一般用于避免用户的非正常访问。例如:在用户没有登录的情况下访问后台资源,servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用request对象的SendRedirect()方法,告诉浏览器重定向访问制订的URL。

比如有两servlet

1浏览器向Servlet1发出访问请求;

2Servlet1 调用sendRedirect()方法,将浏览器重定向到Servlet2;

3浏览器向Serlvet2发出请求;

4最终由Servlet2做出响应。

直接转发(Forward):

直接转发的方式使用的比较多一些,一般说的请求转发指的是直接转发的方式,Web 应用程序大多会有一个Controller,由controller来控制请求应该转发给那个信息资源,然后由这些信息资源进行处理请求。处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式。javax.serlvet.RequestDispatcher接口是请求转发器必须实现的接口,由Web容器为Servlet提供实现该接口的对象,通过调用该接口的forward()方法到达请求转发的目的

1:浏览器向Servlet1发出访问请求;

2:Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;

3:最终由Servlet2做出响应。

面试可能会问:直接转发跟间接转发的的原理及区别是什么?

答:forward和redirect 代表着两种不同的请求转发方式,对应到代码里,分别RequestDispatcher类的forward()方法和HttpServletRequest类的sendredirect()方法。

对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。他本质上是两次Http请求

,对应着两个request对象。

对于直接方式,客户端浏览器只发出一次请求,servlet把请求转发给Servlet,html,jsp或其他信息资源,由第2个信息资源响应该请求,两个信息资源是共享一个request对象的。

猜你喜欢

转载自blog.csdn.net/LQzhang_11/article/details/81416390