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