我发现org.apache.catalina.ASYNC_SUPPORTED=true
只有当您从一个 normal-servlet/jsp(内部)转发到一个 async-servlet 时才需要这样做!示例:在我的 index.jsp 中<jsp:forward page="/path/AsyncServlet" />
,当我直接从浏览器触发 AsyncServlet 时,我保证 AsyncServlet 在 Tomcat7 和 Glassfish3 上都能正常工作!但是,当我通过 index.jsp 触发它时:Tomcat7 报告 500 表示“不支持” Glassfish3 报告 500 表示“请求在不支持异步操作的过滤器或 servlet 范围内”如果我<% request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true); %>
之前嵌入<jsp:forward>
index.jsp,Tomcat7没问题,但 Glassfish3 仍然很糟糕!所以我找到了 Tomcat7 和 Glassfish3 的解决方案(没有 SYNC_SUPPORTED!):只需在 web.xml 中完全附加以下内容:
<servlet>
<servlet-name>indexPage</servlet-name>
<jsp-file>/index.jsp</jsp-file>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>indexPage</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
结论(对我来说):你不能从一个普通的servlet/jsp/filter 转发到一个异步的!由于必须预设异步请求功能!因此,对于需要转发到 async-servlet 的 servlet/jsp/filter 的常见解决方案是: 使用<servlet>/<async-supported>true
或@WebServlet(asyncSupported = true)
用于预处理的 servlet;用于<servlet>/<async-supported>true
预处理的 jsp 使用<filter>/<async-supported>true
或@WebFilter(asyncSupported = true)
用于预处理的过滤器;希望这可能会有所帮助!