javaWEB请求转发和重定向

JavaWeb——请求转发与请求重定向
  1、概念
   请求转发:服务器行为,request.getRequestDispatcher(URL地址).forward(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。
   请求重定向:客户端行为,response.sendRedirect(URL地址),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
  2、工作流程(假设只请求一次<转发/重定向>)

请求转发
    ①客户端发送请求数据给服务器
    ②服务器接收请求数据并调用第一个Servlet处理逻辑
    ③第一个Servlet处理完数据后将数据在服务器内部传递给下一个Servlet
    ④第二个servlet处理完数据后调用forward()方法将最终处理结果返回给客户端

在这里插入图片描述

请求重定向:
    ①客户端发送请求数据给服务器
    ②服务器接收请求数据并调用一个Servlet处理逻辑
    ③服务器调用sendRedirect()方法将处理结果放进HTTP响应头中并返回给客户端
    ④客户端收到响应结果后,从HTTP响应头中取得相关信息,再次发送请求数据给服务器。

在这里插入图片描述

3、路径问题
   3.1.若URL地址使用相对路径,转发和重定向中没有区别。
   3.2.若URL地址使用绝对路径
    3.2.1.请求转发:由于转发是服务器内部行为,此时绝对路径开头的"/“指的是当前Web程序的根目录。因此若使用转发,绝对路径的写法应为”/资源名"。
     “/login.jsp"或者”/servlet/LoginServlet"

3.2.2.请求重定向:由于重定向是服务器向客户端发送一个请求头信息,客户端再请求一次服务器,此时绝对路径开头的"/“指的是Tomcat服务器的根目录,因此若使用重定向,绝对路径的写法应为”/当前Web程序名称/资源名"。
     “/WebModule/login.jsp"或者”/WebModule/servlet/LoginServlet"

4、转发与重定向的区别
   4.1.URL地址问题
    请求转发不会改变地址栏的URL地址
    请求重定向会改变地址栏的URL地址
   4.2.数据共享问题
    请求转发的数据处理是在同一次请求中,可以使用request对象实现数据共享。
    请求重定向是向服务器发送了两次请求,不能使用request对象实现数据共享,想要让两次请求数据共享必须使用session对象。
   4.3.效率问题
    请求转发的效率高于重定向(服务器内部的页面跳转 > 再次向服务器发送请求调用servlet完成页面跳转)
   4.4.本质区别
    请求转发是属于请求对象的方法(调用HttpServletRequest对象的方法)
    请求重定向是属于响应对象的方法(调用HttpServletResponse对象的方法)
  5、使用时机
   请求转发会在每次刷新时会重新向服务器发送请求,每刷新一次,就重新发送一次请求。对于表单提交来讲,若提交表单后再重新加载页面,使用转发可能会导致信息的重复提交,因此,表单提交需要使用请求重定向
   请求转发只能访问当前服务器中的某些页面,因此若要访问其他服务器上的页面,需要使用请求重定向
————————————————
版权声明:本文为CSDN博主「Ambition小啊潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43490440/article/details/100920817

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值