欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring4.0 WebSocket

程序员文章站 2022-05-25 17:08:08
...

问题说明

系统是SpringMVC4.0+版本,前端JSP , HttpSessionHandshakeInterceptor 配置的拦截器始终不生效, websockt一直404 , 观察日志,这个拦截器一直没有被加载.

解决

首先你要注意你的SpringMVC的拦截器不要拦截这个/websoket结尾路径请求
其次注意websoket配置的加载位置,一定要在servlet中或spring-mvc.xml中加载
-- 这是我的配置,和网上的大同小异,HandshakeInterceptor拦截请求一直没被加载.
<bean id="websocket" class="com.xxx.WebsocketEndPoint"/>
<websocket:handlers>
  <!-- 配置消息处理bean和路径的映射关系 -->
  <websocket:mapping path="/websocket" handler="websocket"/>
  <!-- 配置握手拦截器 -->
  <websocket:handshake-interceptors>
    <bean class="com.xxxx.HandshakeInterceptor"/>
  </websocket:handshake-interceptors>
  <!-- 开启sockjs,去掉则关闭sockjs -->
  <!--   <websocket:sockjs/> -->
</websocket:handlers>
<!-- 配置websocket消息的最大缓冲区长度 -->
<bean class="org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean">
  <property name="maxTextMessageBufferSize" value="8192"/>
  <property name="maxBinaryMessageBufferSize" value="8192"/>
</bean>

--一定要在servlet里加载: 我是用的 web.xml 或者是放在spring-mvc.xml中
<!-- SpringMVC -->
	<servlet>
		<servlet-name>SpringMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/app/spring-mvc.xml,classpath:spring/app/spring-websocket.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>