重定向和转发的小知识点

1.两者区别

重定向是在客户端发生的,URL地址栏变化,可以定向到任何服务器的资源;
转发是发生在服务器内部的,浏览器地址栏不变化,只能转发本服务器的资源。

2.使用方法

重定向使用:response.sendRedirect(url);
转发时使用:request.getRequestDispatcher(url).forward(request,response);

3.禁用Cookie时,如何使用Session

session虽然是服务器端的,但是在浏览器再次访问其他servlet时,服务器如何知道是否为同一客户端?其实,在浏览器访问session资源后,服务器会发送一个set-cookie响应,此cookie不是存在本地的,存在浏览器内部,所以说session是基于cookie的。但是当浏览器禁用所有cookie时,cookie存不进去,服务器如何分辨客户机呢?
使用URL重写,即将session产生的id设置在URL上,浏览器每次访问,都带着此后缀,所以无论是否禁用cookie,都能访问同一session资源,方法如下:

重定向URL使用

String url = response.encodeRedirectURL(url);
response.sendRedirect(url);

非重定向URL使用

String url = response.encodeURL(url);
response.getRequestDispatcher(url).forward();
表单action和超链接也同样适用

4.其他区别

a. RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。
b. 如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
c. 调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
d. HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
e. RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载:http://www.cnblogs.com/shenliang123/archive/2011/10/27...
    Kitlen阅读 567评论 0 1
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,425评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 等W小姐忙完,从一堆材料中探出头来,慵懒的伸了个腰,才惊觉天早已经黑透了。彼时她才想起L先森应该早已经抵达,拿起手...
    啦啦小巫阅读 524评论 6 3
  • 酒肉推一推 少几分滋味 朋友很少回 联系总是累 公园里一个人走 来来回回 小孩追着风筝飞 咧开了嘴 风从树隙里溜出...
    郝家长阅读 557评论 3 8