我做的是一个web工程,我的数据库中有一个表是用来存储用户身份(Role表,2个字段RoleID和RoleName)的,我想在登陆系统的时候就查找数据库,得到这个表中的结果放到map中,在这一个会话中,我都不再查找数据库,直接从map中取结果,怎么做啊,求教大神

解决方案 »

  1.   

    Map<Role> map = 查数据库;
    //存到session
    session.setAttribute("roleMap",map);
      

  2.   

    不是放到map中,放到session里,这样在任何界面都可以取得你要的数据,注销的时候,再清楚session里的数据。
      

  3.   

    但是session会占用系统内存,和查数据库相比,值得么,最好是不用session就能解决,session我会
      

  4.   

    更关键的是,我这个系统中,相同的还有Department表,这样我还要创建一个session
    再加上登陆者的自身信息,至少要3个session,这么做貌似有点不合理,继续求
      

  5.   

    好像有个说法是用context,在服务器启动的时候加载,不知道是不是可以避免多个用户同时登陆而重复创建相同的session的问题,我还在查资料
      

  6.   

    context也是放在内存里的阿一般是这样做的
    1.全局基础类的数据在web服务器启动的时候加载到缓存里,一般像下拉列表里的基础选项,像国家,省市,部门等等。这里的缓存是全局context,例如application,或者直接存储在类的静态变量里。这里的信息都是全局共用的,不是某一个用户特有的。
    2.用户相关的基础来数据是每次当用户登录的时候放到session里的。例如:用户所拥有的菜单权限,用户信息,用户角色等等。也就是说和用户相关的特定信息。
      

  7.   

    现在确定用context了,在init()中,怎么用呢,直接在init(){……}中查找数据库,然后ServletContext context = getServletContext();r_map = RoleDao.selectRole(conn);context.setAttribute("r_map", r_map);这样做么,那么获取这里面的值呢,又该怎么做呢
      

  8.   

    解决了,留给以后能用到的人用吧。
    控制器:
    public void init() throws ServletException{
    Map<String,String> r_map = new HashMap<String, String>();
    Map<String,String> d_map = new HashMap<String, String>();
    ServletContext context = getServletContext();
    try {
    Connection conn = JDBCutil.getConnection();
    r_map = RoleDao.selectRole(conn);
    d_map = DepartmentDao.selectDepartment(conn);
    } catch (ClassNotFoundException e) {
    logger.error(e.getMessage());
    return;
    } catch (SQLException e) {
    logger.error(e.getMessage());
    return;
    }
    context.setAttribute("r_map", r_map);
    context.setAttribute("d_map", d_map);
    Context.setServletContext(context);
    }
    获取类Context:
    public class Context {
    private static  ServletContext sc;

    public static  void setServletContext(ServletContext context){
    sc = context;
    }
    public static ServletContext getServletContext(){
    return sc; 
    }
    }
    然后就可以在任何地方使用:context.getAttribute(“r_map”)获取到r_map的值了