java - 带有嵌入式 Tomcat 的 WebSocket 是 404

标签 java tomcat websocket

我做了两个类:

  1. 带有嵌入式 Tomcat(8.5.20) 的主类
  2. Websocket 的服务器端

我在 IntelliJ IDEA 上运行主类 并运行这个 JavaScript:new WebSocket('ws://localhost:8080/ws') 在 Google Chrome 的控制台中。

我预计响应码是200,但实际上是404。

我该如何解决这个问题?

主类:

package webapp;


import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

import javax.servlet.ServletException;
import java.io.File;

public class Main {
    private static final String STATIC_DIR = "src/main/static/";

    public static void main(String[] args) throws ServletException, LifecycleException {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);

        File staticDir = new File(STATIC_DIR);
        tomcat.addWebapp("/", staticDir.getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();
    }
}

服务器端点:

package webapp.websocket;

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

@ServerEndpoint("/ws")
public class SampleWebSocket {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("open");
    }


    @OnClose
    public void onClose(Session session) {
        System.out.println("close");
    }

    @OnMessage
    public String onMessage(String text) {
        System.out.println("message:" + text);
        return "Server:" + text;
    }
}

谢谢。

最佳答案

我找到了一个解决方案。 这个问题被重复了。

我读了Got 404 error on tomcat 7.0.47 websocket并编辑了我的 pom.xml。

以下是我的整个pom.xml。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>websocket-sample</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>websocket-sample</name>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>8.5.20</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-websocket</artifactId>
            <version>8.5.20</version>
        </dependency>
        <dependency>
            <groupId>javax.websocket</groupId>
            <artifactId>javax.websocket-api</artifactId>
            <version>1.1</version>
        </dependency>
    </dependencies>
</project>

关于java - 带有嵌入式 Tomcat 的 WebSocket 是 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45976817/

相关文章:

java - mysql批量导入文件到长文本

java - 如何让 ByteBuddy 构建类实现并初始化成员变量?

javascript - 我对javascript所做的更改未反射(reflect)在JSP项目中

apache - 如果 80 已被 Apache 使用,我应该在哪个端口上运行 WebSockets 服务器?

Java Spring boot websocket与JS通信

java - 如何过滤Eureka服务器中的Eureka客户端?

c# - 通过网络将压缩数据从 C# 发送到 Java

java - org.apache.jasper.JasperException :/index. jsp

java - 嵌入式 tomcat java 应用程序正在运行,但无法访问服务器

python - 我在 "TypeError: str() takes at most 1 argument (2 given)"变量处收到此错误 "client_response"