无法通过 servlet.context.path 连接 websocket
Cannot connect websocket over servlet.context.path
我有一个 spring 引导应用程序 (2.0.5.RELEASE),它在端口 8989 上 运行。该应用程序通过 websocket 将日志消息发送到客户端。
我已经创建了一个连接到 websocket 并将消息附加到 html 文本区域的 javascript 客户端。此客户端位于应用程序的 resource\static\js 文件夹下。
当我不使用 servet.context.path 时,它工作正常。
有什么办法,我可以用上下文路径来解决。
我缺少一些配置参数吗?
非常感谢您在这方面的帮助。
Application.properties
server.port=8989
server.servlet.contextPath=/DemoService/webresources/test/
Websocket配置如下:
@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");
}
}
客户端是这样的,
$(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 页面是:
<!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>
检查控制台输出后找到解决方案。
由于配置的上下文路径,HTML代码无法通过'js/jquery.min.js'等src找到注册文件。
解决方案是将上下文路径附加到所有 src,如下所示。
或者给个“.”签名
这对我有用。
我有一个 spring 引导应用程序 (2.0.5.RELEASE),它在端口 8989 上 运行。该应用程序通过 websocket 将日志消息发送到客户端。 我已经创建了一个连接到 websocket 并将消息附加到 html 文本区域的 javascript 客户端。此客户端位于应用程序的 resource\static\js 文件夹下。 当我不使用 servet.context.path 时,它工作正常。 有什么办法,我可以用上下文路径来解决。 我缺少一些配置参数吗? 非常感谢您在这方面的帮助。
Application.properties
server.port=8989
server.servlet.contextPath=/DemoService/webresources/test/
Websocket配置如下:
@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");
}
}
客户端是这样的,
$(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 页面是:
<!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>
检查控制台输出后找到解决方案。
由于配置的上下文路径,HTML代码无法通过'js/jquery.min.js'等src找到注册文件。 解决方案是将上下文路径附加到所有 src,如下所示。
或者给个“.”签名
这对我有用。