IllegalStateException:AsyncContext.startAsync(req,res)不支持

发布于 2024-12-09 17:26:18 字数 796 浏览 0 评论 0原文

我创建了一个 servlet 3.0 来探索异步请求处理:

@WebServlet(name="MyTest", urlPatterns={"/MyTest"}, asyncSupported=true)
public class MyTest extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        AsyncContext tmp = req.startAsync(req, res);
        ...

    }    

}

但是当调用 .startAsync(...) 时,我收到一个 IllegalStateException 。我知道 Javadoc 提到了该异常,但我确实显式启用了异步(参见 WebServlet 注释)。我使用的是 NetBeans 附带的 Tomcat 7.0.11.0。

我可以确认 req.isAsyncSupported() 返回 false。我做错了什么?我还需要做什么才能启用异步处理?

编辑:

我尝试实现以下示例并得到相同的结果问题。

I have created a servlet 3.0 to explore asynchronous request processing:

@WebServlet(name="MyTest", urlPatterns={"/MyTest"}, asyncSupported=true)
public class MyTest extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        AsyncContext tmp = req.startAsync(req, res);
        ...

    }    

}

but I get an IllegalStateException when .startAsync(...) is called. I know the Javadoc mentions that exception, but I did explicitly enable async (c.f. WebServlet annotation). I am using Tomcat 7.0.11.0 delivered with NetBeans.

I could confirm that req.isAsyncSupported() is returning false. What am I doing wrong? What more do I need to do to enable async processing?

EDIT:

I tried to implement the following example and got the same issue.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

¢好甜 2024-12-16 17:26:18

我检查了 Tomcat 的代码,发现 asyncSupported 变量必须显式设置为 true。这就是为什么您会得到 req.isAsyncSupported() == false

您可以尝试通过以下方法之一将 HttpServletRequest 对象中的 async 属性设置为 true。

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);

((org.apache.catalina.connector.Request)req).setAsyncSupported(true);

希望有帮助。

I checked out Tomcat's code and saw that the asyncSupported variable has to be explicitly set to true. That's why you are getting req.isAsyncSupported() == false.

You could try to set the async attribute in the HttpServletRequest object to true by one of the following methods.

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);

or

((org.apache.catalina.connector.Request)req).setAsyncSupported(true);

Hope it helps.

不气馁 2024-12-16 17:26:18

请检查您是否有任何未启用支持异步的请求过滤器。您可以(暂时)删除过滤器或将其标记为支持异步。

Please check if you have any request filter which is not enabled to support async. Either you can remove the filter (temporarily) or mark it to support async.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文