精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究。本文仅进行了翻译,如果需要实际技术请联系锐英源。
服务器一般是入口集中,功能分散,这样才好给浏览器服务。集中的入口就要处理请求转发和重定向,才能和分散的功能点对应上。
当我们服务器端在处理用户请求的时候,根据业务的需求,我们经常需要根据用户的不同请求来进行相应的资源跳转,来实现特定的功能。比如当我们登录某些网站的时,网站检测到我们是陌生信息,会给我们转到登录页面,而如果有我们的身份信息,并且信息还没失效,就会给我们转到用户界面。这些操作都牵涉到资源跳转,资源跳转主要有两种方式,分别是请求转发和重定向。
请求转发的实现首先需要通过request对象的方法getRequestDispatcher(String path)获取请求转发器对象(RequestDispatcher),然后使用转发器对象的forward(ServletRequest request,ServletResponse response)来进行转发。
可以看出,这是一种在服务器内部的资源跳转方式,跟我们的客户端没有任何关系,在使用请求转发的时候我们也能够观察到我们的浏览器地址没有发生变化,客户端只进行了一次请求。正因为如此,请求转发的时候我们可以利用我们的request域对象来共享数据,因为我们的request域对象就是代表了一次请求的范围。
而我们的重定向通过响应对象的sendRedirect(String path)来实现,效果就是我们的浏览器接受这个响应信息,会立马访问我们设定的这个地址信息。
很明显,我们的重定向对于我们的浏览器来说是发送了两次请求,这样的话重定向相比与请求转发就不能够使用reques域对象来共享数据。但因为重定向是我们的浏览器重新去访问地址信息,而请求转发是服务器内部资源跳转,因此我们的重定向相比于请求转发可以去访问其它站点的资源。
有了上面对两种方式的介绍,大家应该就能够对这两种方式灵活运用了。当我们要在服务器内部实现资源跳转的时候,应该使用我们的请求转发方式,让我们的服务器直接给我们转到相应资源,这个时候如果用重定向,把资源传给客户端,客户端再请求这个资源,不是画蛇添足了吗。而如果我们需要实现外部资源跳转来满足用户的需求时,就必须用到我们的重定向方式了。