转发和重定向的区别:JSP/Servlet转发和重定向的区别

        尽管HttpServletResponse.sendRedirect 思路方法和RequestDispatcher.forward 思路方法都可以让浏览器获得另外个URL所指向资源但两者内部运行机制有着很大区别

        下面是HttpServletResponse.sendRedirect 思路方法实现请求重定向和RequestDispatcher.forward 思路方法实现请求转发整理总结比较:
        (1)RequestDispatcher.forward 思路方法只能将请求转发给同个WEB应用中组件;而HttpServletResponse.sendRedirect 思路方法不仅可以重定向到当前应用其他资源还可以重定向到同个站点上其他应用资源甚至是使用绝对URL重定向到其他站点资源如果传递给HttpServletResponse.sendRedirect 思路方法相对URL以“/”开头它是相对于整个WEB站点根目录;如果创建RequestDispatcher 对象时指定相对URL以“/”开头它是相对于当前WEB应用根目录
        (2)HttpServletResponse.sendRedirect 思路方法重定向访问过程结束后浏览器地址栏中显示URL会发生改变URL地址变成重定向目标URL;而RequestDispatcher.forward 思路方法请求转发过程结束后浏览器地址栏保持URL地址不变
        (3)HttpServletResponse.sendRedirect 思路方法对浏览器请求直接作出响应响应结果就是告诉浏览器去重新发出对另外个URL访问请求
        举个例子:重定向过程好比有个绰号叫“浏览器”人写信找张 3借钱张 3回信说没有钱让“浏览器”去找李 4借并将李 4现在通信地址告诉给了“浏览器”于是“浏览器”又按张 3提供通信地址给李 4写信借钱李 4收到信后就把钱汇给了“浏览器”可见“浏览器”共发出了两封信和收到了两次回复“浏览器”也知道他借到钱出自李 4的手 RequestDispatcher.forward 思路方法在服务器端内部将请求转发给另外个资源浏览器只知道发出了请求并得到了响应结果并不知道在服务器内部发生了转发行为这个过程好比绰号叫“浏览器”人写信找张 3借钱张 3没有钱于是张 3找李 4借了些钱甚至还可以加上自己些钱然后再将这些钱汇给了“浏览器”可见“浏览器”只发出了封信和收到了次回复他只知道从张 3那里借到了钱并不知道有部分钱出自李 4的手
        (4)RequestDispatcher.forward 思路方法者和被者的间共享相同request 对象和response 对象它们属于同个访问请求和响应过程;而HttpServletResponse.sendRedirect 思路方法者和被者使用各自request 对象和response 对象它们属于两个独立访问请求和响应过程
        对于同个WEB应用内部资源的间跳转特别是跳转的前要对请求进行些前期预处理并要使用HttpServletRequest.Attribute 思路方法传递预处理结果那就应该使用RequestDispatcher.forward 思路方法
        区别WEB应用的间重定向特别是要重定向到另外个WEB站点上资源情况都应该使HttpServletResponse.sendRedirect 思路方法
        (5)无论是RequestDispatcher.forward 思路方法还是HttpServletResponse.sendRedirect 思路方法它们的前都不能有内容已经被实际输出到了客户端如果缓冲区中已经有了些内容这些内容将被从缓冲区中清除

TAG: jsp JSP servlet Servlet

Tags:  jsp和servlet区别 jsp与servlet的区别 jsp和servlet的区别 转发和重定向的区别

延伸阅读

最新评论

发表评论