2013-04-06 11 views
6

Vorrei utilizzare la presa Web e ho iniziato a cercare di farlo con l'API tomcat. Attualmente sto usando Tomcat 7.0.37.Utilizzo della presa Web con Tomcat 7

Ho provato a seguire il codice di esempio da Tomcat documentation.

Inoltre sto usando Maven per il progetto, così ho aggiunto questo al mio pom.xml:

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

La prima cosa che è strano, ottengo un messaggio di errore in Eclipse per questa linea:

messaggio
private class MyMessageInbound extends MessageInbound 

l'errore è "la gerarchia del tipo MyMessageInbound è incoerente", ma sono ancora in grado di compilare e lanciare la webapp.

Ho anche aggiunto la configurazione nel web.xml come segue:

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

così, sono in grado di lanciare la webapp, ma quando vado alla pagina di chat, ottengo un errore sulla bacheca dicendo "Info: WebSocket chiuso.". Tomcat log darmi il seguente messaggio:

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) 

penso che l'unica informazione che manca qui è la fonte del chat page.

Qualcuno capisce cosa sto facendo male ??

Grazie

risposta

6

Ho risolto il problema!

ho cercato di confezionare il progetto con Maven sulla linea di comando, e ottenere questo errore:

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

Da questo, ho solo aggiunto quanto segue alla pom.xml:

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

Spero che questo aiuti gli altri con lo stesso problema.

+0

questo ha funzionato anche per me. (Y) – prime

0

La classe ereditata MessageInbound implementa l'interfaccia Servlet? Puoi fornire l'implementazione doGet del tuo ChatWebSocketServlet o della classe MessageInbound? Mi dispiace amico, le tue informazioni sono incomplete ...

+0

L'intera classe è fornita nel primo [collegamento] (http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/examples/WEB-INF/classes/websocket/ chat/ChatWebSocketServlet.java? revision = 1354477 & view = markup) del primo post. E questo forse non è chiaro nel mio ultimo post, ma il problema è risolto;) – Nuzei

+0

È bello saperlo. Per favore pubblica anche la tua storia di successo. Indovina che hai avuto problemi di autorizzazione con Tomcat e WebSockets giusto? –