为啥spring websocket应用看不到html并抛出404错误?
Posted
技术标签:
【中文标题】为啥spring websocket应用看不到html并抛出404错误?【英文标题】:Why does spring websocket application not see html and throws a 404 error?为什么spring websocket应用看不到html并抛出404错误? 【发布时间】:2021-11-29 01:42:44 【问题描述】:我正在尝试根据指南使用 spring boot 和 websocket 进行聊天。
简单的配置类:
@Configuration
@EnableWebSocketMessageBroker
public class webSocketConfiguration implements WebSocketMessageBrokerConfigurer
@Override
public void configureMessageBroker(MessageBrokerRegistry config)
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
registry.addEndpoint("/chat").withSockJS();
我的控制器:
@Controller
public class MessageController
@MessageMapping("/hello")
@SendTo("/topic/chatting")
public Message messageHandler(Name name) throws Exception
return new Message("Hello, " + name.getName() + " !");
消息类:
public class Message
private String content;
public String getContent()
return content;
public void setContent(String content)
this.content = content;
public Message(String content)
this.content = content;
public Message()
名称和类:
package com.example.webSocketChat.Messages;
public class Name
private String name;
public String getName()
return name;
public void setName(String name)
this.name = name;
public Name(String name)
this.name = name;
public Name()
实际上是html页面本身,它位于resource/static,虽然由于某种原因没有静态文件夹,虽然我通过Spring Initializr创建了项目:
<!DOCTYPE html>
<html>
<head>
<title>Hello WebSocket</title>
<script src="sockjs-0.3.4.js"></script>
<script src="stomp.js"></script>
<script type="text/javascript">
var stompClient = null;
function setConnected(connected)
document.getElementById('connect').disabled = connected;
document.getElementById('disconnect').disabled = !connected;
document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
document.getElementById('response').innerHTML = '';
function connect()
var socket = new SockJS('/chat');
stompClient = Stomp.over(socket);
stompClient.connect(, function(frame)
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/chatting', function(message)
showGreeting(JSON.parse(message.body).content);
);
);
function disconnect()
stompClient.disconnect();
setConnected(false);
console.log("Disconnected");
function sendName()
var name = document.getElementById('name').value;
stompClient.send("/app/hello", , JSON.stringify( 'name': name ));
function showGreeting(message)
var response = document.getElementById('response');
var p = document.createElement('p');
p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(message));
response.appendChild(p);
</script>
</head>
<body>
<noscript><h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websocket relies on Javascript being enabled. Please enable
Javascript and reload this page!</h2></noscript>
<div>
<div>
<button id="connect" onclick="connect();">Connect</button>
<button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button>
</div>
<div id="conversationDiv">
<label>What is your name?</label><input type="text" id="name" />
<button id="sendName" onclick="sendName();">Send</button>
<p id="response"></p>
</div>
</div>
</body>
</html>
它似乎已经按照指南正确地完成了所有操作并弄清楚了发生了什么,但是如果你在启动时访问地址 http://localhost:8080 它会引发 404 错误但是如果你去地址 http://localhost:8080/chat 将是消息 Welcome to SockJS!。
这可能是什么错误?我没有注意到,我按照 2 个指南做了所有事情,并且代码完全相同。我很乐意提供帮助
【问题讨论】:
在 github 上分享你的代码。 @AnishB。 github.com/ShanksRed/webSocketChat 好的,让我检查一下。 我得到 404。现在,要求是什么 @AnishB。好吧,理论上,你应该得到一个包含名称输入和按钮的页面 【参考方案1】:好的,你能澄清一下这个问题吗? 这就是为什么页面在根 url 显示 404 错误但 /chat 路由有效的原因吗?
如果您在询问上述问题,请检查 HTML 文件,在connect()
下,您在“/chat”路径打开套接字。
同样在您的 Java 代码中,端点位于 /chat 下,因此会触发 SockJS 连接。根 url 没有任何作用。
【讨论】:
以上是关于为啥spring websocket应用看不到html并抛出404错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥应用程序看不到 Spring Security 中的角色(禁止)