请求转发与重定向

一、介绍

设想这样一种情况,在我们登录某个网站时,登录页面会要求我们输入账号密码以及其他信息,当我们点击登录按钮时,浏览器会将我们的信息以及请求的一些信息发送到服务器端,在服务器端,我们可以从request中拿到这些信息,接下来需要对这些信息进行处理,我们会用到不同的web组件处理他们,比如我会在一个web组件1中将你的信息和数据库中的信息进行比对,而在另一个web组件2中判断你是管理员账号还是普通用户账号,这个时候,我们需要将信息送到两个不同的组件中,那么怎么做呢?

解决方法一:将存在一个request中的信息从web组件1转发到web组件2中,这就是请求转发(Forward)。

解决方法二:web组件1处理完请求后返回一个response响应,这个响应中包含了web组件2资源的url,告诉浏览器,让你重新向web组件2发送一个请求。这就是重定向(sendRedirect)。

二、实现

转发(利用request转发请求):

request.getRequestDispatcher("/要跳转的地址").forward(request, response);

重定向(利用response返回要重定向的组件的url):

response.sendRedirect("/要跳转的地址");

三、对比

转发和请求的特点和区别:

  1. 转发
  • 转发是服务器端行为
  • 转发整个过程浏览器端只做了一次请求
  • 转发浏览器地址不变
  • 在转发过程中request域中的数据不会丢失
  • 转发只能将请求转发给同一个web应用中的组件
  1. 重定向
  • 重定向是客户端行为
  • 重定向是浏览器做了至少两次的访问请求
  • 重定向浏览器地址改变
  • 重定向两次跳转之间request域中信息数据会丢失(新的request会替代旧request但是不会继承旧request中的数据)
  • 重定向可以指向任何资源,包括当前应用程序中的其他资源、同一站点上其他应用程序中的资源以及其他站点的资源

四、总结

转发和重定向是实现页面跳转的两种方式,他们也有不同的优缺点和应用场景,比如,当两个web组件之间需要传递数据时,最好选择用请求转发(forward),而在做增、删、改时最好用重定向(查用转发),因为不用重定向,每次刷新页面就相当于一次新的请求,就可能做额外的操作,导致数据不对。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值