关于请求转发和重定向的区别

来源:互联网 发布:限制文件夹大小 linux 编辑:程序博客网 时间:2024/06/05 08:08
1.

请求转发(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次请求),更换窗口业务员(跳转)是张三的行为。



3.request.getRequestDispatcher().forward(request.response)中的那两个参数是哪里来的?


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次请求),更换窗口业务员(跳转)是张三的行为。

原创粉丝点击