JavaWeb——重定向和转发到底有什么区别(重点!!!)

相信大家在刚刚接触到,Javaweb的时候都会对转发和重定向有着或多或少的迷惑和误解,下面我就通过这篇文章来讲解一下转发与重定向的区别。

大家都知道在servlet中页面跳转有两种实现方法,一种是转发一种是重定向,那么这两种方法都分别有什么特点,两者又有什么区别呢,接下来我将在文章中一一介绍。

一.转发

什么叫转发?

req.getRequestDispatcher("/customer.jsp").forward(req, resp);
这句代码就可实现转发的操作。首先req.getRequestDispatcher("/customer.jsp") 获得了一个转发器对象,然后再通过 .forward(req, resp) 方法来把之前的request和response对象转发过去,这样原来通过setAttribute存在request中的值就不会丢失了。

转发是如何实现的嘞?

转发操作,首先从客户端发送一个请求到服务器中,找到当前组件(servlet1),把组件中的request和response对象通过 .forowrd 方法发送到目标组件(servlet2)中,最后再由目标组件(servlet2)给予客户端以响应。其中最重要的部分从servlet1到servlet2转发的全过程都是发生在服务器中的。
转发

转发的特点

  • URL不变,显示的还是上一个URL
  • 只发送一次请求,跳转是在服务器中实现的
  • request对象中的值不丢失
  • 只能在本web域中进行跳转

二.重定向

什么叫重定向?

resp.sendRedirect("/login.jsp"); 可以实现重定向的操作,重定向不能读取之前request中保存的参数,只能实现页面的跳转,不过可以实现跨容器跳转,即可以访问不同的javaWeb。

重定向是如何实现的?

首先先由客户端发送一个请求到当前组件(servlet1)中,之后由 resp.sendRedirect("/login.jsp"); 给予客户端一个包含目标组件地址的响应,再由客户端发送一个请求给目标组件(servlet2),目标组件接收到请求后,给出响应完成页面跳转。在整个过程中浏览器至少完成两次请求。
重定向

重定向的特点:

  • 会显示新的URL
  • 发送两次请求
  • request对象中的值会丢失
  • 可以进行跨域访问

三.转发与重定向的对比

1.转发与重定向的路径问题

  • 对于相对路径来说两者并没有什么区别
  • 对于绝对路径两者则是存在着不小的差别。重定向中/指的Tomcat的根目录,写绝对路径应该写成"/当前Web程序根名称/资源名" 。如"/customerMangement/login.jsp","/customerMangement/servlet/LoginServlet"
    转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序。绝对路径写法就是"/login.jsp"或"/servlet/LoginServlet"。
  • 以上要注意是区分是从服务器外的请求,还在是内部转发,从服务器外的请求,从Tomcat的根写起;服务器内部的转发/写起指的就是当前Web的根目录。

2.转发与重定向的区别

  • request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。

  • response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
    所以转发中数据的存取可以用request作用域:request.setAttribute(),
    request.getAttribute(),重定向是取不到request中的数据的。只能用session。

区别转发重定向
地址栏不会发生变化会发生变化
请求次数1次2次
request对象中的数据不会丢失会丢失
跳转位置服务器中客户端中
访问域web容器内可以跨域跳转

以上就是今天所要介绍的内容,谢谢观看,如果有帮助请您点个赞,谢谢!

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值