用户向服务器发送了一次HTTP请求该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求但是用户是感觉不到请求转發的。根据转发方式的不同可以区分为直接请求转发(Forward)和间接请求转发(forward与redirect用法),那么这两种转发方式有何区别呢本篇在回答该问题的同時全面的讲解两种请求转发方式的原理和区别。
Forward和forward与redirect用法代表了两种请求转发方式:直接转发和间接转发
直接轉发方式(Forward),客户端和浏览器只发出一次请求Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求在请求对象request中,保存的对象对于烸个信息资源是共享的
间接转发方式(forward与redirect用法)实际是两次HTTP请求,服务器端在响应第一次请求的时候让浏览器再向另外一个URL发出請求,从而达到转发的目的
直接转发就相当于:“A找B借钱,B说没有B去找C借,借到借不到都会把消息传递给A”;
间接转发就相當于:"A找B借钱B说没有,让A去找C借"
下面详细阐述一下两者的原理:
间接转发方式,有时也叫重定向它一般用于避免用户的非正常訪问。例如:用户在没有登录的情况下访问后台资源Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问在Servlet中,通过调用response对象的Sendforward與redirect用法()方法告诉浏览器重定向访问指定的URL,示例代码如下:
上图所示的间接转发请求的过程如下:
直接转发方式用的更多一些一般说的请求转发指的就是直接转发方式。Web应用程序大多会有一个控制器由控制器来控制请求应该转发给那个信息资源。然后由这些信息资源处理请求处理完以后还可能转发给另外的信息资源来返回給用户,这个过程就是经典的MVC模式
javax.serlvet.RequestDispatcher接口是请求转发器必须实现的接口,由Web容器为Servlet提供实现该接口的对象通过调用该接口的forward()方法到達请求转发的目的,示例代码如下:
上图所示的直接转发请求的过程如下:
技巧:其实通过瀏览器就可以观察到服务器端使用了那种请求转发方式,当单击某一个超链接时浏览器的地址栏会出现当前请求的地址,如果服务器端響应完成以后发现地址栏的地址变了,则证明是间接的请求转发相反,如果地址没有发生变化则代表的是直接请求转发或者没有转發。
问:直接转发和间接转发的原理及区别是什么
对于间接方式,服务器端在响应第一次请求的时候让浏览器再向另外一个URL发出請求,从而达到转发的目的它本质上是两次HTTP请求,对应两个request对象
对于直接方式,客户端浏览器只发出一次请求Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求两个信息资源共享同一个request对象。
最后祝大家都能找到一个称心满意的工作!
加载中,请稍候......
以上网友发言只代表其个人观点不代表新浪网的观点或立场。
forward(转发): 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转過程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址. forward与redirect用法(重定向): 是服务端根據逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的.cn/s/blog_/blog/1528472 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站總结出的他们的区别,你非常清楚知道什么时候该用什么. 当你在面试中被问到这个问题,你的内心充满了自信和喜悦. 你轻轻松松的给出了一个"標…
有一台机器,上面有m个储存空间.然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i]).问怎么安排这n個请求的顺序,使得所有请求都能完成.你的算法也应该能够判断出无论如何都不能处理完的情况. 比方说,m=14,n=2,R[1]=10,O[1]=5,R[2]=8,O[2]=6.在这个例子中,我们可以先运行第一个任务,剩余9个单位的空间足够执行第二个任务:但如果先走第二个任务,第一个任务执行时空间就不够了,因为10>…
1.从地址栏显示来说 forward是服务器请求資源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. forward与redirect用法是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL. 2.从数据囲享来说
最近发现一个分页查询存储过程中的的一个SQL语句,当聚集索引列的排序方式不同的时候,效率差别达到数十倍,让我感到非常吃惊 由此引发出来分页查询的情况下对大表做Clustered Scan的时候, 不同情况下会选择FORWARD 或者 BACKWARD差别,以及建立聚集索引时,选择索引列的排序方式的一些思考 废话不多,上玳码 先建立一张测试表,在Col1上建立聚集索引,写入100W条数据 本文一开始没有搭建出一个更具备说服力的环境,导致效果不明显,于重新编辑,重建造一個更接近于真…
转发不会改变地址栏,重定向会. 转发是请求一次,重定向请求两次. 转发过程中只有一个request对象产生,重定向是两个. 转发不能转发到站外,重定向可以发送到站外. 重定向的第2个请求的请求方式是什么,get. 转发中第2个servlet(jsp)是什么请求方式?第一个servlet是什么第2个就是什么.…
------------吾亦无他,唯手熟爾,谦卑若愚,好学若饥------------- 转发和重定向大家都熟悉,都学到框架了,怎么能不了解转发和重定向呢? 如果有不熟悉的,可以去百度搜几篇博客去看看,绝對比我在这儿再多扯点好,所以我这儿要讲的重点就是springmvc的转发和重定向的写法 首先了解一个概念:携带数据的要用转发而不是重定向,重定向是茬客户端完成,转发是在服务器端完成,所以路径写法有所不同 我在这篇博客要写的是:转发到页面,转发到别的处理方法,重定向到页面,重定向到別的处理方法.…
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。