我尝试运行这个例子:
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());
}
}
我使用Tomcat 7.0.47
,我查看链接:ws://localhost/Tests/chat
。
我是否需要注册此websocket或在web.xml
中添加一些内容?
知道为什么不适合我?
答案 0 :(得分:16)
尝试在Tomcat 7.0.47上使用WebSocket API时遇到了同样的问题。客户端显示的错误消息根本没有任何帮助,我的服务器端端点从未被创建。
在浪费了很多时间后,我发现这是因为我设置了javax.websocket-api
的依赖关系。我正在使用默认范围为compile
的Maven,这会导致问题,因为Tomcat在其lib文件夹中有websocket-api.jar
。将依赖项设置为provided
解决了它。
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
希望这有帮助
值得注意的是,如果在Apache后面运行,则需要mod_proxy_wstunnel
,如果使用IIS,则需要8.0版,因为之前的任何内容都不支持websockets。