【问题标题】:struts 2 - where should I set global application variables?struts 2 - 我应该在哪里设置全局应用程序变量?
【发布时间】:2010-04-28 14:52:33
【问题描述】:

我正在使用 struts 2,我想读取一些自定义参数(全局变量),最好是从 web.xml 或一些自定义“.properties”文件(即未在 Java 源代码中硬编码)。这个问题在过去的半小时里一直让我发疯,因为我无法谷歌任何合理的解决方案。

最好的方法是什么?这么难,我觉得很奇怪……

一切顺利

尼古拉·蒙特奇奥

【问题讨论】:

    标签: properties struts2 struts


    【解决方案1】:

    有几种方法可以做到这一点。

    【讨论】:

    • 感谢您的回复 - 我查看了 constant-configuration.html 链接,但是如何从 Java 访问键/值对?
    【解决方案2】:

    首先问问自己:这些常量真的与 Struts2 相关还是仅与您的应用程序相关?

    如果是后者,这不是一个真正的 Struts2 问题,并且您 - 相信我 - 不希望将“常量”管理绑定到 Struts2(或 web.xml),它们应该可以从 webapp 之外的应用程序代码访问(例如,来自一些测试代码)。

    我了解您对某些(例如)Constants 类(带有静态最终字段)中的“编码”常量感到难过,但请注意,这可能不是那么糟糕的做法 - 如果它们是真正的常量,不太可能独立于您的 java 代码而更改。值得考虑。

    如果没有,您可能需要一些 ConstantsManager 类,它可能是单例无状态对象(或某种“服务”对象),它知道如何加载常量,例如从某些类路径中的属性文件。您的应用程序的对象(可能包括一些 Struts2 动作)如何获得对该 ConstantsManager 实例的引用?在最简单(也是最脏)的实现中,您将拥有一个带有静态 getInstance() 方法的单例模式实现。更灵活、更时尚的是DI/IOC的方式,可能带有一些bean的容器,比如Spring; Struts2 非常适合与that 一起玩。如果您不熟悉这些概念,它们肯定会很快出现,用于与访问某些常量类似(但不那么琐碎)的问题。

    【讨论】:

    • 你提出了有趣的观点。我需要在我的应用程序中调整两类参数(基于内容的音乐识别软件的演示):算法参数(数学内容)和网络演示参数(例如,用于处理上传文件的目录) .我最终将后者存储在一个 .properties 文件中,我使用 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); 加载该文件我仍然觉得这很不雅。我会看看你的建议,谢谢你的回复
    【解决方案3】:

    我不知道这是否可行,但http://struts.apache.org/2.0.6/struts2-core/apidocs/com/opensymphony/xwork2/ActionContext.html#get%28java.lang.Object%29

    ActionContext.getContext().get(...) 可能会起作用。

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2011-05-15
      相关资源
      最近更新 更多