无法连接到Tomcat中部署的ServerEndpoint

Gen*_*rme 6 javascript java tomcat websocket

很多人都认为我使用的是IDE,所以现在让我说明一下:我不使用任何IDE.


我使用以下Java源代码,将其编译为Echo.class,然后Echo.war通过jar -cvf Echo.war Echo.class在Windows CMD中编写创建,并将文件上传到文件$TOMCAT_HOME/webapps夹中:

@ServerEndpoint("/echo")
public class Echo {

    @OnMessage
    public String echo(String incomingMessage) {
        return "I recieved ('" + incomingMessage + "'), so I am returning it.";
    }
}
Run Code Online (Sandbox Code Playgroud)

启动Tomcat后,我突然有了以下文件夹结构:

<webapps>
    ...
    <Echo.war>
    <Echo>
        <Echo.class>
        <META-INF>
            <MANIFEST.MF>
        </META-INF>
    </Echo>
</webapps>
Run Code Online (Sandbox Code Playgroud)

当尝试通过JavaScript打开到我的端点的websocket连接时new WebSocket("ws://example.com:8080/Echo/echo"),我得到404响应而不是101握手.

如果有任何帮助,这里是经理显示的图片: 在此输入图像描述

(Tomcat 8更新):

我按照本指南更新到Tomcat 8 ,现在catalina.out不再为空,经理现在显示:在此输入图像描述

以下内容catalina.out太大,无法包含在这篇文章中:http://pastebin.com/cwLviH5b

Echo.war在线路被提及650,651,690,和691.


我研究了一下,看到如果用Java 8构建类,但是你的Tomcat在Java 7上运行,你会得到一个UnsupportedClassVersionError.我没有得到那个错误,但我想我也可以更新到服务器上的Java 8.我这样做并重新部署了WAR,但没有任何改变.

我也改变了注释,从@ServerEndpoint("/echo")@ServerEndpoint("/dest")的情况下,有一个名称冲突,但这并没有帮助.


以下是我正在阅读的书中的引用:

部署EchoServer WebSocket端点非常简单.您需要编译源文件,在WAR文件中包含类文件,然后部署WAR文件.Web容器将检测WAR文件中是否包含WebSocket端点,并进行必要的设置以进行部署.完成这些步骤后,您就可以第一次调用WebSocket端点了.

我认为我必须在里面创建一个带有单个类文件的WAR文件,但也许情况并非如此,因为他说"WAR文件"而不是"WAR文件".

根据维基百科的这篇文章,WAR文件必须包含一个web.xml文件(有人可能想知道为什么他没有提到这个).这是真的吗?这是为什么它不起作用?如果是,web.xml应该包含什么?当然,它不仅仅是一个名为"web.xml"的空文件.

San*_*eev 6

创建以下文件结构

WEB-INF
  |
   - classes
        |
         - Echo.class
Run Code Online (Sandbox Code Playgroud)

jar -cvf echo.war *从父文件夹创建您的war文件WEB-INF.将此war文件部署到tomcat并尝试使用web-socket进行连接.