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 配置中的 <beans> 元素)。

 

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[] {"/"};

 }

 

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值