标签:web 重定向 转发 request 跳转 forward
什么是转发与重定向
日常我们使用浏览器最常用的就是在不同的页面中跳转,而在Servlet
中的页面跳转使用的就是转发和重定向,也可以简单的认为转发和重定向就是实现页面的跳转,但是肯定是有区别的
转发
request.getRequestDispatcher("xxx.jsp").forward(request,response);
这个例子就是一个简单携带request和response的转发,从这句代码分析我们可以得知,这个转发需要request对象
,我们加入源码查看.getRequestDispatcher(String path)
这个方法的返回值是一个RequestDispatcher对象,百度得知这个类是一个Web资源包装器,查看源码发现有两个方法forward()
和include()
(那肯定是主要介绍forward()方法哈,有兴趣可以自行百度两个方法的详解)forward()
用来转发request和response给指定的web资源,看到这里应该对这个代码有了一点理解了,首先将web资源路径传递到RequestDispatcher对象中,再调用forward方法将request和response一起传递给指定的web资源,实现携带请求转发
重定向
response.sendRedirect("https://www.baidu.com");
实现简单的重定向,本质也是跳转
共同点
本质都是实现页面的跳转
不同点
- 地址栏
- 转发的地址栏不会改变由于转发是在服务端进行的,浏览器并不知道,所以只会显示浏览器请求的页面地址
- 重定向的地址栏会改变,跳转发送在客户端
- 请求次数
- 转发没有产生新的请求,是同一个请求
- 重定向产生了新的请求
- request域
- 转发由于是同一个请求,所以request域不变
- 重定向request域发生改变
- 跳转范围
- 转发只限制在当前web项目中
- 重定向没有限制,任何web资源(包括网络上的web资源)
- 跳转方式
- 转发使用
RequestDispatcher
对象的forward()
- 重定向用
response.sendRedirect()
- 转发使用
转发与重定向的浅层原理
转发原理
重定向原理
-
什么时候用转发,什么时候用重定向?
当我们需要携带数据存进request域中保存,跳转界面读取request域中的数据,这个时候我们需要用到转发。
不需要携带数据,只进行请求处理并不暴露Servlet进行跳转,可以用重定向
判断什么时候用转发还是重定向可以从以下几点判断
- request域
- 地址栏
当然这只是一个参考,具体业务具体分析,还需要注意的是无论是转发还是重定向,后续代码还是会运行,并不会跳转而停止,除非手动return
标签:web,重定向,转发,request,跳转,forward 来源: https://www.cnblogs.com/cndada/p/14621515.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。