gpt4 book ai didi

java - 嵌入式tomcat 8.0.21中的Spring websocket

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:16 27 4
gpt4 key购买 nike

我想根据示例创建一个 WebSocket。唯一的问题是我在嵌入式 tomcat 中运行我的应用程序。

package com.test.websocket;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.AbstractWebSocketHandler;

public class WebSocketTest extends AbstractWebSocketHandler {
private static Logger logger = LoggerFactory.getLogger(WebSocketTest.class);

@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
logger.debug("Recieved websocket message: " + message);

session.sendMessage(new TextMessage("thanks"));
}

@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
logger.info("WebSocket connection established!");
}

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
logger.info("WebSocket connection closed!");
}
}

配置(websocket.spring.xml):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket.xsd">

<websocket:handlers>
<websocket:mapping path="/socket" handler="webSocketHandler"/>
</websocket:handlers>

<bean id="webSocketHandler" class="com.test.websocket.WebSocketTest"/>
</beans>

Servlet 映射在/websocket/*

从日志来看,似乎 spring-websocket 已成功初始化,但是当我尝试连接到 websocket 时出现此错误。

Servlet.service() for servlet [spring-websocket] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.socket.server.HandshakeFailureException: Uncaught failure for request http://localhost:9876/websocket/socket; nested exception is java.lang.IllegalArgumentException: No 'javax.websocket.server.ServerContainer' ServletContext attribute. Are you running in a Servlet container that supports JSR-356?] with root cause

依赖项是:tomcat-embed-core、tomcat-embed-websocket、tomcat-juli 以及因为(Spring websocket example - error - Are you running in a Servlet container that supports J SR-356?)javax.websocket-api 和 tomcat-websocket

我错过了什么?

提前致谢!

最佳答案

也许我找到了解决您问题的方法。

您需要对嵌入式 tomcat 上下文使用 WsSci servlet 容器初始化程序:

context.addServletContainerInitializer(new WsSci(), null);

https://github.com/spring-projects/spring-boot/issues/439

关于java - 嵌入式tomcat 8.0.21中的Spring websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com