9

这有效:

String webappDir = "...";
context = tomcat.addWebapp("/", new File(webappDir).getAbsolutePath());

这不会:

context = tomcat.addContext("/", new File("").getAbsolutePath());

在这种情况下,我真的不需要 a webappDir,因为我不提供任何 JSP 页面或客户端资源,我只是仅使用response.getWriter().println(...);服务器端。

没有抛出异常,websocket 根本没有打开。

我可以假设这是一个 tomcat 错误吗?

4

2 回答 2

3

好吧,这两个是完全不同的功能。如果您查看该函数的 javadoc addContext,您可以看到,您需要设置上下文才能使用 websocket。这是从 api 文档中检索的。

添加上下文 - 编程模式,不使用默认 web.xml。这意味着没有 JSP 支持(没有 JSP servlet),没有默认 servlet 和 web 套接字支持,除非通过编程接口显式启用。

因此,就您而言,我想您可以按照此链接中的测试用例如何将端点添加到上下文中。

至于您是否可以假设这是一个错误。就个人而言,我不认为这是一个错误,因为开发人员本身已经提到他们不提供 Web 套接字连接。但是,为了确保,您可以联系他们并询问;)。

于 2015-05-07T16:28:05.617 回答
1

如果您查看测试(源代码中的 test/org/apache/tomcat/websocket),它们会

tomcat.addContext("", null);

请注意,传递null而不是上下文路径需要最近的 Tomcat 8(不超过几个月)。当前版本是 8.0.22。

我可以假设这是一个 tomcat 错误吗?

“提交错误之前”的规则是在用户的邮件列表中询问,而不是在 stackoverflow 上询问。

于 2015-05-05T14:26:13.333 回答