重定向与转发的区别以及实现_重定向与转发
大家好,又见面了,我是你们的朋友全栈君。
一、转发和重定向的区别
request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
所以转发中数据的存取可以用request作用域:request.setAttribute(), request.getAttribute()
,重定向是取不到request中的数据的。只能用session。
forward()更加高效,在可以满足需要时,尽量使用RequestDispatcher.forward()方法。
RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。 sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。
重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。
二、转发和重定向总结
1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();
2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
3、转发是服务器行为,重定向是客户端行为;
4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。
六、转发和重定向的选择
1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。
2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。
3、另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。
参考链接:https://www.cnblogs.com/summary-2017/p/10661738.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/216261.html原文链接:https://javaforall.cn
相关文章
- linux 管道符重定向
- 3招解决python程序输出重定向时的延迟问题
- golang http.Client 用户自定义重定向策略
- Java-Response实现重定向
- 新思路解决网站301重定向
- 利于SEO的nginx服务器301重定向规则
- 【Linux】文件操作/文件描述符/重定向/缓冲区
- htaccess 301重定向跳转代码大全(全站跳转/部分内页跳转)
- dotnet core 不自动从 https 到 http 的 302 重定向
- IIS 7中如何实现http重定向https
- Linux输入输出重定向:实现更有效的操作(linux输入输出重定向)
- Oracle数据库重定向: 从安全性中获益(oracle重定向)
- Servlet重定向
- response.sendRedirect()实现重定向(页面跳转)
- Apache服务器实现301重定向规则
- Linux重定向命令:实现输入输出利器(如何linux重定向命令)
- 25个字文章标题:掌握Linux重定向命令:从入门到精通(linux重定向命令)
- Linux 重定向:掌握管道与重定向技巧(linux中重定向)
- Redis支持的重定向(redis+重定向)
- htaccess将所有请求重定向到某个URL地址的规则
- .htaccess顶级域名重定向绑定空间目录
- python实现socket端口重定向示例