如何避免请求集 ASYNC_SUPPORTED=true 以在 Tomcat 7 上启用异步 servlet 3.0 处理?

在报告了有关此问题的问题之后,找到了解决方案:

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

这似乎有点奇怪,并不是真正的“可移植”代码(它不会伤害,但是......)。它似乎特定于Tomcat 7。我使用的是 NetBeans 7.0.1 提供的 Tomcat 7.0.14。

我找不到文档表明有必要在 servlet 3.0 中使用 catalina 属性启用异步请求处理。我找不到文档表明在Tomcat配置级别也需要一些特殊的东西。

有没有办法避免在每个请求中设置以在Tomcat 7中启用异步servlet 3.0处理?ASYNC_SUPPORTED=true


答案 1

首先要检查的几件事:

确保对请求执行操作的任何筛选器也支持异步(如您引用的问题的某个答案中所述)。

确保您使用的是 Servlet 3.0 web.xml - 例如:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0"
         metadata-complete="true">

答案 2

尝试升级。

  • Bug 53623 在 7.0.30 中修复。
  • “为 Servlet 3 异步处理支持启用剩余的阀门。”(在 7.0.16 中已修复)

查看Tomcat 7 ChangeLog以获取完整的详细信息。

此外,如果你想使用异步,那么你需要确保链中的所有过滤器和阀门(当然还有servlet)都支持异步。这可能是原始问题中的问题,以及您的案例,在这里。


推荐