首先感谢原作者的辛辛苦苦编写的文章,可以帮助一个正在学习的小白。
目前没有自己心得,只是个知识的搬运工。防止原作者删除,我就复制下,存档以便后观看。
原作者1:liubin5620 原作者文章
原作者2:发呆程序员 原作者文章
自我总结简易版:
- 重定向的特点:redirect (浏览器响应头:302,即重定向)
- 地址栏发生变化
- 重定向可以访问其他站点(服务器)的资源
- 重定向是两次请求。不能使用request对象来共享数据
- 请求来源不同:客户端浏览器发起,需要加虚拟目录,动态获取request.getContextPath()
- 转发的特点:forward
- 转发地址栏路径不变
- 转发只能访问当前服务器下的资源
- 转发是一次请求,可以使用request对象来共享数据
4.请求来源:服务器内部使用,不需要加虚拟目录。
重定向:
//动态获取虚拟目录
String contextPath = request.getContextPath();
//简单的重定向方法
response.sendRedirect(contextPath+"/被@WebServlet注解标注的类头上的请求内容");
转发:
request.getRequestDispatcher("/@WebServlet注解标注的类头上的请求内容").forward(request,response);
拓展: //设置状态码为302
response.setStatus(302);
//2.设置响应头location
response.setHeader(“location”,"/day15/responseDemo2");*/
作者1:
转发和重定向区别详解
作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。
1、RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。、
2、调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
3、HttpServletRes