首先我采用的框架是spring+webwork+hibernate
目前遇到的问题是:我想创建一个servlet来定时同步一些数据,而目前最主要的是同步用户是否真的在线的数据
我在数据库中设置了一个字段 isonline 纪录用户是否在线 同时设置了一个字段pointcode纪录sessionId
业务中我是这样做的:当用户登录后自动把数据库里的isonline字段update为在线的const常量,当用户注销或者退出后update该字段为离线的const常量。这时就需要考虑特殊情况,用户未注销直接转到其它的网站url或者直接关闭浏览器,或者断电的情况,我所采用的方法就无法做到该要求。以前我也曾用过js控制这个情况,后来想想如果能做一个servlet让其同步该数据,查询数据库中isonline用户在线的user的sessionId,然后拿这个sessionId来与当前在线的Hash Set中的数据来比对,如果不存在与其中,则把该用户的isonline字段更新一下。问题就出现在这里:
我用的是接口模式
interface UserAware {
List getUsers(String isonline);
updateCustomer(User user);
......
}
class UserService implements UserAware {
......
}
我现在在servlet的init()方法里面要使用这个接口方法来进行操作。
尝试过一下几个方法:
另外创建一个类
class CubeUser extends ActionSupport{
private UserAware userAware;
void run(){
//实现业务逻辑
...
List aUers=userAware. getUsers(Const.ISONLINE);
...
}
//省略的get() set()
......
}
这样做userAware似乎不为null,但总是在这里就出错了,似乎hibernate为null了
我也尝试过使用这样的方法:
class UserAwareFactory{
static UserAware getUserService(){
return new UserService();
}
}
//这样我在
class CubeTwoUser{
private UserAware userAware=UserAwareFactory.getUserService();
List aUers=userAware.getUsers(Const.ISONLINE);
//依旧出现上述问题
}
想请教下是我处理的方式有错还是过程中有错误的地方。
似乎如果能在HttpSessionListerer中能使用接口中的方法那就更好了,呵呵。
有同样经历的可以进来讨论下不,呵呵。
thank you very much!
分享到:
相关推荐
在WebWork中,当用户提交表单时,请求会被转发到指定的Action URI,该URI对应着一个具体的Action。Action执行完毕后,会将控制权转交给下一个视图(View)。 下面是一个示例`LoginAction`类,该类扩展自`...
它解决了在J2EE开发过程中常见的许多问题。Spring提供了一种一致的方式来管理和配置业务对象。它鼓励开发者采用依赖注入(Dependency Injection)的方式来编程,这使得开发者更倾向于对接口编程而非对具体的类编程。...
Struts 2不再依赖于Servlet容器,这使得Action可以在没有容器的情况下独立测试,增强了测试的便利性。同时,通过依赖注入,开发者可以更容易地控制和管理Action的生命周期,提高代码质量。 对于输入捕获,Struts 2...
默认拦截器的设置主要是为了简化配置,当一个包中的所有Action都需要使用一些共同的拦截器或者拦截器栈时,可以在struts.xml中通过标签指定默认拦截器引用。例如,配置默认拦截器栈为“basicStack”: ```xml ``...
- **增加Struts2标签库**:将Struts2标签库的jar包加入到项目中,并在JSP页面中引用标签库。 - **控制标签**: - **if/elseif/else**:条件判断。 - **iterator**:循环遍历集合。 - **append**:字符串拼接。 -...
- 在Struts1中,Action类需要继承一个抽象基类,而Struts2则允许Action类实现Action接口或其他自定义接口,提供更大的灵活性。此外,Struts2还提供了一个ActionSupport基类,包含了常用接口的实现。 - Struts1的...
Struts2框架是在WebWork和Struts1基础上发展而来,融合了两者的优势,提供了更为灵活和强大的功能。其工作流程相较于Struts1更为复杂,但也更加精细和高效。 1. **请求接收**:客户端向服务器发送请求,请求最终由...
- **name**:动作的名称,用于在URL中引用。 - **class**:动作类的全限定名。 - **method**:指定执行的动作类中的方法,默认为`execute()`。 示例配置: ```xml <result name="success">/hello.jsp ``` ...
将DWR库添加到项目中,通常是将jar包放置在项目的lib目录下,并确保项目能正确引用这些库。 - **步骤2:编辑配置文件** 配置`web.xml`和`dwr.xml`文件,指定DWR的初始化参数、安全设置等。 - **步骤3:编写...
Interceptor可以组织成栈,通过interceptor-stack标签定义,然后在Action配置中引用,以定义特定Action的拦截器顺序。 例如,以下配置展示了如何在名为"sessionStack"的Interceptor栈中添加自定义的...
该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建...
Spring 框架解决了 J2EE 开发中常见的问题,比如依赖管理和控制反转(Inversion of Control, IoC),以及面向切面编程(Aspect-Oriented Programming, AOP)等。 - **依赖注入(Dependency Injection, DI)**: ...
- **定义与作用**:Spring是一个解决了许多在J2EE开发中常见问题的强大框架。它提供了管理业务对象的一致方法,并且鼓励开发者采用面向接口编程而不是面向具体实现类编程的习惯。 - **核心特点**: - **依赖注入...