Java 通过tomcat中的Servlet实现Websocket

Java 通过tomcat中的Servlet实现Websocket,java,tomcat,servlets,websocket,Java,Tomcat,Servlets,Websocket,我试图通过servlet实现一个web套接字。我的应用服务器是Tomcat7 我可以找到使用WebSocketServlet类的示例。但是这个类在Tomcat8中被弃用并删除了 我看到了另一种选择,即用以下内容注释类 @ServerEndpoint(value = "/websocket/test") 我需要帮助来理解 我将如何在servlet中使用此注释?对于web套接字,servlet是否无关 如果我用上面的注释和其他注释(如onOpen、onClose等)创建一个普通类,我是否需要为 w

我试图通过servlet实现一个web套接字。我的应用服务器是Tomcat7

我可以找到使用
WebSocketServlet
类的示例。但是这个类在Tomcat8中被弃用并删除了

我看到了另一种选择,即用以下内容注释类

@ServerEndpoint(value = "/websocket/test")
我需要帮助来理解

  • 我将如何在servlet中使用此注释?对于web套接字,servlet是否无关
  • 如果我用上面的注释和其他注释(如onOpen、onClose等)创建一个普通类,我是否需要为 web.xml中的那个类?还是web.xml也不相关
  • 任何hello world链接都将非常有用

    多谢各位。 ================已编辑==================== 我已经尝试了这个链接中的聊天示例

    但是,当我试图通过javascript调用套接字时,事件根本没有到达我的服务器……

    看看

    它使用WebSocket进行主传输,使用长轮询进行回退传输

    客户端使用atmosphere.js jQuery插件实现

    使用HTML5浏览器,我也取得了一些成功

     $(document).ready(function(){
    
        var TS = {};
    
        TS.socket = null;
    
        TS.connect = (function(host) {
            if ('WebSocket' in window) {
                TS.socket = new WebSocket(host);
            } else if ('MozWebSocket' in window) {
                TS.socket = new MozWebSocket(host);
            } else {
               alert('Error: WebSocket is not supported by this browser.');
                return;
            }
    
            TS.socket.onmessage = function (message) {
                //Console.log(message.data);
                $("#myd").text (message.data);
            };
        });
    
        TS.initialize = function() {
            if (window.location.protocol == 'http:') {
                TS.connect('ws://' + window.location.host + '/gwebsocket/gwebsocket/servertime');
            } else {
                TS.connect('wss://' + window.location.host + '/gwebsocket/gwebsocket/servertime');
            }
        };
    
        TS.initialize();
    
    });
    

    看看

    它使用WebSocket进行主传输,使用长轮询进行回退传输

    客户端使用atmosphere.js jQuery插件实现

    使用HTML5浏览器,我也取得了一些成功

     $(document).ready(function(){
    
        var TS = {};
    
        TS.socket = null;
    
        TS.connect = (function(host) {
            if ('WebSocket' in window) {
                TS.socket = new WebSocket(host);
            } else if ('MozWebSocket' in window) {
                TS.socket = new MozWebSocket(host);
            } else {
               alert('Error: WebSocket is not supported by this browser.');
                return;
            }
    
            TS.socket.onmessage = function (message) {
                //Console.log(message.data);
                $("#myd").text (message.data);
            };
        });
    
        TS.initialize = function() {
            if (window.location.protocol == 'http:') {
                TS.connect('ws://' + window.location.host + '/gwebsocket/gwebsocket/servertime');
            } else {
                TS.connect('wss://' + window.location.host + '/gwebsocket/gwebsocket/servertime');
            }
        };
    
        TS.initialize();
    
    });
    


    我终于明白了。因此,我在这里回答,供其他人参考

    1) 我将如何在servlet中使用此注释?对于web套接字,servlet是否无关

    显然是的,web套接字不需要servlet

    2) 如果我用上面的注释和其他注释(如onOpen、onClose等)创建一个普通类,我是否需要将该类的条目放在web.xml中?还是web.xml也不相关

    web.xml中也不需要任何条目

    下面是一个示例服务器端代码

    @ServerEndpoint(value = "/echo")
    public class Echo {
    
        @OnOpen
        public void start(Session session) {
            //TODO
        }
    
        @OnClose
        public void end() {
            //TODO
        }
    
        @OnMessage
        public void incoming(String message) {
            //TODO
        }
    
        @OnError
        public void onError(Throwable t) throws Throwable {
            //TODO
        }
    
    }
    
    对于客户端,如果您有兼容HTML5的浏览器,则可以使用Javascript。
    否则,您将使用tyrus库编写java客户机。参考

    我终于明白了这一点。因此,我在这里回答,供其他人参考

    1) 我将如何在servlet中使用此注释?对于web套接字,servlet是否无关

    显然是的,web套接字不需要servlet

    2) 如果我用上面的注释和其他注释(如onOpen、onClose等)创建一个普通类,我是否需要将该类的条目放在web.xml中?还是web.xml也不相关

    web.xml中也不需要任何条目

    下面是一个示例服务器端代码

    @ServerEndpoint(value = "/echo")
    public class Echo {
    
        @OnOpen
        public void start(Session session) {
            //TODO
        }
    
        @OnClose
        public void end() {
            //TODO
        }
    
        @OnMessage
        public void incoming(String message) {
            //TODO
        }
    
        @OnError
        public void onError(Throwable t) throws Throwable {
            //TODO
        }
    
    }
    
    对于客户端,如果您有兼容HTML5的浏览器,则可以使用Javascript。
    否则,您将使用tyrus库编写java客户机。请参阅

    谢谢您的回答。是的,气氛是一个流行的选择,我已经做了一个Hello World。我还用Tyrus罐子做了一个hello world。但我想尝试使用Java和tomcat实现一个普通的实现。请更新我的答案,了解我发现用于HTML5浏览器的一些代码-不知道我从哪里偷来的。谢谢你的回答。是的,气氛是一个流行的选择,我已经做了一个Hello World。我还用Tyrus罐子做了一个hello world。但我想尝试使用Java和tomcat实现一个普通的实现。更新我的答案,获取一些我发现用于HTML5浏览器的代码——不知道从哪里偷来的。