我正在尝试采用使用(现已弃用)WebSocketServlet
的旧代码。旧代码如下所示:
@Singleton
ExampleServlet extends WebSocketServlet {
@Override
protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest request) {
// Do something
// ...
return // StreamInbound impl;
}
}
正如我在较新版本的tomcat 7中所说,从tomcat 8(WebSocket 1.0,Tyrus)向后移植的WebSocket实现已被弃用。
我应该使用哪种方法来使用更新的API部署我的servlet?
答案 0 :(得分:5)
关于KIC的答案 - 并不是所有需要的 由于JSR356应与Tomcat 8. *一起使用,因此您需要修改以下类:
class MyWebSocket extends WebSocketServlet
于:
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value="/your-websocket-endpoint")
class MyWebSocket
然后,由于StreamInbound
在Tomcat 8. *中也被弃用,您需要编写自己的方法来处理打开,关闭,错误和消息事件:
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
@OnOpen
void onOpen(Session session) { }
@OnClose
void onClose(Session session) { }
@OnMessage
void onMessage(Session session, String message) { }
@OnError
void onError(Session session, Throwable throwable) { }
最后,Tomcat已经提供了javax.websocket。*类,它不应该包含在你的应用程序中。对于Maven依赖是:
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
并且Gradle是:
providedCompile 'javax.websocket:javax.websocket-api:1.0'
请参阅相关文章 Tomcat 8 and Websocket
答案 1 :(得分:1)
我正在回答这个老问题,因为如果你想要替换WebSocketServlet,这是谷歌的第一次打击。
由JSR356 WebSocket 1.0实现替换,将在Tomcat 8.0.x中删除。
所以你只需要javax WebSocket dependecy
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
</dependency>
并使用此处描述的annontations或接口:http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html
就是这样。