在jsp中定义了一个静态变量,比如说记录用户姓名吧。是不是最终成了只能记住最后一个用户的姓名了啊。 我想给每个用户分配一个变量,该怎么做啊(不用session对象)。

解决方案 »

  1.   

    尽量用session来控制吧,如果每个用户分配一个变量,会影响系统和页面的速度,也可能会出现一些不稳定情况
      

  2.   

    我是要用一个变量记录数据库连接,之前用普通方法,用的时候创建,用完关闭。由于数据库操作频繁,导致服务器大量端口被占,默认要240ml自动关闭。
    后用一个静态变量记录数据库连接,避免频繁开关,以为每个用户登录的时候都会拥有这么一个静态变量,测试时发现有用户取不到数据的情况,并且很快服务器内存就耗尽了,所以考虑静态变量是不是所有用户共享一个。
    置于为什么内存会耗尽,现在还没有一点想法...
    由于用的javabean,而bean里无法取得session里存储的变量,所以必须增加参数,把session的变量传递进去,改动量太大了,故有此问。
    向大家请教
      

  3.   

    用静态的hashtable吧,IP作为key,value自己定
    但这个是线程安全的,在大量用户访问的情况下,效率会很低
      

  4.   

    static 变量,所有用户都会共享这一变量
      

  5.   

    数据库连接不是有WEB服务器的连接池来管理吗,楼主何苦要自己来管理啊
      

  6.   

    static变量是该类的所有对象共享的,但是数据库连接这样的资源是不能多个用户并发操作的,如果connection用static变量并发的时候肯定会出问题!!
    比如第一个用户用conn正在查询数据,查询过程中第2个用户又拿该链接查询,那么此时肯定就出问题了。数据库连接应该是用的时候打开一个新的,用完就关闭,就算同一个用户的不同操作,也不能简单的共享同一个conn,因为同一个用户的不同操作也可能并发!避免数据库连接频繁打开关闭的解决办法是用连接池技术,用户用完一个连接后执行关闭操作的时候不是真正关闭,而是返回到连接池,用户每次取连接的时候会先到连接池取空闲连接,取不到就新建
      

  7.   

    不要想着共享connection,之前也有人把数据库连接资源做成了单例模式,结果并发时出现莫名其妙的问题。
    我之前发现一个项目老是过一段时间就连不上数据库,后来发现是有一个类里的connction定义成了静态成员变量。修改之后就好了。
    你要确保每个数据库操作都正常的打开关闭连接,开启提交事务,你说的这种情况很有可能是程序中有连接泄漏。
      

  8.   

    明白了,不用静态变量处理这个问题了,我现在发现可能是我连接池里的参数设置得有问题。
    maxActive 10000
    maxIdle   500设置得过大了吧。对于maxIdle该怎么理解啊,是不是假如我设定的是500,就始终会保持着500个连接,不会被释放呢?
      

  9.   

    还有个疑问,这个maxIdle数个连接是在服务器一启动时就建立的吗?这样的话浪费就严重了。
      

  10.   

    maxidle是最大空闲连接数,连接池可以保持500个空闲的连接重新利用
    maxidle是不是在启动时建立应该和连接池的实现有关,c3p0连接池的c3p0.initialPoolSize=3是设置初始大小的