SpirngMVC配置websocket

非原创
非原创
非原创
不过还是要记录一下自己被折磨的一晚上。
大部分引用于https://www.cnblogs.com/jmcui/p/8992042.html
还有这个https://www.cnblogs.com/ykqfrost/p/10793740.html

有两种方案可以建立起WebSocket服务
一种是基于Spring 的 spring-websocket,
一种是基于 java 的websocket-api。
这里用到的是spring-websocket

导入pom包

 <!--spring-WebSocket的包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-websocket</artifactId>
      <version>4.3.13.RELEASE</version>
    </dependency>

建一个符合规范的类

  • WebSocketHandler 接口定义了服务端处理WebSocket消息要做的一系列事情。相比直接实现WebSocketHandler,更为简单的方法是扩展AbstractWebSocketHandler,这是WebSocketHandler的一个抽象实现。当然根据处理消息的类型,还可以选择继承TextWebSocketHandler(文本类消息)、BinaryWebSocketHandler(二进制消息)等…
public class mysocket extends AbstractWebSocketHandler {

  

    @Override
    public void afterConnectionEstablished(WebSocketSession session) {System.out.println("连接建立");
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {

        System.out.println("接收到消息:" + message.getPayload());
        Thread.sleep(2000);
        //发送文本消息
        session.sendMessage(new TextMessage("Polo!"));

    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus){
      System.out.println("连接关闭");
    }

}

建立映射

创建spring-websocket.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:websocket="http://www.springframework.org/schema/websocket"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket.xsd
">
    <!-- websocket处理类 -->
    <bean id="myHandler_1" class="controller.test.mysocket "  />
    <websocket:handlers allowed-origins="*" >
        <websocket:mapping path="/NotNeedRoleTest/websocket" handler="myHandler_1"/>
    </websocket:handlers>



</beans>

加入spring启动容器

将刚才配置xml的路径

spring-websocket.xml

加入web.xml中


 <!--============================启动spring容器=====================================-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath:applicationContext.xml
      classpath:spring-security.xml
      classpath:spring-redis.xml
      classpath:spring-websocket.xml  
    </param-value>
  </context-param>

一些小坑:

  • 确认maven-tomcat版本>=2.2(就是需要大于tomcat7的某个版本) 否则不支持websocket,初始化失败
Error creating bean with name 'org.springframework.web.socket.server.support.WebSocketHandlerMapping#0': 
  • 发生404错误,无法建立连接
    -没有配对路径

  • 发生302错误,无法建立连接
    -可能项目设置了角色权限

  • 发生403错误,存在跨域问题。最坑的是浏览器还没提示是跨域。
    -将<websocket:handlers > 改成 <websocket:handlers allowed-origins="*" > 就是加了个允许跨域的参数

  • 无法添加 allowed-origins="*" 参数,提示非法参数【绝世神坑】
    -xml的文件头没写全,请参考上文的文件头对比一下少了什么

END…然后成功访问时控制台会有提示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值