websocket采用tomcat方式,IOC类对象无法注入的解决方案
前言
我采用的spring框架做的,主要用于IOC AOP ,spring之前采用的2.0版本。(2.0版本出错!下面有解释); 要实现websocket 实现后台主动与JSP发送数据。
具体操作
在websocket类中 注解添加如下:
import org.springframework.web.socket.server.standard.SpringConfigurator;
//注解规定了访问的URL
@ServerEndpoint(value="/websocket",configurator = SpringConfigurator.class)
public class WebSocketServer {}
其中configurator = SpringConfigurator.class 这个表示让spring能扫描到该类,不加的话tomcat会自动启动该websocket类!
加上那句注解之后呢,就可以在websocket类中实现属性注入了。可以引入别的类了,以及使用被的类的方法了。
但是,出现了如下错误!
java.lang.NoSuchMethodError: org.springframework.web.context.ContextLoader.getCurrentWebApplicationC
这个错误是什么呢?
但是也可以采用另外一种方法引入xml,进行获取要使用的实例:
import org.springframework.web.context.ContextLoader;
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext.getServletContext();
其中 ContextLoader.getCurrentWebApplicationContext(); 是引入的是spring.jar包中的(core包一般有的把core省略了,包含很多其他的方法,如hibernate方法),
这个方法ContextLoader.getCurrentWebApplicationContext(); 在spring.jar 2.0版本中不存在的,我翻了翻jar包仓库,发现到2.5.6版本sec03中有这个方法了
我是在这个地址看到的spring.jar (2.5.6)包的!http://repo.spring.io/release/org/springframework/spring/2.5.6.SEC03/
之后就可以把spring2.0包去掉了,换上这个包2.5.6sec03就可以了。 (注意mysql服务要确认开启!别到时候hibernate不好使了。)
关于websocket 采用注解指明URL,采用tomcat启动的方式来做:
除了spring2.5.6.jar包还有如下包:
javax.websocket-api-1.1.jar
spring-2.5.6.Sec03.jar
spring-websocket-4.3.0.RELEASE.jar
tomcat7-websocket-7.0.62.jar
总结
package service;
import org.springframework.web.socket.server.standard.SpringConfigurator;
import pojo.Goods;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
//注解规定了访问的URL
@ServerEndpoint(value="/websocket",configurator = SpringConfigurator.class)
public class WebSocketServer {
//属性注入
private Goods goods;
private GoodsService goodsService;
public void setGoods(Goods goods) {
this.goods = goods;
}
public void setGoodsService(GoodsService goodsService) {
this.goodsService = goodsService;
}
public WebSocketServer(){
System.out.println("Socket Constructor!");
}
..........
}
javax.websocket-api-1.1.jar
spring-2.5.6.Sec03.jar
spring-websocket-4.3.0.RELEASE.jar
tomcat7-websocket-7.0.62.jar
this passage from https://www.cnblogs.com/zhaocundang/p/10057305.html
websocket采用tomcat方式,IOC类对象无法注入的解决方案的更多相关文章
- Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域
Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...
- Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签
1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...
- 使用tomcat方式实现websocket即时通讯服务端讲解
使用tomcat方式实现websocket即时通讯服务端讲解 第一种方案:使用Tomcat的方式实现 tomcat版本要求:tomcat7.0+.需要支持Javaee7 导入javeee-api的ja ...
- JavaScript 创建类/对象的几种方式
在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量 ...
- DELPHI XE2 采用 JSON 的方式来序列化对象
DELPHI XE2 采用 JSON 的方式来序列化对象 以下代码测试通过.问题是里面的中文,在反序列化后是乱码. 1. 序列化对象为字符串,Subject 里面的中文看起来正常,仍然是中文: 2. ...
- Objective-C 【类对象及SEL存储方式】
------------------------------------------- 类的本质--类对象 一段代码: #import <Foundation/Foundation.h> ...
- java采用zip方式实现String的压缩和解压缩CompressStringUtil类
CompressStringUtil类:不多说,直接贴代码: /** * 压缩 * * @param paramString * @return */ public static final byte ...
- spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象
相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXm ...
- Android通过类对象的方式实现JSON数据的解析
1.通过主Activity的Button按钮实现数据的解析 public class MainActivity extends Activity { //定义一个包含Json格式的字符对象 priva ...
随机推荐
- redis(五)
发布订阅 发布者不是计划发送消息给特定的接收者(订阅者),而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅 订阅者对一个或多个频道感兴趣,只需接收感兴趣的消息,不需要知道什么样的发布者发布的 ...
- innerHTML innerText与outerHTML间的区别
innerHTML与innerText及outerHTML间的区别最容易使初学者搞混淆,为了更好的使读者区分开.下面我就通过一个demo来解释: 代码: <!DOCTYPE html>&l ...
- c# 后台 添加datable 数据
public void AddRows(HtmlTable table(表名),DataTable dt(数据源), string i(自增长)) { ...
- 将一个C++的AES加密算法(有向量的)翻译成C#
/****************************************************************************** Copyright (c) 2012-2 ...
- static之静态初始化块
static之静态初始化块 所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是: 父类的静态初始化块 子类的静态初始化块 父类的初始化块 父类的 ...
- python 计算程序运行耗时的好用的代码
python 计算程序运行耗时的好用的代码: import time start=time.clock() sum=0 for i in range(50): sum=sum+i print(sum) ...
- python2中urllib2模块带cookies使用方法
#!/usr/bin/python # coding=utf-8 #############方式1######################### import urllib2 cookie = & ...
- python之抽象类
1什么是抽象类 与java一样,python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 2为什么要有抽象类 如果说类是从一堆对象中抽取相同 ...
- 关于实现udev/mdev自动挂载与卸载
在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似.不能在挂载的目录中进行热插拔,否 ...
- Aizu2170 Marked Ancestor(并查集)
https://vjudge.net/problem/Aizu-2170 并查集用于管理元素分组情况. 建树pre[]记录父节点,一开始只有结点1被标记了,所以find()最终得到的根都是1. 如果遇 ...