【问题标题】:Using application scope variables in java在java中使用应用程序范围变量
【发布时间】:2012-06-18 21:30:25
【问题描述】:

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

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

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

应用程序范围变量应该放在一个类中吗?一个xml文件?一个jsp页面?还有什么?

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

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

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

感谢您为此主题提供的任何帮助。

【问题讨论】:

    标签: global-variables scope


    【解决方案1】:

    等价的可能是ServletContext

    在您的控制器 servlet 中:

    ServletContext context = request.getSession().getServletContext();
    

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

    context.setAttribute("someValue", "aValue");
    
    Object attribute = context.getAttribute("someValue");
    

    如果您刚开始使用 Java,并且要构建一个重要的应用程序,我建议您使用流行的框架,例如 Spring 或 Struts

    【讨论】:

    • 谢谢。当您在 servlet 上下文中设置属性时,它会在会话超时时过期吗?到目前为止,我发现我可以在 web.xml 文件中设置 标记并通过 servlet 上下文访问这些标记,但我怀疑使用 setAttribute 方法实际上会更改 web.xml 文件,尤其是在运行时。那么在 servlet 上下文中设置属性有什么意义呢?它与设置会话属性真的有什么不同吗?我只是好奇。
    • 您可以将ServletContext 视为所有Servlet、JSP 等共享的全局空间。另一方面,HttpSession 特定于每个用户。 ServletContext 可以由 web.xml 初始化,但 J2EE 应用程序从不写入 web.xml。它通常作为只读存储。最佳实践是使用 Springs ApplicationContext 之类的框架定义“应用程序范围”值,并且不污染 web.xml。我建议查看一些 Tutorial 文档
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多