tomcat7 spring boot app

时间:2017-06-21 12:45:42

标签: java spring tomcat websocket

我有一个spring boot war文件,我正在部署到tomcat 7.0.78实例。 Web应用程序启动正常,但Web套接字无法正常工作。它们在嵌入式tomcat环境中运行良好,例如正在运行./gradlew bootRun

我在Chrome控制台中遇到的错误是:

angular.js:14525 Possibly unhandled rejection: Whoops! Lost connection to http://localhost:8080/websock

我尝试将tomcat连接器设置为使用Http11NioProtocol,但似乎没有任何效果。

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
       connectionTimeout="20000"
       redirectPort="8443" />      

我也尝试将其设置为ROOT.war,然后浏览显示:WebSocket connection to 'ws://localhost:8080/websock/424/wzkek0zw/websocket' failed: Error during WebSocket handshake: Unexpected response code: 500.

在tomcat配置文件中是否存在某些东西我缺少正确启用websockets?我的Web套接字配置类如下所示:

@Configuration
@EnableWebSocketMessageBroker
@EnableWebSocket
public class WebSocketConfiguration  extends AbstractWebSocketMessageBrokerConfigurer {


    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/websock").setAllowedOrigins("*").withSockJS();
    }
}

我没有在web.xml中编辑任何内容,只更改了server.xml中的连接器协议。

更新: 我的问题的部分原因是我的连接尝试在前面有一个斜线,例如 $ stomp.connect('/ websock'),所以我把它改成$ stomp.connect('websock')。这在tomcat的windows安装上工作正常,但在ubuntu安装上不起作用。我必须明确告诉它在我的javascript中连接到http://localhost:8080/websock,但是当我尝试连接到Web套接字时出现错误:

webSocket connection to 'ws://localhost:8080/websock/940/qdb1xkkp/websocket' failed: Error during WebSocket handshake: Unexpected response code: 404

1 个答案:

答案 0 :(得分:0)

我的问题是我必须在通过stomp连接到套接字之前获得基本url:

var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
$stomp.connect(baseUrl + '/websock', {})