Java Web学习之JSP中的请求转发与重定向

一、请求转发与重定向

在说请求转发和重定向之前,我们得回顾下JSP九大隐含对象中的 request 对象和 response 对象。

  1. request:这个对象是HttpServletRequest 对象,可以对在客户请求中给出的信息进行访问,里面包含了所有有关当前浏览器的请求信息。

    请求的转发:
    request.getRequestDispatcher(url).forward(request,response)

    ①. 调用request对象的getRequestDispatcher(url)方法,url为要转发的地址。
    ②. 调用forward(request,response)进行请求的转发。

  2. response:将服务器端数据发送到客户端,可在客户端浏览器中显示。

    请求的重定向:
    response.setRedirect(url)

    直接调用response.setRedirect(url)方法,url为要重定向的地址。

二、请求转发与重定向的差异

本质区别:请求的转发只发出了一次请求, 而重定向则发出了两次请求。

2.1 请求的次数

首先来看一下请求转发和请求重定向的工作流程:
假设我们有这样一个需求:A首先向B发出请求,然后B再向C发出请求。

  1. 请求转发:首先A向B发出请求(第一次),然后B通过请求转发的方式跳转到C,C再返回给A,具体看下面这张图。
    请求转发
    从图中我们可以看出,在请求的转发过程中,A发出的请求 和 B向C转发发出的请求 是同一个请求,故,请求的转发只发出了一次请求。

  2. 请求重定向:首先A向B发出请求(第一次),然后B通过重定向的方式跳转到C,但B不会直接向C发出请求,而是先返回到A,然后再由A向C发出请求(第二次),具体看下面这张图。
    请求重定向
    从图中我们可以看出,在请求的重定向过程中,A发了两次请求,且这两次请求不是同一个请求。

我们再举一个生活中的小例子来加以说明:

假设你去办理某个证件:

重定向:你先去了A局,A局人对你说:“这事不归我们管,归B局管”,然后你就从A退了出来,自己乘车去了B局。

转发:你去了A局,A局人看了后知道这事归B局管,但是他们没有把你退回来,而是让你坐一会,自己到后面办公室联系了B的人,让他们办好后,送回给了你。

2.2 地址栏是否改变

还是以上面的A.jsp,B.jsp,C.jsp为例,如果现在A要请求B,然后B要请求C。

先看重定向方式:首先在浏览器地址栏输入http://localhost:8080/test/A.jsp

然后A会跳转到B,此时的地址就是http://localhost:8080/test/B.jsp

由于是重定向的方式,这时B会先返回给A,A再发请求到C,这时地址为http://localhost:8080/test/C.jsp ,所以地址栏会发生改变。

再看请求转发方式:首先在浏览器地址栏输入http://localhost:8080/test/A.jsp

然后A会跳转到B,此时的地址就是http://localhost:8080/test/B.jsp

最后由B跳转到C,地址为http://localhost:8080/test/B.jsp (由于是请求转发的方式,还是同一个请求,仅仅是服务器的内部跳转,所以地址栏不会改变)。

2.3 是否保留第一次请求时的数据

再说保留数据之前,先回顾一下4个域对象:pageContext,request,session,application

这4个域对象都有几个共同的方法:

  1. void setAttribute(String
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值