簡體   English   中英

Tomcat 7上的Websocket不起作用

[英]Websockets on tomcat 7 does not work

我嘗試使用Java 8在tomcat 7下運行websocket客戶端,但會引發異常

 SEVERE: Servlet.service() for servlet [appServlet] in context with path [/inter] threw exception [Handler processing failed; nested exception is java.util.ServiceConfigurationError: javax.websocket.ContainerProvider: Provider org.apache.tomcat.websocket.WsContainerProvider not a subtype] with root cause java.util.ServiceConfigurationError: javax.websocket.ContainerProvider: Provider org.apache.tomcat.websocket.WsContainerProvider not a subtype at java.util.ServiceLoader.fail(ServiceLoader.java:239) at java.util.ServiceLoader.access$300(ServiceLoader.java:185) at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) at java.util.ServiceLoader$1.next(ServiceLoader.java:480) at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:66) at com.shop.inter.service.WebsocketClientEndpoint.<init>(WebsocketClientEndpoint.java:29) 

...

它適用於tomcat 8,但不適用於tomcat7。這是我的websocket類:

 @ClientEndpoint public class WebsocketClientEndpoint { private static final Logger LOGGER = LoggerFactory.getLogger(WebsocketClientEndpoint.class); private Session userSession = null; private MessageHandler messageHandler; public WebsocketClientEndpoint(URI endpointURI) { try { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.connectToServer(this, endpointURI); } catch (Exception e) { throw new RuntimeException(e); } } /** * Callback hook for Connection open events. * * @param userSession * the userSession which is opened. */ @OnOpen public void onOpen(Session userSession) { LOGGER.info("opening websocket"); this.userSession = userSession; } /** * Callback hook for Connection close events. * * @param userSession * the userSession which is getting closed. * @param reason * the reason for connection close */ @OnClose public void onClose(Session userSession, CloseReason reason) { LOGGER.info("closing websocket"); this.userSession = null; } /** * Callback hook for Message Events. This method will be invoked when a client send a message. * * @param message * The text message */ @OnMessage public void onMessage(String message) { if (this.messageHandler != null) { this.messageHandler.handleMessage(message); } } /** * Register message handler */ public void addMessageHandler(MessageHandler msgHandler) { this.messageHandler = msgHandler; } /** * Send a message. */ public void sendMessage(String message) { this.userSession.getAsyncRemote().sendText(message); } public void closeUserSession() throws IOException { this.userSession.close(); } /** * Message handler. * * @author Jiji_Sasidharan */ public static interface MessageHandler { public void handleMessage(String message); } } 

唯一的依賴關系是javax.websocket-api 1.1

您能幫我解決這個問題嗎?

作為建議在這里 ,嘗試添加的JavaEE的API給你的依賴:

<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>7.0</version>
</dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM