RT.Jsp页面里大多隐藏对象都有setAttribute方法.
如application,session.
那么session.setAttribute("cart", cart);究竟是把cart对象的引用放入了session中,
还是复制了一份cart对象放入session中.
里面的运行机制到底是怎么样的...小弟新手...麻烦高手解答

解决方案 »

  1.   

    以Cookie形式保存?
    怎么个保存法.
    session对象不是保存在服务器端的吗?
    而客户端持有的是jessionid,服务器端的session以jessionid来判别每个客户端,或者采用url重写机制.
      

  2.   

    存的肯定是引用,如果新复制的话,多浪费空间啊。保存这个session id的方式可以采用cookie,但是由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息。
      

  3.   

    setAttribute方法语法: 
    object . setAttribute ( sName , vValue , iFlags ) 
    参数: 
    sName :  必选项。字符串(String)。指定属性的名称。 
    vValue :  必选项。要赋给属性的值。可以是任何需要的变量类型。 
    iFlags :  可选项。整数值(Integer)。0 | 1 0 :  当属性被设置的时候,对象任何已有的同名属性设置都会被覆盖,而不会考虑它们的大小写。 
    1 :  默认值。执行严格考虑字母大小写的属性设置。假如此方法的 iFlags 参数设置为 1 ,则执行 iFlags 参数设置为 0 的 getAttribute 方法时,满足 sAttrName 指定的特性名称不一定能被找到。 
    返回值: 
    无 说明: 
    设置指定的属性值。 
    假如指定的属性尚不存在,则此方法会为对象添加属性并赋值。 
    请务必小心拼写属性名称。假如你设置 iFlags 参数为 1 ,但是 sName 参数的字母大小写不符合您所期望赋值的属性名称,则此方法的执行结果会是新的属性被建立并赋值。 
    假如对象有多个名字一样但字母大小写不同的属性,并且 iFlags 参数被设为 0 ,那么只有其中第一个被建立的那一个会被此方法获取。而其他的则会被忽略。 
    当使用此方法获取 CLASS 属性的值时,需要将 sName 参数指定为 className 。这是 CLASS 属性所对应的 DHTML 特性。 
    <script> 
    var oCodeDiv; 
    var oFont; 
    var oSel; function window.onload(){ 
    oCodeDiv=document.all("idCodeDiv"); 
    oFont=document.all("idFont"); 
    oSel=document.all("idSel"); 
    oCodeDiv.innerText=oFont.outerHTML; 
    } function doSetAttribute(){ 
    with (oSel) {if (options[selectedIndex].value=="") return; 
    oFont.setAttribute(options[selectedIndex].innerText,options[selectedIndex].value);}; 
    oCodeDiv.innerText=oFont.outerHTML; 
    } </script> 
    <input type=button id=idFont onmouseout="this.style.color='black';" value="这里有一些文字"> 
    <br><br><br> 
    <select id="idSel" onchange="doSetAttribute();"> 
    <option value="" style="font-weight:bold;">---请选择属性--- 
    <option value="font-weight:bold">style 
    <option value="this.style.color='blue'">onmouseover 
    <option value="rdl">name 
    <option value="text">type 
    </select> 
    <br><br><div id=idCodeDiv></div> 
      

  4.   


    存储的对象保存到session失效,你setAttribute不可能是每次的名称都不相同吧,所以后一次会覆盖前一次的对象,没有什么大问题   
    如果你只是需要在这次请求中使用,应该在request.setAttribute中设置,它只在这次请求中有效
    用完的数据session.removeAttribute(...);
      

  5.   

    System.out.println(session.getAttribute("cart") == cart)
      

  6.   

    存储的对象保存到session失效,你setAttribute不可能是每次的名称都不相同吧,所以后一次会覆盖前一次的对象,没有什么大问题  
    如果你只是需要在这次请求中使用,应该在request.setAttribute中设置,它只在这次请求中有效 
    用完的数据session.removeAttribute(...);
      

  7.   

    这明显是复制吧,set以后都进入到客户端啦。