请求转发(forward()) | 重定向(redirect()) | |
请求服务器次数 | 1次 | 2次 |
是否保留第一次请求时request范围中的属性 | 保留 | 不保留 |
地址栏里的请求URL,是否改变 | 不变 | 改变为重定向之后的新目标URL。相当于在地址栏里重新输入URL后,再按回车键 |
2.关于“请求服务器次数”的问题,再做以下详尽分析:
请求转发:客户端(浏览器)向服务器的资源A发起一次请求①,服务器的资源A接收到该请求后,将该请求转发到内部的其他资源B②,资源B处理完请求后,最终给客户端做出响应③。如图2.19,
图2.19
重定向:客户端(浏览器)向服务器的资源A发起一次请求①,服务器的资源A接收到该请求后,给客户端做出响应,告诉客户端去重新访问资源B的地址 ②,客户端收到资源B的地址后再次向服务器的资源B发出第二次请求③,服务器资源B处理完该请求并做出响应④。如图2.20,
图2.20
我们可以将“请求转发”和“重定向”想象成以下情景:
请求转发:张三去银行的A窗口办理业务,A窗口的业务员发现该业务自己办不了,就将张三的业务请求转发给其他同事办理,最后将办理完的业务返回给张三。也就是说,张三只是给银行的A窗口发送了一次请求,而该业务办理人员之间的换人工作,是银行内部处理的。即张三只发出了一次请求,更换窗口业务员(跳转)是银行的行为。
重定向:张三去银行的A窗口办理业务,A窗口的业务员发现该业务自己办不了,然后告诉张三应该重新去窗口B办理,张三收到该消息后,又重新向银行的窗口B再次请求办理业务,最终银行的窗口B处理完张三的请求,并将办理完的业务返回给张三。也就是说,张三分别向银行的窗口A、窗口B各发送了一次请求(共2次请求),更换窗口业务员(跳转)是张三的行为。
Web是请求/响应架构的使用,而request和response就是在服务器端生成的相应的两个对象,request能够获取客户端传递的参数及相关的一些信息,而response就是给客户端响应相关的页面及信息。
request.getRequestDispatcher().forward(request.response)这个语句意思是将客户端的请求转向(forward)到getRequestDispatcher()方法中参数定义的页面或者链接。
说通俗点就是,当一个客户端的请求到这个页面后,不做处理或者不处理完,将请求转给另一个页面处理,然后再响应给客户端。
请求转发(forward()) | 重定向(redirect()) | |
请求服务器次数 | 1次 | 2次 |
是否保留第一次请求时request范围中的属性 | 保留 | 不保留 |
地址栏里的请求URL,是否改变 | 不变 | 改变为重定向之后的新目标URL。相当于在地址栏里重新输入URL后,再按回车键 |
关于“请求服务器次数”的问题,再做以下详尽分析:
请求转发:客户端(浏览器)向服务器的资源A发起一次请求①,服务器的资源A接收到该请求后,将该请求转发到内部的其他资源B②,资源B处理完请求后,最终给客户端做出响应③。如图2.19,
图2.19
重定向:客户端(浏览器)向服务器的资源A发起一次请求①,服务器的资源A接收到该请求后,给客户端做出响应,告诉客户端去重新访问资源B的地址 ②,客户端收到资源B的地址后再次向服务器的资源B发出第二次请求③,服务器资源B处理完该请求并做出响应④。如图2.20,
图2.20
我们可以将“请求转发”和“重定向”想象成以下情景:
请求转发:张三去银行的A窗口办理业务,A窗口的业务员发现该业务自己办不了,就将张三的业务请求转发给其他同事办理,最后将办理完的业务返回给张三。也就是说,张三只是给银行的A窗口发送了一次请求,而该业务办理人员之间的换人工作,是银行内部处理的。即张三只发出了一次请求,更换窗口业务员(跳转)是银行的行为。
重定向:张三去银行的A窗口办理业务,A窗口的业务员发现该业务自己办不了,然后告诉张三应该重新去窗口B办理,张三收到该消息后,又重新向银行的窗口B再次请求办理业务,最终银行的窗口B处理完张三的请求,并将办理完的业务返回给张三。也就是说,张三分别向银行的窗口A、窗口B各发送了一次请求(共2次请求),更换窗口业务员(跳转)是张三的行为。