在Tomcat 7中使用Web套接字

Nuz*_*zei 6 java-ee websocket maven tomcat7

我想使用Web套接字,我开始寻求使用tomcat API.我目前正在使用Tomcat 7.0.37.

我试图遵循tomcat 文档中的示例代码.

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

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-catalina</artifactId>
    <version>7.0.39</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

private class MyMessageInbound extends MessageInbound
Run Code Online (Sandbox Code Playgroud)

错误消息是" 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>
Run Code Online (Sandbox Code Playgroud)

所以,我可以启动webapp,但是当我进入聊天页面时,我在聊天板上收到错误消息" Info: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)
Run Code Online (Sandbox Code Playgroud)

我认为这里唯一缺少的信息是聊天页面的来源.

有谁看到我做错了什么?

谢谢

Nuz*_*zei 6

我解决了这个问题!

我尝试在命令行上使用Maven打包项目,并收到此错误:

[ERROR] class file for org.apache.coyote.http11.upgrade.UpgradeInbound not found
Run Code Online (Sandbox Code Playgroud)

从这里,我刚刚将以下内容添加到pom.xml:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-coyote</artifactId>
    <version>7.0.39</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我希望这会帮助其他人解决同样的问题.