2013-04-06 20 views
6

Tôi muốn sử dụng ổ cắm web và tôi bắt đầu tìm cách làm như vậy với API tomcat. Tôi hiện đang sử dụng Tomcat 7.0.37.Sử dụng ổ cắm web với Tomcat 7

Tôi đã cố gắng làm theo mã ví dụ từ tomcat documentation.

Tôi cũng đang sử dụng maven cho dự án, vì vậy tôi thêm này để pom.xml của tôi:

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

Điều đầu tiên đó là lạ, tôi nhận được một thông báo lỗi trong Eclipse cho dòng này:

nhắn
private class MyMessageInbound extends MessageInbound 

lỗi này là "các hệ thống cấp bậc của các loại MyMessageInbound là không phù hợp", nhưng tôi vẫn có thể biên dịch và chạy các ứng dụng web.

Tôi cũng đã thêm các cấu hình trong web.xml như sau:

<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> 

Vì vậy, tôi có thể khởi chạy các ứng dụng web, nhưng khi tôi đi đến trang trò chuyện, tôi nhận được một lỗi trên bảng trò chuyện nói "Thông tin: WebSocket đã đóng.". Nhật ký Tomcat cung cấp cho tôi thông báo sau:

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) 

Tôi nghĩ thông tin còn thiếu duy nhất ở đây là nguồn của chat page.

Bất cứ ai nhìn thấy những gì tôi đang làm sai ??

Cảm ơn

Trả lời

6

Tôi đã giải quyết được vấn đề!

Tôi cố gắng để đóng gói các dự án với Maven trên dòng lệnh, và nhận được lỗi này:

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

Từ đó, tôi chỉ cần thêm dòng sau vào các pom.xml:

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

Tôi hy vọng điều này sẽ giúp những người khác có cùng một vấn đề.

+0

điều này cũng phù hợp với tôi. (Y) – prime

0

Lớp kế thừa của bạn MessageInbound có triển khai giao diện Servlet không? Bạn có thể cung cấp việc thực hiện doGet của ChatWebSocketServlet hoặc lớp MessageInbound không? Xin lỗi, thông tin của bạn chưa đầy đủ ...

+0

Toàn bộ lớp học được cung cấp trong [link] đầu tiên (http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/ chat/ChatWebSocketServlet.java? revision = 1354477 & view = markup) của bài đăng đầu tiên. Và đó có thể là không rõ ràng trong bài viết cuối cùng của tôi, nhưng vấn đề được giải quyết;) – Nuzei

+0

Thats tốt để nghe. Vui lòng đăng câu chuyện thành công của bạn. Đoán bạn có vấn đề quyền với Tomcat và WebSockets phải không? –