【问题标题】:Using web socket with Tomcat 7在 Tomcat 7 中使用 Web 套接字
【发布时间】:2013-03-29 05:52:07
【问题描述】:

我想使用 web socket,我开始希望使用 tomcat API 来实现。我目前使用的是 Tomcat 7.0.37。

我尝试按照来自 tomcat documentation 的示例代码。

我也在项目中使用 maven,所以我将它添加到我的 pom.xml 中:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-catalina</artifactId>
    <version>7.0.39</version>
    <scope>provided</scope>
</dependency>

第一件事很奇怪,我在 Eclipse 中收到一条错误消息:

private class MyMessageInbound extends MessageInbound

错误消息是“MyMessageInbound 类型的层次结构不一致”,但我仍然能够编译和启动 webapp。

我还在web.xml中添加了如下配置:

<servlet>
    <servlet-name>wsChat</servlet-name>
    <servlet-class>websocket.chat.ChatWebSocketServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>wsChat</servlet-name>
    <url-pattern>/websocket/chat</url-pattern>
</servlet-mapping>

所以,我可以启动 web 应用程序,但是当我进入聊天页面时,我在聊天板上收到错误消息“信息:WebSocket 已关闭。”。 Tomcat 日志给我以下信息:

SEVERE: Servlet.service() for servlet [wsChat] in context with path [/websocket-tuto] threw exception [L''exécution de la servlet a lancé une exception] with root cause
java.lang.NoSuchMethodError: websocket.chat.ChatWebSocketServlet$MyMessageInbound.<init>(Lwebsocket/chat/ChatWebSocketServlet;Luwebsocket/chat/ChatWebSocketServlet$MyMessageInbound;)V
at websocket.chat.ChatWebSocketServlet.createWebSocketInbound(ChatWebSocketServlet.java:34)
at org.apache.catalina.websocket.WebSocketServlet.doGet(WebSocketServlet.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我认为这里唯一缺少的信息是chat page 的来源。

有人看到我做错了吗??

谢谢

【问题讨论】:

    标签: jakarta-ee maven websocket tomcat7


    【解决方案1】:

    我解决了这个问题!

    我尝试在命令行上用 Maven 打包项目,得到这个错误:

    [ERROR] class file for org.apache.coyote.http11.upgrade.UpgradeInbound not found
    

    由此,我只是在 pom.xml 中添加了以下内容:

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-coyote</artifactId>
        <version>7.0.39</version>
        <scope>provided</scope>
    </dependency>
    

    我希望这能帮助其他有同样问题的人。

    【讨论】:

      【解决方案2】:

      你的继承类 MessageInbound 是否实现了 Servlet 接口?您能否提供 ChatWebSocketServlet 或 MessageInbound 类的 doGet 实现?对不起,您的信息完全不完整...

      【讨论】:

      • 全班提供在第一个帖子的第一个link。这在我上一篇文章中可能不清楚,但问题已经解决;)
      • 很高兴听到这个消息。请同时发布您的成功故事。猜猜你对 Tomcat 和 WebSockets 有权限问题,对吧?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 2019-07-14
      • 1970-01-01
      • 2016-12-25
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多