Spring定时器与struts问题
现在有项目有这样一个需求,使用Spring写了一个定时器,处理某个用户的数据,但是定时器是另外启动一个线程,这样就不经过struts拦截器,这样就导致我的JOB定时,没办法获取到request 进而获取到session中的数据。
本以为实现了ServletRequestAware就会注入,可是发现并不会。现在就纠结了,如果才能获取到session中的数据呢?
有人提出这样思路:把session写成静态的,如果是这样那会存在问题。这个不多说,觉得不可行。
我想应该有人碰到这样的问题。有经验的朋友提供解决办法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是个自定义类,你随便取个名都可以啊,里面仅仅是申明了两个ThreadLocal,分别把request和response存进去,要用的时候再取出来。
你说的这个WebContext 是哪个包的 ? 我怎么没找到这个类
写一个Filter(实现Filter接口),在这个Filter里把每次用户的session(或者直接把request和response)存入ThreadLocal里面。
具体存入的方法可以写在另一个类里面,比如:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
WebContext.setRequest(httpRequest);
WebContext.setResponse(httpResponse);
chain.doFilter(httpRequest, httpResponse);
}
在任何需要取session的地方,直接调用这个WebContext里的方法获取即可。
将需要的数据传递给线程即可,不需要获取Session