Websocket 不工作:意外响应代码 404

2024-02-21

我正在尝试使用 websockets 创建 javaee 应用程序,但无法让程序正常工作。使用 Tomcat 7、带有 Websockets 的 Java EE 7 应用程序。

这是我的java代码:

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

@ServerEndpoint(value="/hello")
public class EchoEndpoint {
    RemoteEndpoint.Async endpoint;
    @OnOpen
    public void open(Session session, EndpointConfig conf) { 
        //Connection opened.
        System.out.println("EchoEndpoint on open");
        endpoint = session.getAsyncRemote(); 
    }

    @OnMessage
    public void onMessage(Session session, String msg) {
        //Message received.
        System.out.println("EchoEndpoint on message");
    }

    @OnError
    public void error(Session session, Throwable error) { 
        //Connection error.
        System.out.println("EchoEndpoint on error");
    }

    @OnClose
    public void close(Session session, CloseReason reason) { 
        //Connection closed.
        System.out.println("EchoEndpoint on close");
    }

    public void send(String string) {
        System.out.println("Send called to EchoEndpoint");
        endpoint.sendText(string);
    }
}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app
        version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

</web-app>

索引.html:

<!DOCTYPE html>  
    <meta charset="utf-8" />  
    <title>WebSocket Test</title>  
    <script language="javascript" type="text/javascript">  
        var wsUri = "ws://localhost:8080/myapp/hello"; 
        var output;  
        function init() { 
            output = document.getElementById("output"); 
            testWebSocket(); 
        }  

        function testWebSocket() { 
            websocket = new WebSocket(wsUri);
            websocket.onopen = function(evt) { onOpen(evt) };
            websocket.onclose = function(evt) { onClose(evt) }; 
            websocket.onmessage = function(evt) { onMessage(evt) }; 
            websocket.onerror = function(evt) { onError(evt) }; 
        }  

        function onOpen(evt) { 
            writeToScreen("CONNECTED"); 
            doSend("WebSocket rocks"); 
        }  

        function onClose(evt) { 
            writeToScreen("DISCONNECTED"); 
        }  

        function onMessage(evt) { 
            writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>'); 
            //websocket.close(); 
        }  

        function onError(evt) { 
            writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); 
        } 

        function doSend(message) { 
            writeToScreen("SENT: " + message);  
            websocket.send(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>  

    <h2>WebSocket Test</h2>  
    <div id="output"></div>  
</html>

在客户端尝试执行时:

websocket = new WebSocket(wsUri);

I get:

与 ws://localhost:8080/myapp/hello 的 Websocket 连接失败: 意外响应代码:404

我是否错过了 web.xml 或其他地方的某些内容?


WebSocket 在 Tomcat 7 中通过扩展 WebSocketServlet 来实现。但是Tomcat 8中引入了WebSocket 1.0 API。您的代码与Tomcat 7不兼容。请使用tomcat 8并尝试同样的操作。

更新...

现在,Tomcat7 支持 websocket 正如 @samael 所说

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

Websocket 不工作:意外响应代码 404 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 如何在绘制 partykit 的 ctree 输出时抖动节点分割字符串?

    我有一个问题 我主要使用分类数据 在分类树中设置为一类因子 我正在使用partykit包在 R 中而不是party正如之前的答案所示 前一个包更适合图形输出的操作 我的真实数据集中没有很多节点 大约 7 个 但是某些变量有相当多的因子级别
  • UITableViewCell的UITextField子视图,获取cell的indexPath

    我添加了一个UITextField作为 a 的子视图UITableViewCell 然后我添加了一个target and selector这样我就可以知道什么时候UIControlEventEditingChanged 这很好用 但我想让你
  • ipad Web 应用程序:如何防止键盘在 jquery datepicker 上弹出

    我有一个带有日期字段的表单 上面附加了 jquery 日期选择器 当我选择日期字段时 日期选择器会弹出 但随后 iPad 键盘会滑入视图并遮盖日期选择器 在这种情况下如何防止键盘弹出 我使用了 Rob Osborne 解决方案的稍微修改版本
  • 如何在vs08中设置_win32_wce的预处理器定义

    如何在 vs08 中设置预处理器定义 默认情况下 win32 wce 的值为 CEVER set 但是当我构建项目时 出现错误 c1017 无效整数常量表达式 并警告环境变量 CEVER 和 ceplatform 未设置 但是当我设置它 w
  • Eclipse RCP 在编辑器中更改后更新视图

    我是 Eclipse RCP 新手 有以下场景 一个插件 即应用程序 另一个女巫是一个视图并且确实显示 一些数据 第三个是 编辑 在视图中 我可以右键单击记录并选择编辑 这会打开编辑器并让我更改数据 不 我想在保存编辑器时刷新视图 我认为这
  • LinearLayout 标记是否在 CardView 中使用

    我在 CardView 中使用了 LinearLayout 来获得一种社交媒体登录按钮的外观 一切都运行良好 但 Android Studio 标记Element LinearLayout is not allowed here 我想知道为
  • EF 是否在 DbContext 的不同实例之间缓存实体?

    在 Asp net 中为每个查询创建 DbContext 是否会使 EF 仅从其缓存中读取数据 还是每次都会查询 DB 来获取整个集合 我了解每个 AppDomain 的元数据缓存 但是仅数据呢 上下文 使用 MVC4 Web API 前端
  • 如何将表中的所有数据导出为可插入的sql格式?

    我有一张桌子 称之为A table 在数据库中 称之为A db 在 Microsoft SQL Server Management Studio 中 有 10 行 我有另一个数据库 称之为B db 并且它有一个表 称之为B table 其列
  • 如何重新安装损坏的 npm

    我刚刚安装了节点v9 11 1当我尝试使用 npm 时 我不断收到以下错误 npm WARN npm npm does not support Node js v9 11 1 npm WARN npm You should probably
  • 将输出读取到文件 Node.js

    如何将输出写入文件 我尝试代替process stdout use fs createWriteStream temp export2 json 但它不起作用 var rl readline createInterface input fs
  • Spark Dataframe 除了方法问题

    我有一个减去两个数据帧的用例 所以我使用了数据框 except 方法 这在本地较小的数据集上运行良好 但是当我运行 AWS S3 存储桶时 except 方法没有按预期产生负值 分布式环境有什么需要注意的吗 有人遇到过类似的问题吗 这是我的
  • iPhone UIApplicationExitsOnSuspend 无效

    UIApplicationExitsOnSuspend 不会强制我的应用程序退出 我已经清理过目标 删除了应用程序 重建并重新安装了很多次 我真的需要退出我的应用程序 您是否链接了 SDK 4 该键仅在这种情况下有效
  • 如何从 R extrafontdb 取消注册已删除的字体

    我已经使用加载了我的字体 library extrafont font import 当我使用查看路径时 fonttable 该路径下有一些不再存在的字体 这给我以后带来了一些问题 如何从字体数据库中删除 取消注册它们 仅重新运行 font
  • Wordpress-如何检测当前页面是否是登录页面

    有没有比使用全局变量更好的方法 pagenow检测当前页面是否是登录页面 例如is admin 功能 if pagenow wp login php is admin Do something 有一个全局变量 current screen带
  • 在 Webstorm 中运行 Mocha 测试

    我使用以下 NPM 启动命令在 Webstorm 的终端窗口中运行 React 的 Mocha 测试 tsc mocha compilers js babel core register require test helper js tes
  • JavaScript:%s 或 %d 代表字符串?

    有人可以解释一下这里发生了什么吗 我懂了 d and s但我没有在代码的其他地方看到这些声明或写入 这在 JavaScript 中到底意味着什么 做什么 我假设这是一种我以前从未见过的字符串模板 passport deserializeUs
  • 在 JavaScript 中获取字符串中破折号后的所有内容

    在 IE 和 Firefox 中都可以使用的最简洁的方法是什么 我的字符串看起来像这样sometext 20202 Now the sometext破折号后面的整数可以有不同的长度 我应该只使用substring和索引还是还有其他方法 我将
  • Typescript 编译器错误 TS2307:找不到模块“jquery”

    我正在关注 JSPM 入门guide http jspm io docs getting started html我想安装 jquery 包 所以我执行以下命令 jspm install jquery 但是当我尝试将其导入打字稿时 如下所示
  • 如何对一组多列进行透视?以及如何从长格式恢复到原始宽格式?

    如果我有以下数据 D tibble tribble firm ind var1 1 var1 2 op2 1 op2 2 A 1 10 11 11 12 A 2 12 13 13 14 B 1 14 15 15 16 B 2 16 17 1
  • Websocket 不工作:意外响应代码 404

    我正在尝试使用 websockets 创建 javaee 应用程序 但无法让程序正常工作 使用 Tomcat 7 带有 Websockets 的 Java EE 7 应用程序 这是我的java代码 import javax websocke