【问题标题】:how the servlet 3.0 asynchronous flow behavesservlet 3.0 异步流的行为方式
【发布时间】:2013-12-09 06:39:51
【问题描述】:

我正在弄清楚异步 servlet 流是如何异步运行的。

如果有一个 servlet Servlet_1,并且我们从 servlet 调用实用程序类 SampleUtility 的 util 方法,并在 util 方法中进行某种操作后返回一些值给 servlet。

那么,对于异步流程,我们需要将 asyncContext 传递给 util 方法,还是简单地通过语句启动 asynccontext

 AsyncContext asyncContext = request.startAsync();

流是异步的就足够了吗??

【问题讨论】:

    标签: java servlet-3.0 asynchronous


    【解决方案1】:

    要使 Servlet 成为异步 3 个步骤,必须执行。

    1. 将 web servlet 注释注释为

      @WebServlet(urlPatterns={“/servletexample”},aysncSupported=true)

      将其标记为 asyncSupported true 将支持异步流。

    2. 通过以下语句启动AsyncContext

      AsyncContext ac=request.startAsync();

    3. 最后实现startAsync()

      asyncContext.start(new Runnable(){ public void run(){ //Write the non-blocking code here } }

    【讨论】:

      【解决方案2】:

      流是异步的就足够了吗??

      不,这还不够。要在 servlet 上启用异步处理,请将 @WebServlet 注释上的参数 asyncSupported 设置为 true,如下所示:

        @WebServlet(urlPatterns={"/asyncservlet"}, asyncSupported=true)
        public class AsyncServlet extends HttpServlet { ... }
      

      详情请浏览此tutorial

      【讨论】:

      • 我知道将参数 asyncSupported 设置为 true 是必要的,但我问的是流程
      【解决方案3】:

      AsyncContext.forward(path)AsyncContext.forward() 将请求转发回容器,因此您可以使用 JSP 等框架来生成响应。所以您需要将asyncContext 传递给该方法,因为AsyncContext 提供了获取ServletRequestServletResponse 对象引用的方法。

      【讨论】:

        猜你喜欢
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多