一尘不染

RequestDispatcher.forward()与HttpServletResponse.sendRedirect()

jsp

forward()和之间的概念区别是sendRedirect()什么?


阅读 333

收藏
2020-06-08

共1个答案

一尘不染

requestDispatcher-forward()方法

  1. 当我们使用该forward方法时,请求将被转移到同一服务器内的另一个资源以进行进一步处理。

  2. 在的情况下forward,Web容器在内部处理所有处理,并且不涉及客户端或浏览器。

3.
在对象forward上调用when时requestDispatcher,我们传递了请求和响应对象,因此旧的请求对象存在于将处理请求的新资源上。

  1. 从视觉上看,我们看不到转发的地址,它是透明的。

  2. 使用该forward()方法比sendRedirect

6.
当我们使用正向重定向时,并且我们想在新资源中使用相同的数据时,我们可以使用,request.setAttribute()因为我们有一个可用的请求对象。

发送重定向

  1. 在的情况下sendRedirect,请求将转移到另一个资源,另一个域或另一个服务器以进行进一步处理。

  2. 当您使用时sendRedirect,容器会将请求传输到客户端或浏览器,因此,在sendRedirect方法内部给出的URL
    作为对客户端的新请求可见。

  3. 如果发生sendRedirect呼叫,则旧的请求和响应对象将丢失,因为浏览器将其视为新请求。

  4. 在地址栏中,我们可以看到新的重定向地址。这不是透明的。

  5. sendRedirect速度较慢,因为需要一个额外的往返行程,因为创建了一个全新的请求,而旧的请求对象丢失了。需要两个浏览器请求。

  6. 但是在中sendRedirect,如果我们要对新资源使用相同的数据,则必须将数据存储在会话中或与URL一起传递。

哪个好?

它取决于哪种方法更有用的方案。

如果您希望将控制权转移到新服务器或上下文中,并且将其视为全新任务,那么我们去寻求sendRedirect。通常,如果可以在重新加载浏览器后安全地重复该操作并且不会影响结果,则应使用转发。

资源

2020-06-08