首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过servlet.context.path连接websocket

无法通过servlet.context.path连接websocket
EN

Stack Overflow用户
提问于 2019-07-04 18:28:28
回答 1查看 626关注 0票数 0

我有一个spring引导应用程序(2.0.5.RELEASE),它在端口8989上运行。应用程序通过websocket将日志消息发送到客户端。我已经创建了一个javascript客户端,它连接到websocket并将消息附加到html文本区域。此客户端位于应用程序的resource\static\js文件夹下。当我不使用servet.context.path时,它工作得很好。有没有办法,我可以用上下文路径来解决。我是否遗漏了一些配置参数?我真的很感谢你在这方面的帮助。

Application.properties

代码语言:javascript
复制
server.port=8989
server.servlet.contextPath=/DemoService/webresources/test/

Websocket配置如下:

代码语言:javascript
复制
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    /**
     * Register Stomp endpoints: the url to open the WebSocket connection.
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {

        // Register the "/websocket" endpoint, enabling the SockJS protocol.
        // SockJS is used (both client and server side) to allow alternative
        // messaging options if WebSocket is not available.
        registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS();
    }

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

}

客户端看起来像这样,

代码语言:javascript
复制
 $(window).ready(function() {
    connect();
});

function connect() {
//  var socket = new SockJS('/websocket');
    var socket = new SockJS('/DemoService/webresources/test/websocket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function(frame) {
        stompClient.subscribe('/topic/pushlognotification', function(
                notification) {
            var txt = $('#textArea');
            txt.val(txt.val() + "\n" + "\n" + notification);
            txt.scrollTop(txt[0].scrollHeight);
        });
    });
}

HTML页面是:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Messages</title>
</head>
<body>
<textarea type="text"  id="textArea" placeholder="Messages..." rows="15" cols="60"></textarea>

<script src='js/jquery.min.js'></script>
<script src="js/index.js"></script>
<script src="/webjars/sockjs-client/sockjs.min.js"></script>
<script src="/webjars/stomp-websocket/stomp.min.js"></script>
</body>
</html>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 21:02:40

在检查控制台输出后找到了解决方案。

由于配置的上下文路径,HTML代码无法通过'js/jquery.min.js‘等src找到注册文件。解决方案是将上下文路径附加到所有src,如下所示。

或者给一个".“签名

这对我很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56885959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档