Java !从Jetty 7切换到Jetty 9时支持的异步异常

Java !从Jetty 7切换到Jetty 9时支持的异步异常,java,jetty,war,Java,Jetty,War,我们最近升级了jetty版本。当我们这样做时,我们的两个遗留gui war文件都停止了正常工作,这两个文件在一段时间内没有人修改过。我相信我找到了代理的根本原因(用于代理另一个端口上的restful接口),对代理的任何调用都会引发异常: IllegalStateException: !asyncSupported 我不确定为什么1.9版会出现这种情况,但旧码头却不会。我目前无法构建war文件,这是一个只有一个开发人员才能构建的混乱文件,但我使用jetty-x解压它,并加载到web.xml文件

我们最近升级了jetty版本。当我们这样做时,我们的两个遗留gui war文件都停止了正常工作,这两个文件在一段时间内没有人修改过。我相信我找到了代理的根本原因(用于代理另一个端口上的restful接口),对代理的任何调用都会引发异常:

 IllegalStateException: !asyncSupported
我不确定为什么1.9版会出现这种情况,但旧码头却不会。我目前无法构建war文件,这是一个只有一个开发人员才能构建的混乱文件,但我使用jetty-x解压它,并加载到web.xml文件的servlet部分,如下所示:

<async-supported>true</async-supported>
true
然后用jarc命令重新压缩它。这似乎没有什么帮助,尽管现在我在jetty日志文件中看到异常,而以前它们只显示在浏览器中


谁能告诉我如何激活异步支持和/或为什么jetty中的交换机会导致这种情况?

啊,规范的演变

  • Jetty7是Servlet2.5(那里没有异步)
  • Jetty 8是Servlet 3.0(引入了异步)-规范对默认值含糊不清,因此Jetty默认为
    async-supported==true
  • Jetty 9是Servlet 3.1(甚至更异步)——规范已经澄清,Jetty选择了它的默认版本。根据规范,默认值为
    async supported==false
这就是为什么过去不必指定支持的异步,但现在需要指定

关于这件事


提交:

我还不能(目前)将此作为评论,但我想补充一点:如果您遇到此问题,并且已经适当地添加了支持异步的标记(或者正在使用Jetty 8),请确保您的筛选器也支持异步,或者没有与所讨论的servlet一起使用。

我的例外情况与您相同。然后我将“
true
”附加到每个servlet和过滤器。它工作得很好。 请原谅

<filter>
    <filter-name>continuation</filter-name>
    <filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
    <async-supported>true</async-supported>
</filter>

<servlet>
    <servlet-name>cometd</servlet-name>
    <servlet-class>org.cometd.annotation.AnnotationCometdServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

延续
org.eclipse.jetty.continuation.ContinuationFilter
真的
降临
org.cometd.annotation.annotationCometServlet
1.
真的

另一方面。如果您使用jetty9.x。您最好将comet jar更新为3.0.x或更高版本。我希望它能帮助您。

对于基于Java的配置,您可以使用

@javax.servlet.annotation.WebServlet(name = "HelloWorld",urlPatterns = { "/MyServlet" },asyncSupported =true)

那么…我有没有办法在jetty配置中将jetty默认为这个,而不是war filse;sicne我现在无法重建战争?抱歉,没有快速的解决方案。请随意提交一个bug,请求进行此增强。可以通过可部署上下文xmlNice添加的自定义WebAppContext属性实现!非常感谢。