Web servlet重定向和转发请求的区别(超详细!!)

本文详细比较了重定向和请求转发在Web开发中的工作原理,包括发送请求次数、URL变化、是否涉及浏览器、是否使用request域对象、方法实现以及能否请求站外资源等方面,并提供了代码示例加以说明。
摘要由CSDN通过智能技术生成

重定向是客户端(也就是浏览器)通过一个路径访问服务器,服务器通知浏览器去访问另一个地址,浏览器再发出另一个地址的请求。

转发请求是客户端通过一个路径访问服务器,服务器内部转发给另一个地址。

通俗的讲:A相当于客户端(浏览器),B和C相当于服务器

那么重定向就是:
A向B说:B可以借我点钱吗?

B回复:我没有,你找C去借钱。

A向C说:好的。C能借我点钱吗?

C回复:借给你。

转发请求是:

A向B说:B可以借我点钱吗?

B向C说:我没钱,你借A点

C直接回复A:借给你

通过上面两个例子,可以看出:重定向中,浏览器对服务器发出了两次请求,而转发请求中,由于服务器内部处理了转发(B向C说),所以浏览器对服务器只发出了一次请求。

具体图例:

而他们的代码是怎么实现的呢?
重定向

第一种写法:用response的方法sendRedirect来设置重定向,其中的参数

response.sendRedirect(request.getContextPath()+"/a");
*request.getContextPath()指的是项目的绝对路径
*+''表示通知回去让浏览去找加上后的新的绝对路径的。

例如重定向去找'/a',新的路径就应该为:

也就是去寻找这个servlet

@WebServlet(name = "该servlet名字",value = "/a")
*name:表示给当前servlet起一个名字
* urlPatterns:路径匹配;当浏览器上面访问的路径和路径匹配的时候,访问当前servlet

可以在检查(F12/Fn+F12)中Network中看到,服务器请求了两次,并且第一次的状态码为302

第二种写法:

  response.setStatus(302);
  response.setHeader("Location",request.getContextPath() +"/b");

请求转发代码的实现:

同样是服务器要转发到'/a'

 request.getRequestDispatcher("a").forward(request,response);

*首先请求转发用的是resquest,用getRequestDispatcher的方法。

*这里的路径是相对路径,并且我们可以看到有(request,response)。也就是请求转发他可以携带参数

参数的携带:用setAttribute(键值对形式)

request.setAttribute("name","zs");

并且我们可以看到,只请求了一次。

总结:重定向和转发请求的区别:

    1. 重定向发送两次请求,请求转发一次请求
    
    2.重定向地址栏发生改表,请求转发不变
    
    3.重定向是从浏览器发送,请求转发是服务器内部
    
    4.重定向不存在request域对象,请求转发可以使用request域对象(能携带参数)


    5. 重定向是response的方法,请求转发是request的方法
    
    6.重定向可以请求站外资源,请求转发不可以  (重定向写的是绝对路径,例如可以写站外资源百度地址http:///www.baidu.com,而请求转发写的是相对地址,所以不可以请求站外资源)。

对你有帮助的话给个小心心鼓励一下吧~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值