重定向和转发的区别
1.概念
重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。
2.JSP跳转方式
方式1 response.sendRedirect(“路径”);
public class localServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("转发到local2Servlet");
resp.sendRedirect("javaWebDemo/loc2Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
注:
1.JSP跳转后浏览器地址发生变化
2.路径可以是一个绝对的URL,也可以是相对的URL。
3.其底层原理(如代码所示)
resp.setStatus(302);
resp.setHeader("location","/javaWebDemo/loc2Servlet");
通过将Http响应头进行设置的方式。
方式2 RequestDispatcher.forward()
public class localServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher rd =request.getRequestDispatcher("loc2Servlet");
rd.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
注:
1.forward()后面路径中无法带参数传递。
2.转发后浏览器地址为第一次访问的地址,并没有改变。
3.转发的路径必须是同一个web容器下的地址或者是web.xml设置的映射路径,中间传递的是自己的容器内的request 请求。因为是服务器内部传递,转发路径可写为:/请求路径
4.可将请求发送到任意一个服务器资源
类别 | 概念 | 共享数据 | 应用 |
Redirect | URL重新定向:可以是任意的URL | 不能共享request里面的数据 | 一般用于用户注销登录时返回主页面和跳转到其它的网站等等 |
Forward | 页面的转发:只能是同一个Web应用程序的其他Web组件 | 转发页面和转发到的页面可以共性request里面的数据 | 一般用于用户登录的时候根据角色转发到相应的模块等等 |
总结
请求转发和重定向的区别:
1.重定向发送两次请求,请求转发一次请求。
2.重定向地址栏发生变化,请求转发没变化。
3.重定向是浏览器发送,请求转发是服务器内部转发。
例如,重定向的路径:/shopping(项目名)/msg
请求转发的路径:/mssg
4.重定向不存在request域对象,请求转发可使用request域对象。
5.重定向是response的方法,请求转发是request方法。
6.重定向可请求站外资源,请求转发不可以。