【问题标题】:Tomcat 7 Websocket handshake: Unexpected response code: 404Tomcat 7 Websocket 握手:意外的响应代码:404
【发布时间】: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.jarws.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


【解决方案1】:

据我了解,tomcat 7.0.42 不支持 websocket

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 2015-06-09
    • 2014-05-15
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多