Java Websocket示例赢得';行不通

Java Websocket示例赢得';行不通,java,tomcat,websocket,Java,Tomcat,Websocket,我尝试运行以下示例: import java.util.logging.Level; import java.util.logging.Logger; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.

我尝试运行以下示例:

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value = "/chat")
public class ChatServer {

    private static final Logger LOGGER = 
            Logger.getLogger(ChatServer.class.getName());

    @OnOpen
    public void onOpen(Session session) {
        LOGGER.log(Level.INFO, "New connection with client: {0}", 
                session.getId());
    }

    @OnMessage
    public String onMessage(String message, Session session) {
        LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}", 
                new Object[] {session.getId(), message});
        return "Server received [" + message + "]";
    }

    @OnClose
    public void onClose(Session session) {
        LOGGER.log(Level.INFO, "Close connection for client: {0}", 
                session.getId());
    }

    @OnError
    public void onError(Throwable exception, Session session) {
        LOGGER.log(Level.INFO, "Error for client: {0}", session.getId());
    }
}
我使用
tomcat7.0.47
,我检查链接:
ws://localhost/Tests/chat
。 我需要注册此websocket还是在
web.xml
中添加一些内容?
知道为什么不适合我吗?

我在Tomcat 7.0.47上使用WebSocket API时遇到了同样的问题。客户端显示的错误消息根本没有任何帮助,而且从未创建我的服务器端终结点

在浪费了很多时间之后,我发现这是由于我为
javax.websocketapi
设置依赖关系的方式造成的。我正在使用Maven,它的默认范围是
compile
,这会导致问题,因为Tomcat的lib文件夹中有
websocket api.jar
。将依赖项设置为
已提供
解决了此问题

    <dependency>
      <groupId>javax.websocket</groupId>
      <artifactId>javax.websocket-api</artifactId>
      <version>1.0</version>
      <scope>provided</scope>
    </dependency>

javax.websocket
javax.websocket-api
1
假如
希望这有帮助


还值得注意的是,如果在Apache之后运行,您将需要
mod_proxy\u wstunnel
,如果使用IIS,您将需要8.0版,因为之前的任何版本都不支持WebSocket。

服务器日志文件中是否有堆栈跟踪/生成的错误消息?当您尝试连接时,浏览器会产生什么?(假设您将浏览器用作客户端…)服务器日志中没有任何内容,看起来请求未到达服务器。为了进行测试,我使用了Chrome应用程序“高级Rest客户端”。你能试试别的吗?“高级Rest客户端”不支持WebSocket连接(我在它们的描述中没有看到)。一些简单的事情应该会起作用。您还可以打开JavaScript错误控制台,在那里通常会显示错误(404500,其他原因…)和相同的结果。我收到消息:到“ws://localhost/Tests/chat”的WebSocket连接失败:意外响应代码:404。服务器端出了点问题。也许我需要另一门课什么的?为什么
ws://localhost/Tests/chat
而不是
ws://localhost/ChatServer/chat
?真的谢谢你兄弟。。我花了4个多小时才发现这个问题,我在这里遇到了相反的问题:我把依赖项放在了前面提供的一个中,但其余的坐标都错了。有趣的是,
javaxjavaeeapi
也可以编译,但不起作用。损失了5个小时…谢谢你!在其他人损失的时间上再增加4小时。另外,如果您使用Tomcat8,它可以工作,而不必指定提供的
。它如何与travis一起工作?我的travis版本在提供范围的情况下失败。@NalinAgrawal这已经很旧了。如果您使用的是Tomcat8或9(或更高版本的7),则不需要它。而且,这是标准的maven材料。使用travis ci没有什么区别