spring3.0+spring mvc3.0+spring security3.0整合spring websocket
来源:互联网 发布:linux改变文件权限命令 编辑:程序博客网 时间:2024/06/07 22:38
在项目过程中,由于需求在spring3.0+的框架基础上整合spring-websocket。而spring-wesocket是spring4.0+才有的。
- 升级原spring框架核心包到4.0+。这里我选择4.1.8
<spring.version>4.1.8.RELEASE</spring.version>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency>
升级后先修改配置文件及项目中由于spring框架变动而引起的class类变动,列:<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean>
MappingJacksonHttpMessageConverter变更为MappingJackson2HttpMessageConverter
并增加spring4.0+的依赖jar<jackson.version>2.5.0</jackson.version>
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency>
改动后启动项目,项目可正常启动。 - 添加spring-websocket到
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency>
编写websocket相关类。注册websocket@Configuration@EnableWebMvc@EnableWebSocketpublic class WebsocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {@Beanpublic WebsocketHandler jwyWebSocketHandler(){return new MyHandler();}@Beanpublic WebsocketHandShake jwyWebSocketHandShake(){return new WebsocketHandShake();}@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {System.out.println("------websocket注册-----");registry.addHandler(jwyWebSocketHandler(), "/websocket.ws").addInterceptors(jwyWebSocketHandShake());} }
处理类:public class MyHandler implements WebSocketHandler {private static CopyOnWriteArraySet<WebSocketSession> onLineUserList = new CopyOnWriteArraySet<WebSocketSession>();private static int onLineUserNum=0;//连接关闭执行方法@Overridepublic void afterConnectionClosed(WebSocketSession arg0, CloseStatus arg1)throws Exception {// TODO Auto-generated method stub}//连接建立@Overridepublic void afterConnectionEstablished(WebSocketSession session)throws Exception {// TODO Auto-generated method stub//JwySessionModel jsm=(JwySessionModel) arg0.getAttributes().get("user");//arg0.sendMessage(new Object());onLineUserList.add(session);this.addOnlineCount();}//消息处理@Overridepublic void handleMessage(WebSocketSession session, WebSocketMessage<?> wsMessage)throws Exception {// TODO Auto-generated method stub}//异常处理@Overridepublic void handleTransportError(WebSocketSession arg0, Throwable arg1)throws Exception {// TODO Auto-generated method stubonLineUserList.remove(arg0);this.subOnlineCount();}@Overridepublic boolean supportsPartialMessages() {// TODO Auto-generated method stubreturn false;}public static synchronized int getOnlineCount() { return onLineUserNum; } public static synchronized void addOnlineCount() { MyHandler.onLineUserNum++; } public static synchronized void subOnlineCount() {
MyHandler.onLineUserNum--;
} }握手处理public class WebsocketHandShake extends HttpSessionHandshakeInterceptor{//握手完成@Overridepublic void afterHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler wsHandler,Exception ex) {// TODO Auto-generated method stubsuper.afterHandshake(request, response, wsHandler, ex);}//握手之前,第一次连接获取request中用户信息等信息返回false握手失败@Overridepublic boolean beforeHandshake(ServerHttpRequest arg0,ServerHttpResponse arg1, WebSocketHandler arg2,Map<String, Object> arg3) throws Exception {try {ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) arg0;HttpSession session = servletRequest.getServletRequest().getSession(false); String x= (String) session.getAttribute("xxx");//loginId arg3.put("xxxx", x);} catch (Exception e) {return false;}return true;}}
启动后打印websocket注册 - 添加websocket注册路径到spring-mvc中
<servlet> <description>spring mvc servlet</description> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>配置文件</description> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>*.ws</url-pattern> </servlet-mapping>
ws://localhost:8080${applyName}/websocket.ws则可以建立通道连接。
0 0
- spring3.0+spring mvc3.0+spring security3.0整合spring websocket
- 学习spring-Security3.0
- Spring Security3.0入门
- spring mvc3.0 配置
- Spring MVC3.0国际化
- Spring Mvc3.0深入研究
- Spring MVC3.0乱码问题
- Spring Security3 - MVC 整合教程
- Spring Security3 - MVC 整合教程
- Spring Security3 - MVC 整合教程
- Spring Security3 - MVC 整合教程
- Spring Security3 - MVC 整合教程
- 集成spring security3.0权限控制
- spring security3.0的ACL使用例子
- 集成spring security3.0权限控制
- Spring Security3 - MVC 整合教程 (初识Spring Security3)
- Spring Security3 - MVC 整合教程 (初识Spring Security3)
- Spring Security3 - MVC 整合教程 (初识Spring Security3)
- poj- 2029 -Get Many Persimmon Trees (DP)
- PAT 乙级 1056. 组合数的和(15)
- ios tableView 的cell打开收起功能,类似QQ中的cell折叠功能
- ThinkPHP之__construct()和__initialize()
- Lock与synchronized 的区别
- spring3.0+spring mvc3.0+spring security3.0整合spring websocket
- JavaScript: Passing by Value or by Reference
- phpstorm10激活加汉化
- [openSUSE]Install VMware Workstation
- inline hook和SDDT hook的区别
- 超分辨率重建——过完备字典
- FFmpeg 在Windows的命令
- 【JAVA SE】4.数据
- 思维导图中添加网页链接的教程