【问题标题】:!asyncSupported exception when switch from Jetty 7 to Jetty 9!asyncSupported 异常从 Jetty 7 切换到 Jetty 9
【发布时间】:2013-12-17 20:26:05
【问题描述】:

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

 IllegalStateException: !asyncSupported

我不确定为什么 1.9 会出现这种情况,但旧码头不会出现这种情况。我目前无法构建战争文件,只有一个开发人员才能构建一个混乱的文件,但我尝试使用 jetty -x 解压缩它并添加到 web.xml 文件的 servlet 部分:

<async-supported>true</async-supported>

然后用 jar c 命令重新压缩它。这似乎没有帮助,虽然现在我的码头日志文件中出现了异常,而之前它们只会显示在浏览器中。

谁能告诉我该怎么做才能激活异步支持和/或为什么码头中的开关会导致这种情况?

【问题讨论】:

    标签: java jetty war


    【解决方案1】:

    啊,规范的演变……

    • 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

    【讨论】:

    • 所以...有没有办法让我在码头配置中默认码头而不是战争文件;既然我现在无法重建战争?
    • 抱歉,没有快速的解决方案。
    • 请随时提交错误请求以进行此增强。可以通过可部署上下文 xml 上的自定义 WebAppContext 属性实现
    【解决方案2】:

    我的例外对你来说是一样的。然后我将“&lt;async-supported&gt;true&lt;/async-supported&gt;”附加到每个 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>
    

    另一方面。如果你使用 jetty9.x。你最好将你的彗星罐子更新到 3.0.x 或更高版本。希望对你有帮助。

    【讨论】:

      【解决方案3】:

      我不能(还)将此作为评论,但我想补充一点:如果您遇到此问题并已酌情添加了支持异步的标签(或正在使用 Jetty 8),请确保您的过滤器支持异步或不与相关 servlet 一起使用。

      【讨论】:

      • 不错的补充!谢谢。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 2015-02-19
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多