我现在要做一个程序! 在后台普通的java类里获取session的值! 要求不经过action传值!也就是说我action给session赋值之后就不指定获取的方法了! 那个java类想要这个session就能直接获取到! 用struts2好像有个ServletActionContext能直接获取到,但是现在我用的是struts1该怎么获取呢? 我考虑过在action中把值赋给一个对象! 但是这样的话只能存放一个值! 不能达到session的效果了! 就比如说我用来登录! 那就只可以有一个用户存在!我换个账户登录会把前面那个登录信息冲掉!请问还有啥其它的解决方法么? 期待...

解决方案 »

  1.   

    struts2利用不就是threadlocal嘛,你一样可以这样干么。把session仍threadlocal里面那个类想调用就调用呗
      

  2.   

    把session放入threadlocal还能判断哪个session的数据是当前的用户的数据吗? 我是从java类里面判断所以根本就不会通过action进行判断! 我是的是我那种做法只能登陆一个用户!这个做法是错的!刚刚用监听器做了下! 还是不能达到我想要的效果! 继续等待高手出现....
      

  3.   

    我来帮帮你。首先,你要改边思想,session是在普通类里调用不到的,你一定要明白这个词:context,上下文,也就是说,session、application要取到必须在 客户端请求-服务器端接收-服务器端处理-服务器端回传 这个带有联系的过程中才能得到,因为他们是服务器程序(如:Tomcat)自动实例的。如果楼主想在它们产生时或销毁时做处理,建议使用监听器。如果楼主想使用它们类似的功能,也可以操作XML。
      

  4.   


    问题是我要监测当前是哪个用户登录。用监听器我也试过! 不知道是我用得不对还是怎么的!反正达不到我的需求!现在在用threadlocal试!貌似这个应该可以实现我的需求!但是我现在遇到了一个判断是否是当前用户使用这个线程的问题。正在解决中 希望和大家一起探讨探讨
      

  5.   


    这几天项目忙~ 都没时间来看这个了...具体的业务是这样的: 我有一个调度的功能!这个调度模块是启动服务就启动的! 一启动不用任何操作就会扫描一些其它的业务模块! 现在我需要用户登录之后就监测到! 从而将一些扫描的结果进行判断是否是该用户并将符合判断条件的信息发送给该用户! 而这个事情只要该用户登录即可!不需要做任何操作! 也就是说不会经过ACTION来传递用户的Session数据! 而这个实现就和struts2里面的ServletActionContext差不多! 但是在struts1.x里面没有这个东西!
      

  6.   

    但是这样的话只能存放一个值! 不能达到session的效果了! 就比如说我用来登录! 那就只可以有一个用户存在!我换个账户登录会把前面那个登录信息冲掉!
    session 是和客户端有关联的,你打开一个客户端就创建一个session.我不知道你只可以有一个用户存在时什么意思,如果你打开两个浏览器登录就会有2个用户存在(struts2中不能配置成单例),struts1里面不是有request.getSession
      

  7.   


    我想你还没明白我的意思!你所说的request.getSession那是必须通过request请求才能获得数据的!而我要做的是不通过请求!即不会经过action来获取用户登录数据。而在struts1里不通过请求是获取不到request的信息的。
      

  8.   

    直接把session里面的值 放memcached里面 同步更新就是了
      

  9.   

    用户登录时,如果成功则自动提交查找扫描结果的Action,再把数据返回给用户。这个操作不一定是要放在session里面,可以用ajax或者直接登录成功后用JS自动提交action来达到lz想要的结果。如果一定要放在session里面,那就在登录成功但未返回响应时再查找扫描结果存到session,之后再返回响应。
      

  10.   

    用“监听器”结合数据库的一个“登录状态”字段应该就可以解决,登录时改变当前用户的“登录状态”为“在线”,如果下线,失去session时,在“监听器”的销毁中可以做改变当前用户的“登录状态”为“离线”,如果想在后台查看当前登录成员,可以直接查看数据库筛取“登录状态”为“在线”,并且最后登录时间倒序就可以达到楼主的效果了。
      

  11.   

    给你一个我写的例子吧public class SessionRequestFilter implements Filter { public static ThreadLocal local = new ThreadLocal();
    public static HttpServletRequest getRequest() {
    return (HttpServletRequest) local.get();
    }
    public static HttpSession getSession() {
    return (HttpSession) getRequest().getSession();
    } public static HttpSession getSession(boolean create) {
    return (HttpSession) getRequest().getSession(create);
    } public void init(FilterConfig config) throws ServletException {
    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    ServletRequest srequest = request;
    local.set((HttpServletRequest) request);
    chain.doFilter(srequest, response);
    } public void destroy() {
    System.out.println("filter destroy");
    this.config = null; }}
      

  12.   

    struts1方法execute方法中有HttpRequest request对象,可以直接用吧
      

  13.   

    谁说session只能存一个值,你想怎么存就怎么存