与WebSocket的连接失败:意外的响应代码:404

时间:2015-11-16 16:47:55

标签: grails java-websocket

我试图用javax.websocket创建聊天。 我正在使用grails。 3.0

这是我的控制器

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Web Socket JavaScript Echo Client</title>
    <script language="javascript" type="text/javascript">
        var echo_websocket;
        function init() {
            output = document.getElementById("output");
        }
        function send_echo() {
            var wsUri = "ws://192.168.1.2:8080/WebsocketHome/echo";
            writeToScreen("Connecting to " + wsUri);
            echo_websocket = new WebSocket(wsUri);
            echo_websocket.onopen = function (evt) {
                writeToScreen("Connected !");
                doSend(textID.value);
            };
            echo_websocket.onmessage = function (evt) {
                writeToScreen("Received message: " + evt.data);
                echo_websocket.close();
            };
            echo_websocket.onerror = function (evt) {
                writeToScreen('<span style="color: red;">ERROR:</span> '
                + evt.data);
                echo_websocket.close();
            };
        }
        function showErrorInfo(e) {
            alert('Error connecting socket'+e);
        }

        function doSend(message) {
            echo_websocket.send(message);
            writeToScreen("Sent message: " + 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>
</head>
<body>
    <h1>Echo Server</h1>
    <div style="text-align: left;">
        <form action="">
            <input onclick="send_echo()" value="Press to send"
                   type="button">
            <input id="textID" name="message" value="Hello Web Sockets"
                   type="text">
            <br>
        </form>
    </div>
    <div id="output"></div>
</body>
</html>

这是我的index.gsp

public String echo(String incomingMessage) {
println "this is runing"
return "I got this (" + incomingMessage + ")"
+ " so I am sending it back !";
}

这是结果..

enter image description here

我不知道..为什么我得到这个错误...

我试着像这样调试我的代码..

xsd /c Sports.xsd
然后我得到了#34;这是运行&#34;在我的控制台日志中

我该怎么办?

1 个答案:

答案 0 :(得分:0)

在grails 3中添加一个监听器:

  1. 将doWithSpring闭包添加到您的ìnit/ appName / Application.groovy
  2. https://github.com/vahidhedayati/testwschatapp/blob/master/grails-app/init/testwschatapp/Application.groovy#L7-L11

    Closure doWithSpring() {
        {->
            myChatConfig DefaultChatConfig
        }
    }
    

    使用grails-app / init / {appname} /DefaultChatConfig.groovy创建文件

    https://github.com/vahidhedayati/testwschatapp/blob/master/grails-app/init/testwschatapp/DefaultWsChatConfig.groovy

    package myappName
    
    import path.to.WebsocketHomeController
    
    import org.springframework.boot.context.embedded.ServletContextInitializer
    import org.springframework.context.annotation.Bean
    
    import javax.servlet.ServletContext
    import javax.servlet.ServletException
    
    class DefaultChatConfig {
    
        @Bean
        public ServletContextInitializer myInitializer() {
            return new ServletContextInitializer() {
                @Override
                public void onStartup(ServletContext servletContext) throws ServletException {
                    ServletContext.addListener(WebsocketHomeController)
                }
            }
        }
    
    }
    

    您需要整理第二个文件导入路径顶部的导入行.to.WebsocketHomeController

    顺便说一句,我在聊天插件中的评论中建议你可以制作自己的界面。我的意思是与插件进行交互。如果插件为您执行了很多功能,但可以说您希望管理自己的用户。

    您可以在自己的应用程序中编写服务,调用聊天类来查看/编辑/删除等。这与我通过文档中的bootstrap向聊天域类添加管理员帐户的方式完全一样。

    其中一些事情需要花费数年才能完全理解,但如果我想要懒惰,我可以将这些域类从聊天插件复制到测试项目,然后使用grails让它为它们生成控制器和视图然后返回到主项目并复制新的控制器/视图。

    如果插件提供功能服务/域类/控制器。它们都可以在您的主应用程序中本地重用。你可以扩展或者如果它的好处然后只是将它贡献给插件本身供其他人使用