调用其余web资源

web组件能够直接或间接的调用其余web资源。一个web组件经过内嵌返回客户端内容的另外一个web资源的url来间接调用其余web资源。在执行时,一个web资源经过包含另外一个资源的内容或者转发请求到另外一个资源直接调用。
调用运行web组件服务的一个有效的资源,必须首先经过getRequestDispatcher方法得到一个RequestDispatcher对象。你能够从web上下文或者一个请求对象中获取RequestDispatcher对象;须要注意的是,这两个方法有一些不一样的行为。该方法将所请求的路径做为一个参数;请求可能使用相对路径(),但web上下文必须是一个绝对路径。若是资源是无效的,或者服务容器没有为该类型的资源实现RequestDispatcher对象,getRequestDispatcher将返回null。 您的servlet应该准备好处理这种状况。java

在响应中包含其余资源

导入其余web资源是常用的,例如广告内容或者版权信息,包含在一个web资源返回的响应中。导入其余web资源,调用RequestDispatcher对象的include方法:web

include(request, response);

若是资源是静态的,include方法启用了程序化的服务端关联。若是资源是一个web组件,这个方法的做用是发送请求到要包含的web组件,执行这个web组件,而后将include包含的servlet响应执行的结果。被包含的组件能够访问请求对象,但它对响应的处理是受限的。cookie

  • 它能够写入响应体,而且提交响应
  • 它不能设置响应头或者调用任何方法,好比设置cookie,等影响请求头的操做

将控制器转移到另外一个web资源

在某些应用程序中,你可能相对某些web资源作请求的预处理,有另外一个组件生成响应。例如,你可能想去部分的处理一个请求,而后根据请求的性质调用另外一个web组件。为了控制转发到另外一个web资源,你须要调用RequestDispatcher对象的forward方法。当一个请求被转发,请求的url会被设置为转发页面的路径。原始URL和他的构成部分被设置到下面的属性中:url

javax.servlet.forward.request_uri
javax.servlet.forward.context_path
javax.servlet.forward.servlet_path
javax.servlet.forward.path_info
javax.servlet.forward.query_string

应该使用forward方法为回复用户提供另外一个资源责任。若是你已经在servlet内部响应一个ServletOutputStream对象或者PrintWriter对象,你不能使用这个方法;作这个操做,将抛出IllegalStateException异常。spa

相关文章
相关标签/搜索