gpt4 book ai didi

java - Websocket 1.0 WebSocketServlet 替换

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:16 25 4
gpt4 key购买 nike

我正在尝试采用使用(现已弃用)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 实现,并且 WebSocketServlet 类已弃用。

我应该使用什么来使用更新的 API 部署我的 servlet?

最佳答案

关于 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 .

关于java - Websocket 1.0 WebSocketServlet 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com