【问题标题】:Websocket 1.0 WebSocketServlet replacementWebsocket 1.0 WebSocketServlet 替换
【发布时间】:2013-12-28 19:03:28
【问题描述】:

我正在尝试采用使用(现已弃用)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?

【问题讨论】:

标签: java websocket tomcat7 servlet-3.0


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我正在回答这个老问题,因为如果您寻找 WebSocketServlet 的替代品,这是谷歌上的第一个热门话题。

    由 JSR356 WebSocket 1.0 实现取代,并将在 Tomcat 8.0.x 中删除。

    所以你只需要 javax WebSocket 依赖

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

    并使用此处描述的注释或接口:http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2013-07-17
      • 2016-07-04
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多