Spring4.0.6 Websocket详细配置 之 遇到问题

基于SpringMVC做Websocket开发过程遇到一系列问题:

问题1:统计了一下大家遇到第一个问题就是连接websocket时候报404错误

先检查连接websocket的url格式:ws://localhost:8080/test/webSocketServer.do,这个.do后缀要匹配SpringMVC拦截后缀

其次检查下Spring配置文件是否有加这个tag:<mvc:annotation-driven/>(加这个会出现中文乱码,下面会讲到),使用Spring websocket需要这个tag支持

当Spring配置文件有使用<context:component-scan/>扫描包,这个tag<context:annotation-config/>可以不去掉。

问题2:连接websocket时候报200,说明已经进入拦截器握手成功,但是没连接上websocket

首先,这个主要原因是在自己的代码上,如果websocket有配置自己定义的拦截器,先检查下拦截器beforeHandshake这个方法,这个方法有个参数Map<String, Object> attributes,不能给这个map的value设成null,否则进不到自己Handler下的这个方法afterConnectionEstablished,就会报200其次,在自定义websocket的Handler和拦截器,加上@Component注解(这个是可选部分,根据自己环境来做选择,基本上可以拔除这个原因,仅做参考) 问题3:连接websocket时候,如果缺少配置会报415 Unsupported Media Type请求的格式不受请求页面的支持错误 可以参考这个文章:http://www.2cto.com/kf/201312/262557.html 问题4:网上例子都有说要在web.xml下的servlet和filter里面加上<async-supported>true</async-supported>我试下没有影响websocket是可以连接成功的,可以不用加,这个是用来支持异步的servlet3.x,建议不用加,除非有用到这个特性 问题5:添加<mvc:annotation-driven/>这个出现中文乱码 刚开始时候,所有浏览器都出现中文乱码,后来解决在Chrome浏览不会出现中文乱码,但是在FF下会出现。原因有三个: 第一,MessageConverter转换器没配置相应的<property name="supportedMediaTypes">属性, 第二,bean和tag的先后顺序不对, 第三,当使用<mvc:annotation-driven/>这个tag时候,请求处理器就会变成RequestMappingHandlerAdapter,跟进代码就会发现不是采用AnnotationMethodHandlerAdapter,所以配置时候要改成:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 统一解决办法是:要注意bean和tag的先后顺序 <bean
        class=" org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> //这是根本原因
        <property name="messageConverters">
            <list>
                <ref bean="stringHttpMessageConverter" />
                <ref bean="byteArrayHttpMessageConverter" />
                <ref bean="jsonHttpMessageConverter" />
                <ref bean="jsonHttpMessageConverter4JS" />
            </list>
        </property>
    </bean> <context:component-scan base-package="扫描Spring controller包路径" /> <context:component-scan base-package="扫描websocket包路径"/> <context:annotation-config />  //这个标注可以不加 <mvc:annotation-driven/> //这个tag一定要放在上面代码最后,这是也是乱码根源之一

猜你喜欢

转载自aoyouzi.iteye.com/blog/2310351