加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Websocket无法正常工作:意外响应代码404

发布时间:2020-12-15 04:13:03 所属栏目:Java 来源:网络整理
导读:我试图用websockets创建 javaee应用程序,但无法让程序正常工作.使用Tomcat 7,带有websockets的 Java EE 7应用程序. 这是我的java代码: import javax.websocket.CloseReason;import javax.websocket.EndpointConfig;import javax.websocket.OnClose;import j
我试图用websockets创建 javaee应用程序,但无法让程序正常工作.使用Tomcat 7,带有websockets的 Java EE 7应用程序.

这是我的java代码:

import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value="/hello")
public class EchoEndpoint {
    RemoteEndpoint.Async endpoint;
    @OnOpen
    public void open(Session session,EndpointConfig conf) { 
        //Connection opened.
        System.out.println("EchoEndpoint on open");
        endpoint = session.getAsyncRemote(); 
    }

    @OnMessage
    public void onMessage(Session session,String msg) {
        //Message received.
        System.out.println("EchoEndpoint on message");
    }

    @OnError
    public void error(Session session,Throwable error) { 
        //Connection error.
        System.out.println("EchoEndpoint on error");
    }

    @OnClose
    public void close(Session session,CloseReason reason) { 
        //Connection closed.
        System.out.println("EchoEndpoint on close");
    }

    public void send(String string) {
        System.out.println("Send called to EchoEndpoint");
        endpoint.sendText(string);
    }
}

web.xml中:

<?xml version="1.0" encoding="UTF-8"?>

<web-app
        version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

</web-app>

index.html的:

<!DOCTYPE html>  
    <meta charset="utf-8" />  
    <title>WebSocket Test</title>  
    <script language="javascript" type="text/javascript">  
        var wsUri = "ws://localhost:8080/myapp/hello"; 
        var output;  
        function init() { 
            output = document.getElementById("output"); 
            testWebSocket(); 
        }  

        function testWebSocket() { 
            websocket = new WebSocket(wsUri);
            websocket.onopen = function(evt) { onOpen(evt) };
            websocket.onclose = function(evt) { onClose(evt) }; 
            websocket.onmessage = function(evt) { onMessage(evt) }; 
            websocket.onerror = function(evt) { onError(evt) }; 
        }  

        function onOpen(evt) { 
            writeToScreen("CONNECTED"); 
            doSend("WebSocket rocks"); 
        }  

        function onClose(evt) { 
            writeToScreen("DISCONNECTED"); 
        }  

        function onMessage(evt) { 
            writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>'); 
            //websocket.close(); 
        }  

        function onError(evt) { 
            writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); 
        } 

        function doSend(message) { 
            writeToScreen("SENT: " + message);  
            websocket.send(message); 
        }  

        function writeToScreen(message) { 
            var pre = document.createElement("p"); 
            pre.style.wordWrap = "break-word"; 
            pre.innerHTML = message; 
            output.appendChild(pre); 
        }  

        window.addEventListener("load",init,false);  
    </script>  

    <h2>WebSocket Test</h2>  
    <div id="output"></div>  
</html>

在客户端尝试执行时:

websocket = new WebSocket(wsUri);

我明白了:

Websocket connection to ws://localhost:8080/myapp/hello failed:
Unexpected responce code: 404

我在web.xml或其他地方错过了什么吗?

解决方法

WebSocket通过扩展WebSocketServlet在Tomcat 7中实现.但是在tomcat 8中引入了WebSocket 1.0 API.您的代码与Tomcat 7不兼容.请使用tomcat 8并尝试相同.

更新中…

现在,Tomcat7支持websocket,正如@samael所说

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读