!从Jetty 7切换到Jetty 9时出现asyncSupported异常

dso*_*len 5 java jetty war

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

 IllegalStateException: !asyncSupported
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会出现这种情况,而不是旧的码头.我目前无法构建war文件,只有一个开发人员可以构建它是一个混乱,但是我使用jetty -x解压缩它并且对web.xml文件的servlet部分进行解压缩:

<async-supported>true</async-supported>
Run Code Online (Sandbox Code Playgroud)

然后使用jar c命令重新解压缩.这似乎没有帮助,虽然现在我在我的码头日志中得到例外情况,而他们只会在浏览器中显示.

任何人都可以告诉我如何激活异步支持和/或为什么jetty中的切换会导致这种情况?

Joa*_*elt 7

啊,规范的演变......

  • Jetty 7是Servlet 2.5(没有异步)
  • Jetty 8是Servlet 3.0(异步介绍) - 规范对于什么是默认值是模糊的,所以Jetty默认为 async-supported == true
  • Jetty 9是Servlet 3.1(甚至更加异步) - 规范已经澄清,而jetty选择了它的默认值.根据规范的默认值是async-supported == false

这就是为什么你不必在过去指定异步支持,但现在你做了.

关于这个bugs.eclipse.org/410893的错误

提交:9bf7870c7c8a209f2660f63c14dd4acb62b07533


小智 5

我的例外对你来说也是一样。然后我将“ <async-supported>true</async-supported>”附加到每个 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>
Run Code Online (Sandbox Code Playgroud)

另一方面。如果您使用 jetty9.x。您最好将您的 Comet jar 更新到 3.0.x 或更高版本。我希望它会帮助你。