在java中使用应用程序范围变量

kei*_*3th 14 scope global-variables

我的公司将在未来几个月重做我们的网站,从ColdFusion网站转到用Java编写的网站.我只是在学习Java,我很好奇如何在Java Web应用程序中设置应用程序范围变量.ColdFusion有application.cfm文件,该文件包含应用程序中所有ColdFusion页面/组件都可访问的变量.Java显然没有直接等效于该文件,因此我想知道如何在Java中重新创建类似的东西.我希望有一个中心位置,webapp中的所有jsp页面,servlet,类等都可以访问.

那么做这样的事情最好的方法是什么?

有没有人有他们做过的类似事情的例子?

应用范围变量应该放在一个类中吗?一个xml文件?一个jsp页面?别的什么?

在java webapp中使用应用程序范围变量是否可行?

示例:它将保存一个说明图像文件夹路径的位置,因此在单个JSP页面或类或需要访问该图像文件夹的任何内容中,您可以引用该路径的应用程序范围变量,而不是将其写入每个地方.然后,如果由于某种原因我们需要移动该图像文件夹的位置,我们只需更改一个位置的路径变量,而不必更新引用该图像文件夹的20个位置.

我在网上的研究中找不到关于此类事情的任何信息,这就是我在这里问的原因.我知道要求对这类事情做出解释是很多的,但我想我会问,看看我能得到什么类型的回应.

感谢您提供有关此主题的任何帮助.

Bra*_*rad 27

等效的可能是ServletContext

在您的控制器servlet中:

ServletContext context = request.getSession().getServletContext();
Run Code Online (Sandbox Code Playgroud)

就像在会话对象中一样,您也可以在servlet上下文中存储属性

context.setAttribute("someValue", "aValue");

Object attribute = context.getAttribute("someValue");
Run Code Online (Sandbox Code Playgroud)

如果您刚开始使用Java并且需要构建一个非平凡的应用程序,我建议使用像SpringStruts这样的流行框架

  • 您可以将`ServletContext`视为所有Servlet,JSP等共享的全局空间.另一方面,`HttpSession`特定于每个用户.ServletContext可以通过web.xml初始化,但J2EE应用程序永远不会写入web.xml.它通常是只读存储.最佳实践是使用Springs [`ApplicationContext`]等框架定义"应用程序范围"值(http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/context/ApplicationContext.html )并且不污染web.xml.我建议您查看一些[教程](http://www.springsource.org/tutorials)文档 (4认同)