当我使用JAVA时,我的页面跳转有问题, 如果我使用:
response.sendRedirect("login.jsp")
然后我得到这个网址:http://localhost:8080/login.jsp
但如果我使用
request.getRequestDispathcer("login.jsp").forward(request, response)
然后我得到这个网址:http://localhost:8080/Shopping/login.jsp
(“购物”是我模块的名称。)
有什么区别?
答案 0 :(得分:74)
简单解释差异,
response.sendRedirect("login.jsp");
不预先添加contextpath(指的是捆绑servlet的应用程序/模块)
但是,而
request.getRequestDispathcer("login.jsp").forward(request, response);
将预先添加相应应用程序的contextpath
此外,重定向请求用于将资源重定向到不同的服务器或域。控制任务的传输由容器委托给浏览器。也就是说,重定向将标头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源URL。然后浏览器向给定的URL发起新请求。
转发请求用于转发到进行呼叫的服务器中可用的资源。这种控制转移由容器内部完成,不涉及浏览器/客户端。
答案 1 :(得分:17)
前进
控制可以转发到进行呼叫的服务器内可用的资源。这种控制转移由容器内部完成,不涉及浏览器/客户端。这是forward和sendRedirect之间的主要区别。转发完成后,如果需要,原始请求和响应对象将与其他参数一起传输。
重定向
控制可以重定向到不同服务器或域的资源。控制任务的传输由容器委托给浏览器。也就是说,重定向将标头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源URL。然后浏览器向给定的URL发起新请求。由于它是一个新请求,旧请求和响应对象将丢失。
例如,sendRedirect可以将控制权从http://google.com转移到http://anydomain.com,但转发无法执行此操作。
'session'在前进和重定向中都没有丢失。
要直观地了解forward和sendRedirect之间的区别,请查看浏览器的地址栏, 在转发中,您将看不到转发的地址(因为浏览器不参与) 在重定向中,您可以看到重定向的地址。
答案 2 :(得分:14)
Forward
(ServletRequest请求,ServletResponse响应)和sendRedirect
(String url)之间的区别仅仅是
前进():
forward()
方法在服务器端执行。forward ()
方法。sendRedirect()
方法快。RequestDispatcher
界面中声明。<强>的sendRedirect():强>
sendRedirect()
方法在客户端执行。sendRedirect()
方法在HTTP
下提供,因此只能与HTTP
个客户使用。sendRedirect()
方法较慢,因为在创建新请求时,旧请求对象将丢失。HttpServletResponse
声明。答案 3 :(得分:5)
1.redirect将请求从服务器返回浏览器,然后从浏览器向服务器重新发送请求。
2.forward将请求发送到另一个servlet(servlet到servlet)。
答案 4 :(得分:2)
重定向和请求调度程序是将一个页面移动到另一个页面的两种不同方法。 如果我们使用重定向到新页面,实际上会从客户端本身向新页面发生新请求。 所以我们可以看到URL的变化。 由于重定向是一个新请求,因此旧请求值不可用。