【发布时间】:2018-03-27 22:57:03
【问题描述】:
我正在按照this 教程在 java 服务器和 javascript 客户端之间建立 WebSocket 连接,但我在浏览器端遇到了下面提到的错误
WebSocket 连接到“ws://localhost:8080/ws/echo”失败:WebSocket 握手期间出错:意外响应代码:404
我正在使用 tomcat 7.0.42 for Liferay 和 javax.websocket 1.1 jar
我尝试过的:
- 将 javax.websocket jar 的范围更改为提供的 - 相同的错误
- 使用 tomcat7.websocket - 这会导致我的服务器完全崩溃
PS:有些人建议使用 tomcat 7.0.47 或更高版本,但我无法更改现有应用程序的服务器,这必须在 tomcat 7.0.42 上完成
【问题讨论】:
-
404 是“未找到”HTTP 服务器代码。这意味着您点击的 URL 导致服务器认为您请求的资源不在您告诉它查找的位置。我建议查看您正在使用的 URL。也许你打错了,或者教程打错了?
-
@CodeChimp 我已经检查了多次(可能的 URL 不同)并且还遵循了其他教程,但是对于所有这些教程,问题都是一样的。 url中“/ws”代表包名,“/echo”代表端点
-
您确定端口正确吗?您确定正在加载
EchoServer类吗?也许尝试放入一个带有打印输出的默认构造函数,看看它是否正在加载?同样,如果找不到资源,服务器只会 404。此外,您的 URL 与我在教程中看到的不匹配,该教程在 EchoServer 的 cmets 中使用ws://localhost:8080/EchoChamber/echo。对于大多数应用服务器,第一部分是部署名称(JAR/WAR 名称),因此在您的示例中,您的 JAR/WAR 将类似于ws.jar或ws.war。 -
教程中的 EchoChameber 是包含端点“/echo”的类 EchoServer 的包的名称,我将包命名为“ws”,其余相同,也尝试了结合使用 war 文件名带有包名/url
-
只有在端点路径中定义或在上下文根中定义时,才需要
/ws/。它与您的包裹无关。 URL 应为ws://localhost:8080/{context root if any}/echo。如果您的上下文根为空(即您的“欢迎页面”是http://localhost:8080/),那么ws://localhost:8080/echo就足够了。如果你的上下文根是EchoChamber,你的欢迎页面是http://localhost:8080/EchoChamber/,那么你的websocket URI是ws://localhost:8080/EchoChamber/echo
标签: javascript java tomcat websocket