session是服务器的东东用local好像有问题小弟胡想的。

解决方案 »

  1.   

    好象不行,你怎么可能登陆后接下来的操作都是同一个线程的?
    在web server里应该是你每提交一个请求,服务器随机从threadpool里取一个线程来处理吧.
      

  2.   

    如果是做c/s的或许可以,服务端可以用开一个线程一直来处理这个用户的操作,b/s的肯定不行的
      

  3.   

    好象是不行,你取的null应该是表示会话过期(或者线程关闭),你如果用线程保存对象,那你怎么在不同页面取得这个线程呢??显然还是得将线程的引用存到session中,所以没什么意义.
      

  4.   

    public class ContextHolder {
        private static ThreadLocal userInfo = new ThreadLocal(){
            protected Object initialValue() {return new UserInfo();}
        };
        /**
     * @return Returns the UserInfo.
     */
    public static UserInfo getUserInfo() {
            return (UserInfo) userInfo.get();
    } /**
     * @param userinfo The UserInfo to set.
     */
    public static void setUserInfo(UserInfo userinfo) {
            System.out.println("========"+userinfo);
            userInfo.set(userinfo);
        }
    }
    public class GetUserInfo implements Serializable {
        public static UserInfo getUserInfo() {
            if ((ContextHolder.getUserInfo() == null)
    || !(ContextHolder.getUserInfo() instanceof UserInfo)) {
    throw new RuntimeException("系统无法获取用户的会话信息.");
    }
    UserInfo info = ContextHolder.getUserInfo();
    return info;
    }
    }在登陆时
    UserInfo ui =new UserInfo();
     ui.setName("user"+System.currentTimeMillis());
    ContextHolder.setUserInfo(ui);在取登陆信息时
    System.out.println("--------"+ GetUserInfo.getUserInfo());
    在多用户情况下输出有时是空有时能取到值,不知道为什么