Spring WebSocket 404错误的解决方法(有关两个方面)

 

 

1.加载顺序(详细:https://www.cnblogs2..com/ginponson/p/6390975.html)

         如果你的web.xml分开加载spring-context和spring-servlet的话,请将spring-websocket的资源文件放到spring-servlet上加载。
         注意:在spring-context加载的时候,你的messageHandler应该是还没有初始化,请不要注入到某个service上。

在此自己做个记录避免以后遗忘。

 

2.使用javaconfig配置需要定义 DispatcherServlet 应用上下文中的 bean(详细:https://www.jb51.net/article/130197.htm

WebSocket 实质上借用 HTTP 请求进行握手,启用 Spring WebSocket 需要在 org.springframework.web.servlet.DispatcherServlet 里配置拦截此请求

首先,修改 WebSocketConfig 类定义,在类上添加 @Configuration 注解,表明该类以 JavaConfig 形式用作 bean 定义的源(相当于 XML 配置中的 元素)。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.socket.config.annotation.EnableWebSocket;

import org.springframework.web.socket.config.annotation.WebSocketConfigurer;

import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

 

@Configuration

@EnableWebSocket

public class WebSocketConfig implements WebSocketConfigurer {

 

 @Override

 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

  registry.addHandler(marcoHandler(), "/marco");

 }

 

 @Bean

 public MarcoHandler marcoHandler() {

  return new MarcoHandler();

 }

 

}

使用 JavaConfig 配置 DispatcherServlet,继承org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer ,重载以下 3 个方法: 
- getRootConfigClasses – 返回带有 @Configuration 注解的类将会用来配置 ContextLoaderListener 创建的应用上下文中的 bean 
- getServletConfigClasses – 返回带有 @Configuration 注解的类将会用来定义 DispatcherServlet 应用上下文中的 bean 
- getServletMappings – 将一个或多个路径映射到 DispatcherServlet 上

实际上,如果只需要 Spring WebSocket 生效,则只需要在 getServletConfigClasses 方法中返回用来定义 DispatcherServlet 应用上下文中的 bean

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

 

public class WebSocketInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

 

 @Override

 protected Class[] getRootConfigClasses() {

  return null;

 }

 

 @Override

 protected Class[] getServletConfigClasses() {

  return new Class[] {WebSocketConfig.class};

 }

 

 @Override

 protected String[] getServletMappings() {

  return new String[] {"/"};

 }

 

}

你可能感兴趣的:(Spring WebSocket 404错误的解决方法(有关两个方面))