控制Java EE项目中的范围

时间:2011-11-16 20:22:30

标签: java java-ee annotations scope

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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