版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenbetter1996/article/details/85268748
描述
Spring Boot2.0更新重构了很多代码。
在之前虚拟路径是server.context-path=xxx
而更新后改为了server.servlet.context-path=xxx
(更新以后server不在仅有servlet了,还添加了很多其他的)
方法
# server
server.port=8080
server.servlet.context-path=/chatroom
项目启动控制台可以看到
[ main] o.s.m.s.b.SimpleBrokerMessageHandler : Started.
[ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '/chatroom'
[ main] xyz.cglzwz.chatroom.ChatroomApplication : Started ChatroomApplication in 3.558 seconds (JVM running for 4.222)
[nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/chatroom] : Initializing Spring DispatcherServlet 'dispatcherServlet'
[nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
后台的dispatcherServlet的虚拟路径由 “/” 变成 “/chatroom”
代码修改路径
在把项目虚拟路径修改了后,后台代码的@RequestMapper(value) 和跳转都不需要添加"/chatroom",因为后台在DispatcherServlet那里已经处理了。(即默认加上了)
但是前端的请求路径代码都要修改, 都要加上 “/chatroom”,因为前端的是直接没有处理的URL。
注意
WebSocket有些不一样
- 比如@MessageMapping("/chat"),即便使用了虚拟路径 “/chatroom”,
这个路径没有被虚拟映射,消息还是映射到 hostname:port/chat - 订阅Subcribe也没有加入这个虚拟路径,还是 hostname:port/chat
simpMessagingTemplate.convertAndSendToUser(message.getReceiver(), "/notification", message.getText());
前端任然是不需要添加"/chatroom" ("/user"是开发中角色的填充,与这无关)
stomp.connect('guest', 'guest', function (frame) {
stomp.subscribe("/user/notification", showGetMsg);
});
- Socket却使用了虚拟路径,前端连接需要 var sock = new SockJS("/chatroom/endpointChat");
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
// 添加一个名为 "/endpointChat" 的基于STOMP子协议的节点(即服务器端socket)
stompEndpointRegistry.addEndpoint("/endpointChat").withSockJS();
}
}