【发布时间】:2010-11-19 21:58:08
【问题描述】:
我是 J(2)EE 和 Web 应用程序开发领域的新手,但我很快就掌握了它并学到了很多东西。每一天对我来说都是一次奇妙的新发现之旅。
我目前正在开展一个项目,我在 Glassfish v2 上使用 Visual JSF Woodstock。我对 JSF 也很陌生。
有时我需要在请求之间保存一些对象(例如 MyObject)。从我到目前为止所阅读和理解的内容来看,我需要使用会话在不同请求之间保存这些对象。到目前为止一切顺利。
究竟如何做到这一点是我关心的地方。我知道在 JSP 中您可以使用session.setAttribute("myObj", myObject),它会使用 cookie 或 url 重写或隐藏的表单变量将对象保存在客户端。
另一方面,在 JSF 中,我使用 Session 范围的 bean,例如 SessionBean1,并将对象保存为 SessionBean1 属性(例如SessionBean1.setSomeOjb(myObj))。这是解决这个问题的正确方法吗?
我猜测这样做会导致服务器端的内存利用率增加,因为每个请求都会创建会话范围 bean 的新实例 SessionBean1 加上 SessionBean1 中保存的 myObject 实例使用的内存。
我读到您可以使用FacesContext.getExternalContext().getSession/getSessionMap(),它将会话变量保存在客户端。
那么您建议我使用哪种方法 - 会话范围的 bean 或 sessionmap 来保存对象以便在会话请求之间进行访问?
谢谢。
【问题讨论】:
-
“每个请求都会创建一个会话范围 bean 的新实例”这是完全错误的
标签: jsf session-state session-variables