转发和重定向

forward:是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect:就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取

所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
调用方法:
Servlet中

request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp

加粗样式

不同点

 1.语句不同

转发: request.getRequestDispatcher("/login2/login.jsp").forward(request,response);
重定向 response.sendRedirect("/login2/success.jsp");

 2.跳转后地址栏路径不同

转发:跳转之前的地址
重定向:跳转之后的地址 success.jsp

 3.是否可以共享同一个request的数据

转发:可以共享
重定向:无法共享

 4.原理不同

转发:110 呼叫转移
重定向:114 忘记带手机

 5.效率的高低

转发的效率高

 6.跳转的范围不同

转发:同一个项目(最大也就是当前服务器)
重定向:不同的服务器

 7.路径的不同

转发
绝对路径:不支持
根路径: 不写上下文路径 因为只能在当前项目中跳转 /代表当前项目的根目录 /myservlet/
相对路径:只能相对于当前文件自身,不能相对于base基准路径
重定向
绝对路径:支持 可以跳转到互联网的任意位置
根路径:需要写上下文路径 ,可以跳转到当前服务器的所有项目
相对路径:只能相对于当前文件自身,不能相对于base基准路径
到底使用哪种路径
1.如果要跳转到其他服务器,只能使用绝对路径,并且只能使用重定向
2.如果要跳转到当前服务器的其他项目,建议使用根路径,并且只能使用重定向
3.如果要跳转到当前服务器的当前项目,建议使用根路径。根据简单
转发:/admin/login.jsp /代表当前项目的根目录
重定向:/myservlet/admin/success.jsp /代表当前服务器的根目录
request.getContextPath()+"/admin/success.jsp" 建议动态获取上下文路径

转发和重定向的选择

1.某些情况下,无可选择

希望前后两个组件共享request数据,使用转发
跳转到同一个应用的WEB-INF目录下只能用转发
跳转到不同的应用只能使用重定向
使用Cookie存储数据需要使用重定向

2.跳转到同一个应用,哪种方式更好

使用转发效率高,尽量使用转发
使用转发需要解决重复提交问题,尤其是添加操作
注销之后一般用重定向
连续表单页面之间建议使用重定向,避免属性冲突

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值