2011-11-16 77 views
0

控制Java EE项目中的范围的方法是什么?我正在阅读有关会话,请求,应用程序范围以及某些bean应该被限制在一个或另一个的限制。这通常如何完成?它是由什么类型的项目创建的,特殊的注释或其他方法?根据我的经验,我注意到,除了相同的包之外,我的bean,servlet或DAO都无法访问对方,除非我注入或导入相关的类。Java EE项目中的控制范围

回答

1

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

+0

在使用数据库和实体,EJB和servlets/jsp实现了MVC形式后,我开始学习JSF。我正努力在这个模型中融入JSF。 – Randnum

+0

它们不适合JSF模型,至少不够紧密。 JSF组件可以使用EJB组件,但在关系的两端都是可选的。基本上JSF只是具有生命周期模型,依赖注入和一些新标签的JSP ......你应该了解的是依赖注入是如何工作的,因为它连接了这两种独立的技术。 – zeller

+0

你的意思是像@EJB MyEJB myejb; ? – Randnum

1

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

只要请求有效,请求范围变量/对象即可生效 - 请记住请求可能跨越多个JSP/Servlet。

会话作用域对象存在并且可以在会话持续期间通过所有请求,JSP和Servlet访问。 '会话'通常是用户在登录会话期间查看的所有页面。

应用程序作用域对象和变量是全局范围的,并且只要应用程序正在运行即可。他们可以从所有的请求,JSP,Servlets等访问。

0

您正在将EE范围与class/package/etc混淆。范围。

通过将对象放置到您提到的其中一个示波器中,可以将对象暴露给JSP页面(或其他视图层技术)。它与Java程序包/类的可见性无关,但该对象是否可用于整个application,当前用户的session,当前request或当前page

应用程序范围在应用程序期间持续存在。会话范围特定于特定用户与应用程序的“对话” - 这就是为什么我们需要会话cookie或URL重写(jsessionid的事)。请求范围持续用户特定请求的持续时间,也是特定用户特有的。页面范围...说实话,我不知道它的使用频率。