2013-03-01 4 views
1

세션에지도를 넣는 경우. 그런 다음지도에서 객체를 제거하면 어떻게됩니까? 이것은 또한 세션에서지도를 변경시킬 것인가 아니면 다시 세션에 세션을 넣어야합니까?세션이 Java에서 어떻게 작동합니까?

  Map map = new HashMap(); 

     map.put("1", "1"); 
     map.put("2", "2"); 
     map.put("3", "3"); 
     map.put("4", "4"); 

     Session session = getSession(); 

     session.setAttribute("myMap", map); 

     map.remove("1"); 
+1

예, 세션의지도도 업데이트됩니다. –

답변

1

세션은 당신이지도의 내용을 변경하는 경우. 에 넣어 객체에 대한 참조를 유지,지도 객체 참조는 변경되지 않습니다. 여전히 동일한지도이므로 세션에있는 정보도 변경됩니다. 그래서 같이

:

Map original_map = new HashMap(); 
session.setAttribute("myMap", original_map); 

// Now put something into original_map... 
// The _content_ of the map changes 

// Later: 
Map retrieved_map = session.getAttribute("myMap"); 

// you'll find that retreived_map == original_map. 
// They're the same object, the same Map reference. 
// So the retrieved_map contains all that you put into the original_map. 
+0

지도는 같지만지도의 내용이 변경됩니다. – Kay

+0

네, 같은지도이기 때문입니다. 이렇게 :'Map map2 = map1; map2.put (...);'-> map1은 동일한 맵이기 때문에 새로운 요소를 둘러싼 다. 지도의 내용은 변경되지만지도는 동일합니다. – Kay

+0

나는 분명했지만. Object 참조가 같은 이유 : 동일한 맵 : 동일한 맵이므로 하나를 변경하면 다른 맵도 변경됩니다. Object에 대한 참조를 Object의 내용과 혼동하지 마십시오. – Kay

0

지도는 여전히 세션에 남아 있습니다. 그러나이 경우 WeakHashMap을 사용하는 것이 더 좋습니다. 아래의 링크를 세션에서

Weak Hash Map Discussion

+0

정확히 어떻게 관련이 있습니까? –

+0

약한 해시 맵이 실제로 작동하지 않을 수 있습니다. 이 시나리오를 생각해보십시오. 서블릿 1은 약한 해시 맵을 통해 세션에 무엇인가 넣습니다. 서블릿 1이 완료되면 객체가 가비지 수집됩니다. 나중에 서블릿 2는 세션에서 맵을 가져 오려고 시도합니다. -> 맵의 오브젝트 참조가 약했기 때문에 사라졌습니다. 실제로 세션에서 정보를 유지하려는 경우 일반 참조가있는 일반 Map은 세션이 닫힐 때까지 데이터를 유지합니다. – Kay

+0

@LuiggiMendoza, 그는지도/세션에서 객체를 제거하고 넣는 것에 대해 질문합니다. 나는 그가이 Map 구현에 대해 알기에 유용 할 것이라고 생각한다. Kay 말이 맞습니다. 모든 경우에 적합하지 않을 수도 있지만, 세션이 지워 져야 할 때 일부 개체가 가비지 수집되지 않을 수도 있습니다. WeakHashMap에 대한 주석은 단지 현재의 문제와 관련이없는 제안이었습니다. – psabbate

3

예는 업데이트됩니다지도 ......

Map map = new HashMap(); 
     map.put("1", "1"); 
     map.put("2", "2"); 
     map.put("3", "3"); 
     map.put("4", "4"); 
     session.setAttribute("myMap", map); 

     map.remove("1"); 
     Object mapw = session.getAttribute("myMap"); 
     out.println(mapw); 

출력

{3=3, 2=2, 4=4} 
0

예를 참조가 업데이트됩니다.

자바의 모든 객체는 접근자가 객체의 복사본을 반환하지 않는 한 참조로 전달됩니다.

관련 문제