Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有WebApp,WebSocket无法工作_Java_Tomcat_Bugzilla_Embedded Tomcat 8 - Fatal编程技术网

Java 没有WebApp,WebSocket无法工作

Java 没有WebApp,WebSocket无法工作,java,tomcat,bugzilla,embedded-tomcat-8,Java,Tomcat,Bugzilla,Embedded Tomcat 8,这项工作: String webappDir = "..."; context = tomcat.addWebapp("/", new File(webappDir).getAbsolutePath()); 这并不是: context = tomcat.addContext("/", new File("").getAbsolutePath()); 在本例中,我并不真正需要webappDir,因为我没有提供任何JSP页面或客户端资源,我只是使用response.getWriter().pri

这项工作:

String webappDir = "...";
context = tomcat.addWebapp("/", new File(webappDir).getAbsolutePath());
这并不是:

context = tomcat.addContext("/", new File("").getAbsolutePath());
在本例中,我并不真正需要
webappDir
,因为我没有提供任何JSP页面或客户端资源,我只是使用
response.getWriter().println(…)仅服务器端

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


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

如果您查看这些测试(源代码中的test/org/apache/tomcat/websocket),它们确实存在

注意,传递
null
而不是上下文路径需要最新的Tomcat8(不超过几个月)。目前的版本是8.0.22

我可以假设这是一个tomcat bug吗


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

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

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

因此,在您的例子中,我想您可以按照测试用例来了解如何在上下文中添加端点


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

是的,8.0.21中的测试使用该API。当然,您可以使用websocket。我的意思是,你需要更多的努力来建立它,因为它不是免费的。如果我有时间,我将尝试查看您的git repo。如果您不需要web应用程序上下文,可以直接使用WebSockets JSR 356的Java API而不是tomcat WebSockets API。您可以使用JSR 356将客户端创建为独立的Java应用程序,要构建服务器,您可以使用任何支持WebSockets的Java EE服务器容器,无论是否嵌入(玻璃鱼、阿帕奇雄猫、码头……)部署WebSocketServlet并侦听客户端消息。我认为这是不可能的,websockets API是为在web应用程序中使用套接字而设计的,因此您需要一个容器,如果您不需要web应用程序,请不要使用websockets,只使用Java套接字。我没有自言自语的习惯,问题的作者已经删除了所有内容他的评论,人们永远不会停止让我惊讶…@vzamanillo:你的评论很好,需要阅读。show more comments链接不会让这成为可能。
tomcat.addContext("", null);