Servlet间协作

68 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

本次我们学习Servlet间协作,首先我们要先了解什么是Servlet间协作,以下内容将会说明。

Servlet间协作的说明:

当Web容器接收到客户端的请求后,它负责创建HttpRequest对象和HttpResponse对象,然后将这两个对象以参数的形式传递给与请求URL地址相关联的Servlet的service方法进行处理。但对于复杂的处理过程,仅仅通过一个Servlet来实现对于请求的处理往往比较困难,这时经常需要几个Servlet间共同协作完成对于请求的处理,也就是说,在一个Servlet处理过程中或处理完毕后,将客户端的请求传递到另外一个Servlet来处理,这种像接力赛似的过程称为请求指派。为实现请求指派,Servlet规范定义了一个接口:javax.servlet.requestdispatcher。

Servlet间协作的实现:

Requestdispatcher封装了到同一Web应用内的另外一个资源的引用。可以通过调用Requestdispatcher的forword方法将请求传递到其他资源,或者调用Requestdispatcher的include方法将其他资源对此请求的响应包含进来。

通过HttpServletResponse的sendRedirect实现请求重定向,与调用RequestDispatcher的forward方法有什么区别呢?

首先,从操作的本质上,RequestDispatcher的forward是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;而HttpServletResponse的sendRedirect是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求连接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。其次,从性能上,前者仍旧是在同一次请求处理过程中,后者是结束第一次请求,由浏览器发起一次新的请求,因此,RequestDispatcher的forward更加高效。在条件许可时,开发人员尽量使用RequestDispatcher的forward方法。

RequestDispatcher的forward也有局限,它只能转到Web应用内部的资源,而在有些情况下,比如,需要跳转到其他服务器上的某个资源时,则必须使用HttpServletResponse的sendRedirect方法。

以上内容就是关于Servlet间协作的学习,后续我们将会通过实例来直观的了解之间的协作关系。