在spring3.2.0+hibernate3.3.2+struts2 2.2.3中使用websocket,运行环境是tomcat8.0.36,获取HttpSession
2016-08-25 17:00
344 查看
直接看如何获取HttpSession对象。
接着在websocket服务器类中:
注意由于使用了struts2,所以所有的请求都会被拦截,需要在strus.xml加上:<constant name="struts.action.excludePattern" value="/chat/server"></constant>
就可以放过该请求。
} else if ('MozWebSocket' in window) { webSocket = new MozWebSocket('ws://localhost:8080/ChuangYeJia/chat/server'); }webSocket.onerror = function(event) {onError(event);};webSocket.onopen = function(event) {onOpen(event);};webSocket.onmessage = function(event)
//接受客户端消息{onMessage(event);};}function onMessage(event) {var js = JSON.parse(event.data);$(".my_message").text(js.toUser.userNickName);}function onOpen(event) {webSocket.send(JSON.stringify(obj)); //发送消息给服务器端}function onError(event) {alert(event.data);}$("#send_message").on('click',
function() {webSocket.send($("#message_input").val()); //发送消息给服务器端});});</script>
就这样。
首先必须得写一个继承javax.websocket.server.ServerEndpointConfig.Configurator类的类来获取HttpSession: import javax.servlet.http.HttpSession; import javax.websocket.HandshakeResponse; import javax.websocket.server.HandshakeRequest; import javax.websocket.server.ServerEndpointConfig; import javax.websocket.server.ServerEndpointConfig.Configurator; public class GetHttpSessionConfigurator extends Configurator{ @Override public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) { // TODO Auto-generated method stub HttpSession httpSession=(HttpSession) request.getHttpSession(); sec.getUserProperties().put(HttpSession.class.getName(),httpSession); } }
接着在websocket服务器类中:
注意由于使用了struts2,所以所有的请求都会被拦截,需要在strus.xml加上:<constant name="struts.action.excludePattern" value="/chat/server"></constant>
就可以放过该请求。
import java.sql.SQLException; import javax.servlet.http.HttpSession; import javax.websocket.EndpointConfig; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import org.hibernate.HibernateException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.HibernateTemplate; import com.chuangyejia.bean.User; import com.chuangyejia.websockettoolkit.GetHttpSessionConfigurator; import com.google.gson.Gson; import com.google.gson.JsonObject; @ServerEndpoint(value = "/chat/server",configurator=GetHttpSessionConfigurator.class) public class ChatServer { @SuppressWarnings({ "resource", "unchecked", "rawtypes" }) @OnMessage // 接受客户端消息 public void onMessage(String msg, Session session) throws Exception { Gson gson = new Gson(); JsonObject jo = new JsonObject(); ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); HibernateTemplate hibernateTemplate = ac.getBean("hibernateTemplate", HibernateTemplate.class); final User user = new User(); boolean rightToUser = (boolean)hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException, SQLException { Object[] s = (Object[]) session.createQuery("select u.userId,u.userNickName,u.userPhoto from User u where u.userId = '402881fc56416d860156416e52330001'").list().get(0); if(s != null) { user.setUserId(s[0].toString()); user.setUserNickName(s[1].toString()); user.setUserPhoto(s[2].toString()); return true; } else return false; } }); if(rightToUser) { } jo.add("toUser", gson.toJsonTree(user)); System.out.println("msg : " + msg.toString()); session.getBasicRemote().sendText(jo.toString()); // 发送信息到客户端 if(msg.equals("close")) { session.getBasicRemote().sendText("bye bye!"); // 发送信息到客户端 session.close(); // 关闭连接点 } } @OnOpen // 成功连接时执行此代码 public void onOpen(EndpointConfig config) { HttpSession httpSession= (HttpSession) config.getUserProperties().get(HttpSession.class.getName()); User fromUser = (User)httpSession.getAttribute("user"); System.out.println(fromUser.getUserNickName()); } @OnClose // 连接关闭时执行 public void onClose() {} } 注意在OnOpen中执行的代码!就那里获取HttpSession对象!看看前台的js代码部分:
<pre name="code" class="javascript"><script type="text/javascript">var obj = {"toUser":"true","toUserId": "<s:property value='#parameters.toUserId'/>"};var webSocket = null;init();function init() { if ('WebSocket' in window) { webSocket = new WebSocket('ws://localhost:8080/ChuangYeJia/chat/server'); //建立连接点
} else if ('MozWebSocket' in window) { webSocket = new MozWebSocket('ws://localhost:8080/ChuangYeJia/chat/server'); }webSocket.onerror = function(event) {onError(event);};webSocket.onopen = function(event) {onOpen(event);};webSocket.onmessage = function(event)
//接受客户端消息{onMessage(event);};}function onMessage(event) {var js = JSON.parse(event.data);$(".my_message").text(js.toUser.userNickName);}function onOpen(event) {webSocket.send(JSON.stringify(obj)); //发送消息给服务器端}function onError(event) {alert(event.data);}$("#send_message").on('click',
function() {webSocket.send($("#message_input").val()); //发送消息给服务器端});});</script>
就这样。
相关文章推荐
- 使用Spring3.2.0+Hibernate3.2.2+Struts2 2.2.3整合小demo以及配置使用的jar包集合
- spring获取运行时环境
- 在Java7与Tomcat8环境下使用WebSocket实现聊天的示例
- java使用websocket,并且获取HttpSession,源码分析
- 使用 Docker 搭建 Tomcat 运行环境
- 使用Dockerfile搭建jdk、tomcat运行环境
- 获取spring运行环境中的bean
- 使用tomcat8.0.36实现的websocket技术,实现向单个以及全部用户实时推送消息的功能
- springboot 使用第三方tomcat 运行
- 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中
- Spring-websocket不在Springmvc的环境下使用
- centos下使用yum安装jdk java环境安装 activeMQ运行环境 tomcat安装
- 使用 Docker 搭建 Tomcat 运行环境
- Struts2: Jdk1.5 + Tomcat 5.0.28环境下运行Struts2的项目报错及解决方法
- 在eclipse下使用maven搭建Struts2,Hibernate4和Spring4开发环境
- 使用quercus在tomcat环境中运行php程序
- tomcat中运行正常的web项目部署至websphere后,spring无法获取bean
- spring websocket 获取httpsession
- 使用 Docker 搭建 Tomcat 运行环境
- 使用 Docker 搭建 Tomcat 运行环境