response.sendRedirect()和request.getRequestDispatcher()之间有什么区别.forward(request,response)

rog*_*ger 48 java jsp response request forward

当我使用JAVA时,我的页面跳转有问题,如果我使用:

response.sendRedirect("login.jsp")
Run Code Online (Sandbox Code Playgroud)

然后我得到这个网址: http://localhost:8080/login.jsp

但是,如果我使用

request.getRequestDispathcer("login.jsp").forward(request, response)
Run Code Online (Sandbox Code Playgroud)

然后我得到这个网址:( http://localhost:8080/Shopping/login.jsp"购物"是我模块的名称).

有什么不同?

Kee*_*san 75

为了简单解释差异,

  response.sendRedirect("login.jsp");
Run Code Online (Sandbox Code Playgroud)

不预先添加contextpath(指的是捆绑servlet的应用程序/模块)

但是,而

 request.getRequestDispathcer("login.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)

将添加相应应用程序的contextpath

此外,Redirect请求用于将资源重定向到不同的服务器或域.控制任务的传输由容器委托给浏览器.也就是说,重定向将标头发送回浏览器/客户端.此标头包含要由浏览器重定向的资源URL.然后浏览器向给定的URL发起新请求.

转发请求用于转发到进行呼叫的服务器内可用的资源.这种控制转移由容器内部完成,不涉及浏览器/客户端.


Ani*_*Rai 16

向前

控制可以转发到进行呼叫的服务器内可用的资源.这种控制转移由容器内部完成,不涉及浏览器/客户端.这是forward和sendRedirect之间的主要区别.转发完成后,如果需要,原始请求和响应对象将与其他参数一起传输.

重定向

控制可以重定向到不同服务器或域的资源.控制任务的传输由容器委托给浏览器.也就是说,重定向将标头发送回浏览器/客户端.此标头包含要由浏览器重定向的资源URL.然后浏览器向给定的URL发起新请求.由于它是一个新请求,旧请求和响应对象将丢失.

例如,sendRedirect可以将控制权从http://google.com转移到http://anydomain.com,但转发无法执行此操作.

"会话"在前进和重定向中都不会丢失.

要直观地看到forward和sendRedirect之间的区别,请查看浏览器的地址栏,在转发中,您将看不到转发的地址(因为浏览器不涉及)重定向,您可以看到重定向的地址.


Mau*_*iya 15

简单地说Forward(ServletRequest请求,ServletResponse响应)和sendRedirect(String url)之间的区别是

向前():

  1. forward()方法在服务器端执行.
  2. 请求将转移到同一服务器内的其他资源.
  3. 它不依赖于客户端的请求协议,因为该forward ()方法由servlet容器提供.
  4. 请求由目标资源共享.
  5. 此方法仅消耗一个调用.
  6. 它可以在服务器中使用.
  7. 我们看不到转发的消息,它是透明的.
  8. forward()方法比sendRedirect()方法快.
  9. 它在RequestDispatcher接口中声明.

的sendRedirect():

  1. sendRedirect()方法在客户端执行.
  2. 请求将转移到其他资源到不同的服务器.
  3. sendRedirect()方法是在下面提供的,HTTP它只能用于HTTP客户端.
  4. 为目标资源创建新请求.
  5. 消耗了两个请求和响应调用.
  6. 它可以在服务器内外使用.
  7. 我们可以看到重定向的地址,它不是透明的.
  8. sendRedirect()方法较慢,因为在创建新请求时,旧请求对象将丢失.
  9. 它在宣布HttpServletResponse.


spr*_*ite 5

1.redirect从服务器返回请求到浏览器,然后从浏览器重新发送请求到服务器.

2.forward将请求发送到另一个servlet(servlet到servlet).