Spring之请求分发(Dispatching Requests)

当构建一个web应用程序时,对于处理一个跳转到另一个servlet的请求,或者包含响应中另一个servlet的输出。RequestDispacher接口提供了实现这个的机制


当请求中进行异步处理时,AsyncContext允许用户分发请求回到servlet容器。


9.1 获取一个RequestDispacher


实现RequestDispacher接口的对象可能通过以下方法从ServletContext中重新获取。

  • getRequestDispacher
  • getNamedDispatcher

getRequestDispacher方法传递一个路径(ServletContext的范围内)的String参数。这个路径必须是相对于ServletContext的根目录并与‘/’开始,或者可能为空。这个方法使用路径查找一个servlet,使用第十二章中的servlet路径匹配规则,“请求映射到Servlets”,使用一个RequestDispacher对象封装,并返回结果对象。如果基于这个路径没有找到相对应的servlet,就提供一个返回这个路径的RequestDispacher。


getNamedDispatcher传递一个String的参数,指向一个Servlet的名字,其被ServletContext知道。如果发现了一个Servlet,其用RequestDispacher对象封装,并返回这个对象。如果没有与给定名字关联的对象,这个方法必须返回null。


为了允许RequestDispacher对象通过相对路径重新获取(相对于当前请求的路径,而不是相对于ServletContext的根目录),ServletRequest接口提供了getRequestDispacher方法。


这个方法的行为与ServletContext中相同命名的方法相似。Servlet容器使用请求对象的信息将所给的相对路径(相较于当前的servlet)转为一个完全的路径。例如,在根目录'/'的上下文和/garden/tools.html的请求中,借助ServletRequest.getRequestDispatcher("header.html")获取的请求分发器执行起来就像是ServletContext.getRequestDispatcher("/garden/header.html").。



9.1.1 请求分发路径中的查询字符创


ServletContext和ServletRequest方法,使用路径信息创建RequestDispacher对象,允许查询字符串信息路径的可选附件(the optional attachment of query string
information to the path.这句话不好翻译)。例如,可以通过以下代码获取一个RequestDispacher对象。


String path = “/raisins.jsp?orderno=5”;
RequestDispatcher rd = context.getRequestDispatcher(path);
rd.include(request, response);



用于创建RequestDispacher对象的查询字符串的指定参数,优先于传递给所包含servlet相同命名的其他参数。与一个RequestDispacher关联的参数范围仅局限于include或forward调用期间。


9.2 使用一个Request Dispacher


为使用一个请求分发器,一个servlet要不调用RequestDispacher接口的include方法或者forward方法。这些方法的参数可能是request参数和response参数,借助service

方法(来自javax.servlet接口)传递进来,或者请求和响应封装类的子类实例。在后面的情况中,封装实例必须封装请求或者响应对象,容器传递这些对象到那个service方法。


容器提供器必须确保请求分发到目标servlet,作为原始的请求在相同JVM的相同线程中运行。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值