请问:
A a=new A();
HttpServlet.session.setAttribute("a",a);

HttpServlet.session.setAttribute("a",new A());
有什么区别?
我在getAttribute("a")的时候。。第一个能得到放入对象a中的值,而第二个总是空指针!

解决方案 »

  1.   

    我试过了,没有你出现的情况啊,你是怎么做的?
            <%
                request.getSession(true).setAttribute("a",new test.GetData());
                test.GetData gd=(test.GetData)request.getSession().getAttribute("a");
                if(gd==null){
                    out.println("is null");
                }else{
                    out.print("not null");
                }
            %>
      

  2.   

    某些情况下getAttribute只能取1次。道理上不应该如此,但现实有时候是这样。所以第一次取没问题,第二次,你再取同一个就不合适了。其实那2个没区别。要试,你也别取一样的key啊
      

  3.   

    其实还是有区别的,我不知道你们怎么说没区别。lz你仔细分析下,new A()是什么意思。既然是new了就肯定生产一个新的对象,第一句new出的对象赋值给a,说明a就只想这个对象。所以这句 HttpServlet.session.setAttribute("b",a);的意思是让a这个对象保存这个“b”值,你用getAttribute("a")的时候就是取出对象a中的值“b”。HttpServlet.session.setAttribute("b",new A());这句话的意思也是让new出的对像指向“b”,可是你知道这个对象是什么吗??不知道!你只知道这个对象是指向“b”的,如果你也用getAttribute("a")类型去获取值的话,那个括号中的a你觉得要用什么代替?是new吗?如果是new的话,说明你又申请了一个新的对象,而这个新的对象和你原来的那个对象是不一样的,这个对象因为是刚申请的,所以返回值为null。
      

  4.   

    (test.GetData)request.getSession().getAttribute("a");中的“a”是哪来的?
      

  5.   

    大哥,setAttribute指定的这个对象的名字是“a”,当然取的时候也要用这个名字"a"喽!
    这个“a”可以看作是我们存放在session里的对象的名字。
    跟存自行车一个道理,你存的时候人家给你个号码是222,等你要去取自行车的时候,你给人家个333的号码,能取到你的车子吗?取到的会是车子吗?
      

  6.   


    谢谢大家的关心。。是我表述有误。。回去加强学习。。
    A a=(A)session.getAttribute("a");
    if(a==null)
    {a=new A();
    HttpServlet.session.setAttribute("a",a);
    //
    HttpServlet.session.setAttribute("a",new A());}