├── image.png ├── .settings ├── org.eclipse.m2e.core.prefs ├── org.eclipse.wst.common.project.facet.core.xml ├── org.eclipse.core.resources.prefs ├── org.eclipse.wst.common.component ├── org.eclipse.jdt.core.prefs ├── org.eclipse.wst.validation.prefs ├── org.springframework.ide.eclipse.beans.core.prefs └── org.springframework.ide.eclipse.core.prefs ├── target ├── classes │ ├── com │ │ └── lee │ │ │ └── websocket │ │ │ ├── entity │ │ │ └── Person.class │ │ │ ├── HomeController.class │ │ │ ├── WebSocketConfig.class │ │ │ ├── WebSocketHander.class │ │ │ └── HandshakeInterceptor.class │ └── log4j.xml ├── m2e-wtp │ └── web-resources │ │ └── META-INF │ │ ├── MANIFEST.MF │ │ └── maven │ │ └── com.lee │ │ └── websocket │ │ ├── pom.properties │ │ └── pom.xml └── test-classes │ └── log4j.xml ├── .gitignore ├── README.md ├── src ├── main │ ├── webapp │ │ └── WEB-INF │ │ │ ├── views │ │ │ ├── home.jsp │ │ │ └── chat.jsp │ │ │ ├── spring │ │ │ ├── root-context.xml │ │ │ └── appServlet │ │ │ │ └── servlet-context.xml │ │ │ └── web.xml │ ├── java │ │ └── com │ │ │ └── lee │ │ │ └── websocket │ │ │ ├── entity │ │ │ └── Person.java │ │ │ ├── WebSocketConfig.java │ │ │ ├── HomeController.java │ │ │ ├── HandshakeInterceptor.java │ │ │ └── WebSocketHander.java │ └── resources │ │ └── log4j.xml └── test │ └── resources │ └── log4j.xml ├── .springBeans ├── .gitattributes ├── .project ├── .classpath └── pom.xml /image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leechenxiang/maven-spring-websocket-01/HEAD/image.png -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /target/classes/com/lee/websocket/entity/Person.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leechenxiang/maven-spring-websocket-01/HEAD/target/classes/com/lee/websocket/entity/Person.class -------------------------------------------------------------------------------- /target/classes/com/lee/websocket/HomeController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leechenxiang/maven-spring-websocket-01/HEAD/target/classes/com/lee/websocket/HomeController.class -------------------------------------------------------------------------------- /target/classes/com/lee/websocket/WebSocketConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leechenxiang/maven-spring-websocket-01/HEAD/target/classes/com/lee/websocket/WebSocketConfig.class -------------------------------------------------------------------------------- /target/classes/com/lee/websocket/WebSocketHander.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leechenxiang/maven-spring-websocket-01/HEAD/target/classes/com/lee/websocket/WebSocketHander.class -------------------------------------------------------------------------------- /target/m2e-wtp/web-resources/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Built-By: Administrator 3 | Build-Jdk: 1.8.0_60 4 | Created-By: Maven Integration for Eclipse 5 | 6 | -------------------------------------------------------------------------------- /target/classes/com/lee/websocket/HandshakeInterceptor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leechenxiang/maven-spring-websocket-01/HEAD/target/classes/com/lee/websocket/HandshakeInterceptor.class -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | /target/ 3 | 4 | /.settings/ 5 | /.classpath 6 | /.project 7 | 8 | /**/.idea/ 9 | *.log 10 | *.lck 11 | *.iml 12 | /**/logs/ 13 | *.epoch 14 | 15 | /bin/ 16 | /test-output/ 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # maven-spring-websocket-01 2 | spring websocket chating room 3 | 使用spring websocket实现聊天室基本功能 4 | 1.群发消息给所有人 5 | 2.悄悄话给某个人 6 | ![chating-room](https://github.com/leechenxiang/maven-spring-websocket-01/blob/master/image.png) 7 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.project.facet.core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding//src/main/java=UTF-8 3 | encoding//src/main/resources=UTF-8 4 | encoding//src/main/webapp/WEB-INF/views/chat.jsp=UTF-8 5 | encoding//src/test/java=UTF-8 6 | encoding//src/test/resources=UTF-8 7 | encoding/=UTF-8 8 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/views/home.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 2 | <%@ page session="false" %> 3 | 4 | 5 | Home 6 | 7 | 8 |

9 | Hello world! 10 |

11 | 12 |

The time on the server is ${serverTime}.

13 | 14 | 15 | -------------------------------------------------------------------------------- /target/m2e-wtp/web-resources/META-INF/maven/com.lee/websocket/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven Integration for Eclipse 2 | #Mon Feb 15 10:18:07 CST 2016 3 | version=1.0.0-BUILD-SNAPSHOT 4 | groupId=com.lee 5 | m2e.projectName=maven-spring-websocket-01 6 | m2e.projectLocation=E\:\\workspace\\maven-spring-websocket-01 7 | artifactId=websocket 8 | -------------------------------------------------------------------------------- /.springBeans: -------------------------------------------------------------------------------- 1 | 2 | 3 | 1 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/spring/root-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /src/main/java/com/lee/websocket/entity/Person.java: -------------------------------------------------------------------------------- 1 | package com.lee.websocket.entity; 2 | 3 | public class Person { 4 | 5 | private int age; 6 | private String name; 7 | private String sex; 8 | 9 | public int getAge() { 10 | return age; 11 | } 12 | public void setAge(int age) { 13 | this.age = age; 14 | } 15 | public String getName() { 16 | return name; 17 | } 18 | public void setName(String name) { 19 | this.name = name; 20 | } 21 | public String getSex() { 22 | return sex; 23 | } 24 | public void setSex(String sex) { 25 | this.sex = sex; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.common.component: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.7 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 12 | org.eclipse.jdt.core.compiler.source=1.7 13 | -------------------------------------------------------------------------------- /src/main/java/com/lee/websocket/WebSocketConfig.java: -------------------------------------------------------------------------------- 1 | package com.lee.websocket; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.socket.config.annotation.EnableWebSocket; 5 | import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 6 | import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 7 | 8 | @Configuration 9 | @EnableWebSocket//开启websocket 10 | public class WebSocketConfig implements WebSocketConfigurer { 11 | @Override 12 | public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 13 | registry.addHandler(new WebSocketHander(),"/echo").addInterceptors(new HandshakeInterceptor()); //支持websocket 的访问链接 14 | registry.addHandler(new WebSocketHander(),"/sockjs/echo").addInterceptors(new HandshakeInterceptor()).withSockJS(); //不支持websocket的访问链接 15 | } 16 | } -------------------------------------------------------------------------------- /target/classes/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/main/resources/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/test/resources/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /target/test-classes/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | contextConfigLocation 9 | /WEB-INF/spring/root-context.xml 10 | 11 | 12 | 13 | 14 | org.springframework.web.context.ContextLoaderListener 15 | 16 | 17 | 18 | 19 | appServlet 20 | org.springframework.web.servlet.DispatcherServlet 21 | 22 | contextConfigLocation 23 | /WEB-INF/spring/appServlet/servlet-context.xml 24 | 25 | 1 26 | 27 | 28 | 29 | appServlet 30 | / 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/main/java/com/lee/websocket/HomeController.java: -------------------------------------------------------------------------------- 1 | package com.lee.websocket; 2 | 3 | import java.text.DateFormat; 4 | import java.util.Date; 5 | import java.util.Locale; 6 | 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.ui.Model; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RequestMethod; 13 | 14 | /** 15 | * Handles requests for the application home page. 16 | */ 17 | @Controller 18 | public class HomeController { 19 | 20 | private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 21 | 22 | /** 23 | * Simply selects the home view to render by returning its name. 24 | */ 25 | @RequestMapping(value = "/", method = RequestMethod.GET) 26 | public String home(Locale locale, Model model) { 27 | logger.info("Welcome home! The client locale is {}.", locale); 28 | 29 | Date date = new Date(); 30 | DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 31 | 32 | String formattedDate = dateFormat.format(date); 33 | 34 | model.addAttribute("serverTime", formattedDate ); 35 | 36 | return "home"; 37 | } 38 | 39 | @RequestMapping(value = "/chat", method = RequestMethod.GET) 40 | public String chat(Locale locale, Model model) { 41 | return "chat"; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | maven-spring-websocket-01 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.wst.common.project.facet.core.builder 15 | 16 | 17 | 18 | 19 | org.springframework.ide.eclipse.core.springbuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.wst.jsdt.core.javascriptValidator 25 | 26 | 27 | 28 | 29 | org.eclipse.wst.validation.validationbuilder 30 | 31 | 32 | 33 | 34 | org.eclipse.m2e.core.maven2Builder 35 | 36 | 37 | 38 | 39 | 40 | org.springframework.ide.eclipse.core.springnature 41 | org.eclipse.jdt.core.javanature 42 | org.eclipse.m2e.core.maven2Nature 43 | org.eclipse.wst.common.project.facet.core.nature 44 | org.eclipse.wst.common.modulecore.ModuleCoreNature 45 | org.eclipse.wst.jsdt.core.jsNature 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/main/java/com/lee/websocket/HandshakeInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.lee.websocket; 2 | 3 | import java.util.Map; 4 | 5 | import javax.servlet.http.HttpSession; 6 | 7 | import org.springframework.http.server.ServerHttpRequest; 8 | import org.springframework.http.server.ServerHttpResponse; 9 | import org.springframework.http.server.ServletServerHttpRequest; 10 | import org.springframework.web.socket.WebSocketHandler; 11 | 12 | public class HandshakeInterceptor implements org.springframework.web.socket.server.HandshakeInterceptor { 13 | 14 | //进入hander之前的拦截 15 | @Override 16 | public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map map) throws Exception { 17 | if (request instanceof ServletServerHttpRequest) { 18 | ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; 19 | 20 | String clientName = (String)servletRequest.getServletRequest().getParameter("name"); 21 | System.out.println(clientName); 22 | 23 | HttpSession session = servletRequest.getServletRequest().getSession(true); 24 | // String userName = "lee"; 25 | if (session != null) { 26 | //使用userName区分WebSocketHandler,以便定向发送消息 27 | // String clientName = (String) session.getAttribute("WEBSOCKET_USERNAME"); 28 | map.put("WEBSOCKET_USERNAME", clientName); 29 | } 30 | } 31 | return true; 32 | } 33 | 34 | @Override 35 | public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) { 36 | 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /.settings/org.eclipse.wst.validation.prefs: -------------------------------------------------------------------------------- 1 | DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator; 2 | USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator; 3 | USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator; 4 | USER_PREFERENCE=overrideGlobalPreferencesfalse 5 | disabled=06target 6 | eclipse.preferences.version=1 7 | -------------------------------------------------------------------------------- /src/main/java/com/lee/websocket/WebSocketHander.java: -------------------------------------------------------------------------------- 1 | package com.lee.websocket; 2 | 3 | import java.io.IOException; 4 | import java.util.ArrayList; 5 | 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.web.socket.CloseStatus; 9 | import org.springframework.web.socket.TextMessage; 10 | import org.springframework.web.socket.WebSocketHandler; 11 | import org.springframework.web.socket.WebSocketMessage; 12 | import org.springframework.web.socket.WebSocketSession; 13 | 14 | public class WebSocketHander implements WebSocketHandler { 15 | private static final Logger logger = LoggerFactory.getLogger(WebSocketHander.class); 16 | 17 | private static final ArrayList users = new ArrayList<>(); 18 | 19 | //初次链接成功执行 20 | @Override 21 | public void afterConnectionEstablished(WebSocketSession session) throws Exception { 22 | logger.debug("链接成功......"); 23 | users.add(session); 24 | String userName = (String) session.getHandshakeAttributes().get("WEBSOCKET_USERNAME"); 25 | if(userName!= null){ 26 | session.sendMessage(new TextMessage("欢迎来到Nathan的聊天室,我们开始聊天吧!~")); 27 | } 28 | } 29 | 30 | //接受消息处理消息 31 | @Override 32 | public void handleMessage(WebSocketSession session, WebSocketMessage webSocketMessage) throws Exception { 33 | String clientName = (String) session.getHandshakeAttributes().get("WEBSOCKET_USERNAME"); 34 | 35 | clientName = "" + clientName + ""; 36 | 37 | String msg = webSocketMessage.getPayload().toString(); 38 | String charter = ""; 39 | 40 | String msgs[] = msg.split("\\|"); 41 | if (msgs.length > 1) { 42 | msg = msgs[1]; 43 | charter = msgs[0]; 44 | sendMessageToUser(charter, new TextMessage(clientName + " 悄悄地对你说 :" + msg)); 45 | } else { 46 | sendMessageToUsers(new TextMessage(clientName + " 说:" + msg)); 47 | } 48 | 49 | } 50 | 51 | @Override 52 | public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception { 53 | if(webSocketSession.isOpen()){ 54 | webSocketSession.close(); 55 | } 56 | logger.debug("链接出错,关闭链接......"); 57 | users.remove(webSocketSession); 58 | } 59 | 60 | @Override 61 | public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception { 62 | logger.debug("链接关闭......" + closeStatus.toString()); 63 | users.remove(webSocketSession); 64 | } 65 | 66 | @Override 67 | public boolean supportsPartialMessages() { 68 | return false; 69 | } 70 | 71 | /** 72 | * 给所有在线用户发送消息 73 | * 74 | * @param message 75 | */ 76 | public void sendMessageToUsers(TextMessage message) { 77 | for (WebSocketSession user : users) { 78 | try { 79 | if (user.isOpen()) { 80 | user.sendMessage(message); 81 | } 82 | } catch (IOException e) { 83 | e.printStackTrace(); 84 | } 85 | } 86 | } 87 | 88 | /** 89 | * 给某个用户发送消息 90 | * 91 | * @param userName 92 | * @param message 93 | */ 94 | public void sendMessageToUser(String userName, TextMessage message) { 95 | for (WebSocketSession user : users) { 96 | if (user.getHandshakeAttributes().get("WEBSOCKET_USERNAME").equals(userName)) { 97 | try { 98 | if (user.isOpen()) { 99 | user.sendMessage(message); 100 | } 101 | } catch (IOException e) { 102 | e.printStackTrace(); 103 | } 104 | break; 105 | } 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/views/chat.jsp: -------------------------------------------------------------------------------- 1 | <%@ page contentType="text/html; charset=utf-8" language="java" %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | webSocket测试 16 | 87 | 88 | 89 | 90 | 91 | 92 |
93 |
94 |
95 | 96 | 97 | 98 | 99 |
100 |
101 | 102 |
103 | 104 |
105 |
106 | 107 | 108 | 109 | 110 |
111 |
112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | com.lee 6 | websocket 7 | maven-spring-websocket-01 8 | war 9 | 1.0.0-BUILD-SNAPSHOT 10 | 11 | 12 | 13 | 1.7 14 | UTF-8 15 | UTF-8 16 | 17 | 4.0.0.RELEASE 18 | 19 | 4.11 20 | 21 | 22 | 1.0.13 23 | 1.7.7 24 | 25 | 26 | 27 | 28 | 29 | org.springframework 30 | spring-core 31 | ${spring.version} 32 | 33 | 34 | 35 | org.springframework 36 | spring-web 37 | ${spring.version} 38 | 39 | 40 | 41 | org.springframework 42 | spring-webmvc 43 | ${spring.version} 44 | 45 | 46 | 47 | 48 | jstl 49 | jstl 50 | 1.2 51 | 52 | 53 | 54 | 55 | org.springframework 56 | spring-test 57 | ${spring.version} 58 | test 59 | 60 | 61 | 62 | 63 | org.springframework 64 | spring-jdbc 65 | ${spring.version} 66 | 67 | 68 | 69 | junit 70 | junit 71 | 4.8.2 72 | test 73 | 74 | 75 | 76 | 77 | org.springframework 78 | spring-websocket 79 | ${spring.version} 80 | 81 | 82 | org.springframework 83 | spring-messaging 84 | ${spring.version} 85 | 86 | 87 | 88 | 89 | com.fasterxml.jackson.core 90 | jackson-databind 91 | 2.3.0 92 | 93 | 94 | 95 | commons-fileupload 96 | commons-fileupload 97 | 1.2.2 98 | 99 | 100 | commons-io 101 | commons-io 102 | 2.2 103 | 104 | 105 | 106 | 107 | org.slf4j 108 | slf4j-api 109 | ${slf4j.version} 110 | compile 111 | 112 | 113 | ch.qos.logback 114 | logback-classic 115 | ${logback.version} 116 | runtime 117 | 118 | 119 | 120 | 121 | com.alibaba 122 | druid 123 | 1.0.4 124 | 125 | 126 | 127 | 128 | mysql 129 | mysql-connector-java 130 | 5.1.29 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | org.apache.maven.plugins 139 | maven-compiler-plugin 140 | 141 | 1.7 142 | 1.7 143 | 144 | 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /target/m2e-wtp/web-resources/META-INF/maven/com.lee/websocket/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | com.lee 6 | websocket 7 | maven-spring-websocket-01 8 | war 9 | 1.0.0-BUILD-SNAPSHOT 10 | 11 | 12 | 13 | 1.7 14 | UTF-8 15 | UTF-8 16 | 17 | 4.0.0.RELEASE 18 | 19 | 4.11 20 | 21 | 22 | 1.0.13 23 | 1.7.7 24 | 25 | 26 | 27 | 28 | 29 | org.springframework 30 | spring-core 31 | ${spring.version} 32 | 33 | 34 | 35 | org.springframework 36 | spring-web 37 | ${spring.version} 38 | 39 | 40 | 41 | org.springframework 42 | spring-webmvc 43 | ${spring.version} 44 | 45 | 46 | 47 | 48 | jstl 49 | jstl 50 | 1.2 51 | 52 | 53 | 54 | 55 | org.springframework 56 | spring-test 57 | ${spring.version} 58 | test 59 | 60 | 61 | 62 | 63 | org.springframework 64 | spring-jdbc 65 | ${spring.version} 66 | 67 | 68 | 69 | junit 70 | junit 71 | 4.8.2 72 | test 73 | 74 | 75 | 76 | 77 | org.springframework 78 | spring-websocket 79 | ${spring.version} 80 | 81 | 82 | org.springframework 83 | spring-messaging 84 | ${spring.version} 85 | 86 | 87 | 88 | 89 | com.fasterxml.jackson.core 90 | jackson-databind 91 | 2.3.0 92 | 93 | 94 | 95 | commons-fileupload 96 | commons-fileupload 97 | 1.2.2 98 | 99 | 100 | commons-io 101 | commons-io 102 | 2.2 103 | 104 | 105 | 106 | 107 | org.slf4j 108 | slf4j-api 109 | ${slf4j.version} 110 | compile 111 | 112 | 113 | ch.qos.logback 114 | logback-classic 115 | ${logback.version} 116 | runtime 117 | 118 | 119 | 120 | 121 | com.alibaba 122 | druid 123 | 1.0.4 124 | 125 | 126 | 127 | 128 | mysql 129 | mysql-connector-java 130 | 5.1.29 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | org.apache.maven.plugins 139 | maven-compiler-plugin 140 | 141 | 1.7 142 | 1.7 143 | 144 | 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /.settings/org.springframework.ide.eclipse.beans.core.prefs: -------------------------------------------------------------------------------- 1 | #Mon Oct 18 12:37:52 EDT 2010 2 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.osgi.org/xmlns/blueprint/v1.0.0= 3 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/aop= 4 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/batch= 5 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/beans= 6 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/context= 7 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/faces= 8 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/flex= 9 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration= 10 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/file= 11 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/http= 12 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/httpinvoker= 13 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/ip= 14 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/jdbc= 15 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/jms= 16 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/jmx= 17 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/mail= 18 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/rmi= 19 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/security= 20 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/stream= 21 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/ws= 22 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/integration/xml= 23 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/jdbc= 24 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/jee= 25 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/jms= 26 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/lang= 27 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/mvc= 28 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/osgi= 29 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/osgi-compendium= 30 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/oxm= 31 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/p= 32 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/security= 33 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/task= 34 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/tx= 35 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/util= 36 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/web-services= 37 | //org.springframework.ide.eclipse.beans.core.default.version.http\://www.springframework.org/schema/webflow-config= 38 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.osgi.org/xmlns/blueprint/v1.0.0=bp 39 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/aop=aop 40 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/batch=batch 41 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/beans=beans 42 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/context=context 43 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/faces=faces 44 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/flex=flex 45 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration=int 46 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/file=int-file 47 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/http=int-http 48 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/httpinvoker=int-httpinvoker 49 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/ip=int-ip 50 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/jdbc=int-jdbc 51 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/jms=int-jms 52 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/jmx=int-jmx 53 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/mail=int-mail 54 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/rmi=int-rmi 55 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/security=int-security 56 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/stream=int-stream 57 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/ws=int-ws 58 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/integration/xml=int-xml 59 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/jdbc=jdbc 60 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/jee=jee 61 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/jms=jms 62 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/lang=lang 63 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/mvc=mvc 64 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/osgi=osgi 65 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/osgi-compendium=osgix 66 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/oxm=oxm 67 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/p=p 68 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/security=sec 69 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/task=task 70 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/tx=tx 71 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/util=util 72 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/web-services=ws 73 | //org.springframework.ide.eclipse.beans.core.prefix.http\://www.springframework.org/schema/webflow-config=flow 74 | eclipse.preferences.version=1 75 | org.springframework.ide.eclipse.beans.core.default.version.check.classpath=true 76 | org.springframework.ide.eclipse.beans.core.enable.project.preferences=false 77 | org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false 78 | org.springframework.ide.eclipse.beans.core.loadNamespaceHandlerFromClasspath=false 79 | -------------------------------------------------------------------------------- /.settings/org.springframework.ide.eclipse.core.prefs: -------------------------------------------------------------------------------- 1 | #Tue Apr 20 16:59:06 EDT 2010 2 | eclipse.preferences.version=1 3 | org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true 4 | org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true 5 | org.springframework.ide.eclipse.core.builders.enable.osgibundleupdater=false 6 | org.springframework.ide.eclipse.core.enable.project.preferences=false 7 | org.springframework.ide.eclipse.core.validator.enable.com.springsource.server.ide.manifest.core.manifestvalidator=true 8 | org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.bestpractices.beansvalidator=false 9 | org.springframework.ide.eclipse.core.validator.enable.com.springsource.sts.server.quickfix.manifestvalidator=false 10 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true 11 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false 12 | org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true 13 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 14 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.applicationVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 15 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivationPolicyRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 16 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleActivatorRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 17 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleManifestVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 18 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 19 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleSymbolicNameRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 20 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.bundleVersionRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 21 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.exportPackageRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 22 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.importRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 23 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.parsingProblemsRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 24 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.server.ide.manifest.core.requireBundleRule-com.springsource.server.ide.manifest.core.manifestvalidator=true 25 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-com.springsource.sts.bestpractices.beansvalidator=false 26 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-com.springsource.sts.bestpractices.beansvalidator=false 27 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-com.springsource.sts.bestpractices.beansvalidator=false 28 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.RefElementRule-com.springsource.sts.bestpractices.beansvalidator=false 29 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-com.springsource.sts.bestpractices.beansvalidator=false 30 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-com.springsource.sts.bestpractices.beansvalidator=false 31 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-com.springsource.sts.bestpractices.beansvalidator=false 32 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.bestpractices.legacyxmlusage.jndiobjectfactory-com.springsource.sts.bestpractices.beansvalidator=false 33 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importBundleVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=false 34 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importLibraryVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=false 35 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.importPackageVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=false 36 | org.springframework.ide.eclipse.core.validator.rule.enable.com.springsource.sts.server.quickfix.requireBundleVersionRule-com.springsource.sts.server.quickfix.manifestvalidator=false 37 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.autowire.autowire-org.springframework.ide.eclipse.beans.core.beansvalidator=false 38 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true 39 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true 40 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true 41 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true 42 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true 43 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true 44 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true 45 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true 46 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true 47 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true 48 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true 49 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false 50 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.toolAnnotation-org.springframework.ide.eclipse.beans.core.beansvalidator=false 51 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false 52 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true 53 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true 54 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true 55 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true 56 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true 57 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true 58 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true 59 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true 60 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true 61 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true 62 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true 63 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true 64 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true 65 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true 66 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true 67 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true 68 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true 69 | org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true 70 | --------------------------------------------------------------------------------