在Java EE项目中控制范围的方法是什么?我正在阅读有关会话,请求,应用程序范围以及某些bean应限于其中一个。这通常怎么做?它是由bean创建的项目类型,特殊注释还是其他方法?根据我的经验,我注意到,当在同一个包之外时,除非我注入或导入相关类,否则我的bean,servlet或DAO都不能相互访问。
答案 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
事物)的原因。请求范围持续用户特定请求的持续时间,并且特定于特定用户。页面范围......老实说,我不确定它的使用频率。