【问题标题】:Controlling scope in Java EE projects控制 Java EE 项目中的范围
【发布时间】:2011-11-16 20:22:29
【问题描述】:

在 Java EE 项目中控制范围的方法是什么。我正在阅读有关会话、请求、应用程序范围的信息,并且某些 bean 应该仅限于其中一个。这一般是怎么做的?是通过什么类型的项目创建 bean、特殊注解还是其他方法?根据我的经验,我注意到当在同一个包之外时,除非我注入或导入相关类,否则我的 bean、servlet 或 DAO 都无法相互访问。

【问题讨论】:

    标签: java jakarta-ee annotations scope


    【解决方案1】:

    我认为你在混合。您列出的范围适用于 JSF 支持 bean,通常与 HTTP 会话或请求相关。 EJB-s 在这种情况下没有范围。要使用它们,必须使用 DI 注释(或者通过 JNDI 上下文查找)注入它们。

    【讨论】:

    • 在实现了一种带有数据库和实体、EJB 和 servlet/jsp 的 MVC 形式之后,我开始学习 JSF。我正在努力让 JSF 适应这个模型。
    • 它们不适合 JSF 模型,至少不适合。 JSF 组件可以使用 EJB 组件,但这在关系的两端都是可选的。基本上,JSF 只是具有生命周期模型、依赖注入和一些新标签的 JSP……你应该了解依赖注入是如何工作的,因为它连接了这两种独立的技术。
    • 你的意思是像@EJB MyEJB myejb; ?
    • 对于其他阅读本文的人,可能有同样的困惑,我刚刚读到有一个注释@ViewScoped,@RequestScoped,我相信它可以控制 JSF 托管 bean 的这些范围。
    • 是的。我建议您阅读有关 JSF 生命周期和框架的内容,我认为这将有助于理解这些内容。
    【解决方案2】:

    范围是指变量存在多长时间并且可以使用。在 Java Web 应用程序中有四个范围:页面、请求、会话和应用程序。对于具有页面范围的变量/对象,它们仅存在于 JSP 页面中。默认情况下,在 JSP 中创建的任何对象或变量都具有 Page 范围。

    只要请求有效,请求范围变量/对象就会存在——请记住,请求可能跨越多个 JSP/Servlet。

    会话范围对象在会话期间通过所有请求、JSP 和 Servlet 都存在并可访问。 “会话”通常是用户在登录会话期间查看的所有页面。

    应用程序范围对象和变量在范围内是全局的,只要应用程序正在运行,它就一直存在。它们可从所有请求、JSP、Servlet 等访问。

    【讨论】:

      【解决方案3】:

      您将 EE 范围与类/包/等混淆了。范围。

      通过将对象置于您提到的范围之一,可以将对象暴露给 JSP 页面(或其他视图层技术)。它与Java包/类的可见性无关,而是对象是否对整个application、当前用户的session、当前request或当前page可用。

      应用程序范围在应用程序的持续时间内存在。会话范围特定于特定用户与应用程序的“对话”——这就是我们需要会话 cookie 或 URL 重写(jsessionid 事物)的原因。请求范围持续用户特定请求的持续时间,也特定于特定用户。页面范围...老实说,我不确定它的使用频率。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 2013-03-16
        • 2018-03-05
        • 2012-03-21
        相关资源
        最近更新 更多