tomcat 7.0.50 java websocket 实现给出 404 错误

2024-05-23

我正在尝试使用 Java Websocket API (1.0)- JSR 356 中指定的带注释端点在 tomcat 7.0.50 上实现 websocket。以下是我如何对其进行编码的简要步骤 1)使用@ServerEndpoint注解编写websocket端点 2)实现@onOpen和@onMessage方法 3)在谷歌浏览器上使用javascript打开一个websocket。

请按顺序查找上述步骤对应的代码

1) 第 1 步和第 2 步 - 编写 websocket 服务器端点:

        package com.jkweb.websocket;

       import java.io.IOException;
       import java.util.HashMap;
       import java.util.List;
       import java.util.Map;

       import javax.websocket.EndpointConfig;
       import javax.websocket.OnMessage;
       import javax.websocket.OnOpen;
       import javax.websocket.Session;
       import javax.websocket.server.PathParam;
       import javax.websocket.server.ServerEndpoint;

       import org.slf4j.Logger;
       import org.slf4j.LoggerFactory;

  @ServerEndpoint(value="/websocket/fileuploadtracker")

@OnOpen 
public void open(Session session,EndpointConfig config) {
    ......
}
@OnMessage
public void onMessage(Session session, String msg) {
    try {
        session.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

public static void sendMessage(String uniqueTocken,String msg){
    try {
        Session wsSession = socketConnectionMap.get(uniqueTocken);
        wsSession.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

}

2) 第 3 步 - 在 Chrome 中使用 javascript api 打开 websocket:

      wsurl =  "ws://localhost:8080/jkweb/websocket/fileuploadtracker",
        ws; 
        ws = new WebSocket(wsurl);
         ws.onopen = function()
         {
            // Web Socket is connected, send data using send()
            ws.send("Sending first Message");
            alert("Message is sent...");
         };
         ws.onmessage = function (evt) 
         { 
            var received_msg = evt.data;
            alert("Message is received...");
         };
         ws.onclose = function(evt)
         { 
            // websocket is closed.
            alert("Connection is closed..."+evt.code + ":"+evt.reason ); 
         };        

我正在使用以下版本的软件: 1) 雄猫 - 7.0.50 2) Java - 1.7.45 3)Servlet - 3.0 4) 已包含以下 Maven 依赖项 5) 铬 - 32.0.1700.107m

     <dependency>
     <groupId>javax.websocket</groupId>
     <artifactId>javax.websocket-api</artifactId>
     <version>1.0</version>
         <scope>provided</scope>
</dependency>   

但是我收到以下错误,并且在 chrome 控制台中连接已关闭,错误代码为 1066:

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

有没有我遗漏的配置。我尝试搜索很多但找不到任何东西。请尽快解决这个问题。


我已经解决了。问题与我的安装非常具体。 我也将 websocket api .jar 安装在我的应用程序的 WEB-INF/lib 目录中。 不知道为什么它会打破它。您能否阐明此行为的根本原因以及为什么当您在应用程序的 WEB-INF/lib 中提供 websocket-api.jar 以及 tomcat 的 lib 时它不起作用?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tomcat 7.0.50 java websocket 实现给出 404 错误 的相关文章

随机推荐

  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • 依次构建完整的 B 树

    如果我有一组排序的数据 我想以最适合顺序读取和随机查找的方式将其存储在磁盘上 那么 B 树 或其中一个变体 似乎是一个不错的选择 假设该数据集并不全部适合 RAM 问题是可以从一组排序的数据构建完整的 B 树而不进行任何页面拆分吗 这样排序
  • 如何返回 cost, grad 作为 scipy 的 fmin_cg 函数的元组

    我怎样才能使 scipy 的fmin cg使用一个返回的函数cost and gradient作为元组 问题是有f对于成本和fprime对于梯度 我可能必须执行两次操作 非常昂贵 grad and cost被计算 此外 在它们之间共享变量可
  • Razor C# - 从数据库获取数据

    我正在使用 WebMatrix 我创建了一个数据库并放置了一个包含几行数据的表 我可以连接到它并获取数据WebGrid 但它只提供了一种使用表格输出数据的方法 这是我的 shows cshtml 代码 var db Database Ope
  • 当使用 XHTML 严格且无 JavaScript 时,替代 target="_blank"!

    我需要严格使用 XHTML 我需要确保我的网站无需使用 JavaScript 即可运行 我需要从我自己的应用程序打开一个新的帮助窗口 当然 当没有检测到 javascript 时 我想使用 target blank 但这不是 XHTML 严
  • 如何在 Postgresql 中将 GIST 或 GIN 索引与 hstore 列一起使用?

    我正在使用 postgresql 9 3 的 hstore 我正在尝试对 hstore 列使用索引就像文档所述 http www postgresql org docs 9 3 static hstore html 我的问题是索引似乎没有被
  • GDI+、JPEG 图像到 MemoryStream 中发生一般错误

    这似乎是整个网络上一个臭名昭著的错误 以至于我无法找到问题的答案 因为我的场景不适合 当我将图像保存到流中时 会引发异常 奇怪的是 这对于 png 来说效果很好 但是对于 jpg 和 gif 却给出了上述错误 这是相当令人困惑的 大多数类似
  • CMake:连续编译程序两次

    为了能够进行许多自动优化 我希望能够使用标志编译我的程序 fprofile generate首先 然后运行它生成配置文件 然后使用以下命令重新编译程序 fprofile use反而 这意味着我想连续编译我的程序两次 使用两个不同的CMAKE
  • 删除Vue子组件

    我真的被这个问题困扰了 我创建了一个由子组件组成的 Vue 2 0 组件 它全部都是 Webpacked 等 例如 这是父组件 div h1 This is just a title for lulz h1 div
  • 在哪里可以找到有关页面请求生命周期的详细教程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 关于页面请求生命周期的详细教程 我已经阅读了 ASP NET 页面生命周期 我正在谈论 NET 进程开
  • Div 独特的 CSS 样式链接

    我想为单个特定 div 中的链接创建独特的样式 例如 我希望主体中的所有链接为粗体和红色 但在侧边栏 div 中我希望它们为蓝色和斜体 我该怎么办 I have a link color 666666 a visited color 003
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • 使用 ansible 处理程序滚动重启

    我想运行一个 ansible playbook 它会安装一个服务 如果自上次运行以来发生任何更改 或多或少是 ansible 处理程序的规范用例 则重新启动它 但我想要一个不同的并行性用于安装而不是重新启动 我想一次在所有主机上安装 但是
  • 如何让位置音频在 SceneKit 中工作?

    我在使位置音频在 SceneKit 中工作时遇到问题 从 Xcode 生成的 SceneKit 游戏模板开始 我将以下代码添加到handleTap 方法的末尾 let ship scnView scene rootNode childNod
  • C++ Lambda:访问 lambda 中的静态方法会导致错误“未为此 lambda 函数捕获此错误”

    考虑以下代码 this is what I want to call I cannot modify its signature void some library method void fp void class Singleton p
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • Talend 和 Apache Spark?

    我对 Talend 和 Apache Spark 在大数据生态系统中的定位感到困惑 因为 Apache Spark 和 Talend 都可以用于 ETL 有人可以用一个例子解释一下吗 Talend 是一种基于工具的大数据方法 通过内置组件支
  • 将 java 中的 byte[] 转换为 C++ 中的 unsigned char* 的正确方法,反之亦然?

    我是 C 和 JNI 的新手 我尝试找到一种正确的方法 通过使用 JNI 将 java 中的 byte 转换为 C 中的 unsigned char 反之亦然 我正在安卓上工作 在谷歌和SO中寻找解决方案后 我还没有找到将java中的byt
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w