我们最近升级了我们的码头版本。当我们这样做时,我们的两个遗留的gui war文件,在一段时间内没有人修改过,停止正常工作。我相信我找到了代理的根本原因(用于代理另一个端口上的restful接口),对代理的任何调用都会引发异常:
IllegalStateException: !asyncSupported
我不知道为什么会出现这种情况,而不是旧的码头。我目前无法构建war文件,只有一个开发人员可以构建一个混乱,但是我用jetty -x解压缩它并且对web.xml文件的servlet部分进行解压缩:
<async-supported>true</async-supported>
然后使用jar c命令重新解压缩。这似乎没有帮助,虽然现在我在我的码头日志中得到例外情况,而他们只会在浏览器中显示。
任何人都可以告诉我如何激活异步支持和/或为什么jetty中的切换会导致这种情况?
答案 0 :(得分:6)
async-supported == true
async-supported == false
这就是为什么你不必在过去指定异步支持,但现在你可以这样做。
的错误答案 1 :(得分:3)
我的例外与您相同。然后我将“<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>
另一方面。如果你使用jetty9.x你最好将你的彗星jar更新到3.0.x或更高版本。我希望它会对你有所帮助。
答案 2 :(得分:0)
我不能(还)把它作为评论,但我想补充一点:如果你遇到这个麻烦并且已经添加了async支持的标签(或使用Jetty 8),请确保您的过滤器也支持异步,或者不与相关的servlet一起使用。
答案 3 :(得分:0)
对于基于Java的配置,您可以使用
@javax.servlet.annotation.WebServlet(name = "HelloWorld",urlPatterns = { "/MyServlet" },asyncSupported =true)