Java response.sendRedirect()和request.getRequestDispatcher().forward(请求,响应)之间的区别是什么
当我使用JAVA时,我的页面跳转出现问题, 如果我使用:Java response.sendRedirect()和request.getRequestDispatcher().forward(请求,响应)之间的区别是什么,java,jsp,request,response,forward,Java,Jsp,Request,Response,Forward,当我使用JAVA时,我的页面跳转出现问题, 如果我使用: response.sendRedirect("login.jsp") 然后我得到这个url:http://localhost:8080/login.jsp 但是如果我使用 request.getRequestDispathcer("login.jsp").forward(request, response) 然后我得到这个url:http://localhost:8080/Shopping/login.jsp(“购物”是我的模块名称)
response.sendRedirect("login.jsp")
然后我得到这个url:http://localhost:8080/login.jsp
但是如果我使用
request.getRequestDispathcer("login.jsp").forward(request, response)
然后我得到这个url:http://localhost:8080/Shopping/login.jsp
(“购物”是我的模块名称)
区别是什么?简单地解释一下区别
response.sendRedirect("login.jsp");
不在contextpath前加前缀(指绑定servlet的应用程序/模块)
但是,鉴于
request.getRequestDispathcer("login.jsp").forward(request, response);
将在相应应用程序的上下文路径前加前缀
此外,重定向请求用于将资源重定向到不同的服务器或域。此控制权转移任务由容器委派给浏览器。也就是说,重定向将头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源url。然后浏览器向给定的url发起新请求
转发请求用于转发到发出呼叫的服务器内的可用资源。此控制权转移由容器内部完成,不涉及浏览器/客户端。1.重定向从服务器将请求返回到浏览器,然后从浏览器将请求重新发送到服务器
2.将请求转发到另一个servlet(servlet到servlet)。重定向和请求分派器是从一个页面移动到另一个页面的两种不同方法。 如果我们使用重定向到一个新页面,实际上一个新的请求正在从客户端自身发生到新页面。 因此,我们可以看到URL中的更改。 由于重定向是一个新请求,因此旧请求值在此不可用。forward 控件可以转发到进行调用的服务器中可用的资源。控制权的转移由容器内部完成,不涉及浏览器/客户端。这是forward和sendRedirect之间的主要区别。转发完成后,原始请求和响应对象将随附加参数一起传输(如果需要) 重定向 控件可以重定向到不同服务器或域的资源。此控制权转移任务由容器委派给浏览器。也就是说,重定向将头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源url。然后浏览器向给定的url发起新请求。因为它是一个新的请求,所以旧的请求和响应对象将丢失 例如,sendRedirect可以将控制权从转移到,但forward不能这样做 “会话”在转发和重定向中都不会丢失 要直观地感受forward和sendRedirect之间的差异,请查看浏览器的地址栏, 在“转发”中,您将看不到转发的地址(因为不涉及浏览器)
在重定向中,您可以看到重定向的地址。只是
转发
(ServletRequest请求,ServletResponse响应)和发送重定向
(字符串url)之间的区别是
forward():
forward()
方法在服务器端执行forward()
方法是由servlet容器提供的RequestDispatcher
接口中声明sendRedirect()
方法在客户端执行sendRedirect()
方法在HTTP
下提供,因此它只能用于HTTP
客户端sendRedirect()
方法速度较慢,因为创建新请求时,旧请求对象丢失HttpServletResponse
中声明谢谢!这对我帮助很大!你能告诉我“prepend the contextpath”是什么意思吗?它指的是
login.jsp
绑定到的Web应用程序根路径,如果重定向
请求返回到浏览器并显示在url
中,这似乎你提到了url
visa反之亦然。请编辑这个问题。