java - Glassfish Websocket无法正常工作

标签 java gradle websocket glassfish

我尝试使用websocket的应用程序。作为服务器,我使用Glassfish可以正常工作,但是websocket存在问题。

当我在控制台中使用javascript运行html时出现错误404

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <display-name>Simple web application </display-name>

</web-app>

build.gradle
repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}
apply plugin: "java"
apply plugin: 'application'
apply plugin: 'war'

mainClassName = "websockets.WebSocketServer"
version = '1.0'


dependencies {
    compile 'javax.inject:javax.inject:1'
    compile 'com.google.inject:guice:4.0'
    compile 'javax.websocket:javax.websocket-api:1.0'
    compile 'org.glassfish.tyrus:tyrus-server:1.1'
    compile 'org.glassfish.tyrus:tyrus-client:1.0'
    compile 'org.glassfish.tyrus:tyrus-container-grizzly:1.0'   
    compile 'javax:javaee-api:7.0'  

    testCompile 'info.cukes:cucumber-java:1.2.4'
    testCompile 'info.cukes:cucumber-junit:1.2.4'
    testCompile 'junit:junit:4.11'
    testCompile "org.mockito:mockito-core:2.0.86-beta"
}

sourceSets {
    main.java.srcDir "src/java"
    test.java.srcDir "src/test"
    main.resources.srcDir 'src/resources'
    main.resources.include '**/*.xml'
    main.resources.include 'META-INF/services/**'
}

processResources.doLast {
    copy {
        from 'build/resources/main/META-INF/beans.xml'
        into 'build/classes/main/META-INF/'
    }
}
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class': 'websockets.WebSocketServer'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
    }
        with jar
}

war { 
 manifest {
    attributes 'Main-Class': 'websockets.WebSocketServer'
  }
}

在src / main / java / websockets中有I WebSocketServer.java
package websockets;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;

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

@ServerEndpoint("/websocket")
public class WebSocketServer {

    @OnMessage
    public void onMessage(String message, Session session)
    throws IOException, InterruptedException {

        // Print the client message for testing purposes
        System.out.println("Received: " + message);

        // Send the first message to the client
        session.getBasicRemote().sendText("This is the first server message");

        // Send 3 messages to the client every 5 seconds
        int sentMessages = 0;
        while(sentMessages < 3){
            Thread.sleep(5000);
            session.getBasicRemote().
            sendText("This is an intermediate server message. Count: "
                     + sentMessages);
            sentMessages++;
        }

        // Send a final message to the client
        session.getBasicRemote().sendText("This is the last server message");
    }

    @OnOpen
    public void onOpen () {
        System.out.println("Client connected");
    }

    @OnClose
    public void onClose () {
        System.out.println("Connection closed");
    }

    @OnError
    public void onError(Session aclientSession, Throwable aThrowable) {
        System.out.println("Error : " + aclientSession); System.out.println("Error :" + aThrowable);
    }
}

Gradle构建没有错误。当我在http://192.168.37.10:8080/web/page.html(无用的虚拟机)中运行应用程序时

抛出错误:

WebSocket connection to 'ws://localhost:8080/web/websocket' failed: Error during WebSocket handshake: Unexpected response code: 404



在glassfish中,在上下文根中添加应用程序:Web

怎么了 ?你能帮助我吗?请。谢谢 :)

最佳答案

您应该将ServerEndPoint设置为一个值。 ServerEndPoint(value =“/ websocket”)

关于java - Glassfish Websocket无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39478107/

相关文章:

java - 为什么 Java OutputStream.write() 需要整数但写入字节

java - 嘶嘶声问题: "fizz" condition doesn't pass unless "buzz" does as well

android - 找不到 com.android.tools.build :gradle:4. 1.1

java - Tomcat 不提供静态文件

Javascript:通过 node.js 二进制 websockets 发送整数数组

java - android.view.InflateException : Binary XML file line #9: Error inflating class com. jjoe64.graphview.helper.GraphViewXML

java - Spring MVC @RequestMapping 对于类级别和方法级别不起作用

android - 错误:无法解决:com.google.android.gms:play-services-ads:18.3.0

rest - 带有backbone.js 的非RESTful 后端

javascript - Python websockets onclose