Spring Boot2.0配置访问虚拟路径

版权声明:本文为博主原创文章,未经博主允许不得转载。 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有些不一样
  1. 比如@MessageMapping("/chat"),即便使用了虚拟路径 “/chatroom”,
    这个路径没有被虚拟映射,消息还是映射到 hostname:port/chat
  2. 订阅Subcribe也没有加入这个虚拟路径,还是 hostname:port/chat
simpMessagingTemplate.convertAndSendToUser(message.getReceiver(), "/notification", message.getText());

前端任然是不需要添加"/chatroom" ("/user"是开发中角色的填充,与这无关)

stomp.connect('guest', 'guest', function (frame) {
    stomp.subscribe("/user/notification", showGetMsg);
});
  1. 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();
    }
}

猜你喜欢

转载自blog.csdn.net/chenbetter1996/article/details/85268748