Jakarta ee grails 3.0.9 WebSocket 404错误

Jakarta ee grails 3.0.9 WebSocket 404错误,jakarta-ee,grails,java-websocket,Jakarta Ee,Grails,Java Websocket,我正在尝试用grails创建聊天应用程序。我正在使用Grails3.0.9和tomcat-8.0.28 对不起,重复了 我读了这个,然后。。。但这并不能解决我的问题 我已经将javax.websocket-api更改为如下所示: provided 'javax.websocket:javax.websocket-api:1.0' 但我仍然得到这个错误: Firefox:Firefox无法建立与位于“”的服务器的连接 Chrome:WebSocket握手时出错:意外响应代码:404 你可以看到这

我正在尝试用grails创建聊天应用程序。我正在使用Grails3.0.9和tomcat-8.0.28

对不起,重复了

我读了这个,然后。。。但这并不能解决我的问题

我已经将javax.websocket-api更改为如下所示:

provided 'javax.websocket:javax.websocket-api:1.0'
但我仍然得到这个错误:

Firefox
:Firefox无法建立与位于“”的服务器的连接

Chrome
:WebSocket握手时出错:意外响应代码:404

你可以看到这个

这是我的密码

package com.akiong

import grails.util.Environment
import grails.util.Holders

import javax.servlet.ServletContext
import javax.servlet.ServletContextEvent
import javax.servlet.ServletContextListener
import javax.servlet.annotation.WebListener
import javax.websocket.EndpointConfig
import javax.websocket.OnClose
import javax.websocket.OnError
import javax.websocket.OnMessage
import javax.websocket.OnOpen
import javax.websocket.Session
import javax.websocket.server.PathParam
import javax.websocket.server.ServerContainer
import javax.websocket.server.ServerEndpoint
import com.akiong.services.ChatService
import javax.websocket.EncodeException
//import org.codehaus.groovy.grails.commons.ApplicationHolder as AH

import javax.servlet.annotation.WebListener
import java.util.concurrent.CopyOnWriteArraySet

@WebListener
@ServerEndpoint(value="/chat/chatEndPoint/{username}")

public class ServerEndPointDemo implements ServletContextListener {
    private static HashMap<String, String> usersMap = new HashMap<String, String>();
    private static final Set<ServerEndPointDemo> connections = new CopyOnWriteArraySet<>();
    private String username
    private Session session

    @OnOpen
    public void  handleOpen(Session session,@PathParam("username") String user){
        System.out.println("-------------------------------------");
        System.out.println(session.getId() + " has opened a connection");
        println "user = "+user
        connections.add(this);
        this.username   = user
        this.session    = session
    }

    @OnClose
    public void  handleClose(Session session){
        System.out.println("Session " +session.getId()+" has ended");
    }

    @OnMessage
    public String handleMessage(String message,Session session){
       println "message = "+message
       println "session= "+session.getId()

    }

    @OnError
    public void  handleError(Throwable t){
        connections.remove(this);
        println "username = "+username
        removeUserInMap(session.getId(), username);
    }
}
这是我在build.gradle中的依赖项

dependencies {
    compile "org.springframework.boot:spring-boot-starter-logging"
    compile "org.springframework.boot:spring-boot-starter-actuator"
    compile "org.springframework.boot:spring-boot-autoconfigure"
    provided "org.springframework.boot:spring-boot-starter-tomcat"
    compile "org.grails:grails-dependencies"
    compile "org.grails:grails-web-boot"

    compile "org.grails.plugins:hibernate"
    compile "org.grails.plugins:cache"
    compile "org.hibernate:hibernate-ehcache"
    compile "org.grails.plugins:scaffolding"

    runtime "org.grails.plugins:asset-pipeline"

    testCompile "org.grails:grails-plugin-testing"
    testCompile "org.grails.plugins:geb"

    console "org.grails:grails-console"

    //-----------------------------------here i add my code-------------------
    compile 'org.grails.plugins:spring-security-core:3.0.0.M1'

    runtime 'mysql:mysql-connector-java:5.1.20'

    compile "org.grails.plugins:mail:2.0.0.RC2"

    compile 'org.grails.plugins:jms:2.0.0.M1' //http://gpc.github.io/jms/snapshot/guide/introduction.html

    runtime 'org.apache.activemq:activemq-spring:5.11.1'

    provided 'javax.websocket:javax.websocket-api:1.0'

}
===================================================================

我尝试运行:grails prod run应用程序

我的websocket无法工作

但如果我运行grails run应用程序,它就会工作

这是因为我把
ServerEndPointDemo.groovy
放在
/src/main/groovy/com.akiong/ServerEndPointDemo.groovy

==============================================================================

如果(Environment.current==Environment.DEVELOPMENT)


我认为它应该在您当前的grails下工作……只需在app文件夹中运行一个grails应用程序(我还没有尝试过)。还有serverContainer.addEndpoint(WsChatEndpoint)这是在开发模式下对grails 2的一次攻击。也许你可以尝试将其添加到当前的端点,并在其周围不包装任何环境,看看它是否有影响。我将不得不在家中尝试测试项目,直到明天才能看到它是否工作。我尝试使用grails 3.0.9运行……但我得到了这个错误。|错误失败d编译stop-app.groovy:启动失败:stop-app.groovy:60:无法解析GroovyMBean@line 60,第18列。def mbean=new GroovyMBean(服务器,objectName)^然后我下载graisl 3.0.1来运行它..但仍然可以得到它error@vahid您好……我从grails.slack.com
gryphonest
:这可能不是您的问题,但我们在部署支持websocket的应用程序时遇到了一些问题(grails 3.0.9,Tomcat 7)原因很简单,websocket连接被配置为在根上下文上连接。这在grails run app下工作,因为该应用以localhost:[port]/运行,但在Tomcat上失败,因为该应用部署为服务器:[port]/[​*appname*​]/(编辑)​[9:11]我们刚刚更改了tomcat配置,将WAR文件部署到根上下文中,现在可以正常工作了。注释不用于扩展讨论;此对话已完成。
dependencies {
    compile "org.springframework.boot:spring-boot-starter-logging"
    compile "org.springframework.boot:spring-boot-starter-actuator"
    compile "org.springframework.boot:spring-boot-autoconfigure"
    provided "org.springframework.boot:spring-boot-starter-tomcat"
    compile "org.grails:grails-dependencies"
    compile "org.grails:grails-web-boot"

    compile "org.grails.plugins:hibernate"
    compile "org.grails.plugins:cache"
    compile "org.hibernate:hibernate-ehcache"
    compile "org.grails.plugins:scaffolding"

    runtime "org.grails.plugins:asset-pipeline"

    testCompile "org.grails:grails-plugin-testing"
    testCompile "org.grails.plugins:geb"

    console "org.grails:grails-console"

    //-----------------------------------here i add my code-------------------
    compile 'org.grails.plugins:spring-security-core:3.0.0.M1'

    runtime 'mysql:mysql-connector-java:5.1.20'

    compile "org.grails.plugins:mail:2.0.0.RC2"

    compile 'org.grails.plugins:jms:2.0.0.M1' //http://gpc.github.io/jms/snapshot/guide/introduction.html

    runtime 'org.apache.activemq:activemq-spring:5.11.1'

    provided 'javax.websocket:javax.websocket-api:1.0'

}
Configuring Spring Security Core ...
... finished configuring Spring Security Core

anc
Environment.current = PRODUCTION
Environment.DEVELOPMENT = DEVELOPMENT
Environment.current = PRODUCTION
Environment.DEVELOPMENT = DEVELOPMENT
26-Nov-2015 23:29:40.407 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
26-Nov-2015 23:29:40.420 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
26-Nov-2015 23:29:40.769 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [ROOT] created a ThreadLocal with key of type [org.grails.web.converters.configuration.ConvertersConfigurationHolder$2] (value [org.grails.web.converters.configuration.ConvertersConfigurationHolder$2@5ce7a180]) and a value of type [java.util.HashMap] (value [{}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
26-Nov-2015 23:29:40.794 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /root/apache-tomcat-8.0.28/webapps/ROOT.war has finished in 94,084 ms
26-Nov-2015 23:29:40.796 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-80"]
26-Nov-2015 23:29:40.802 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
26-Nov-2015 23:29:40.803 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 94281 ms