【发布时间】:2010-04-28 14:52:33
【问题描述】:
我正在使用 struts 2,我想读取一些自定义参数(全局变量),最好是从 web.xml 或一些自定义“.properties”文件(即未在 Java 源代码中硬编码)。这个问题在过去的半小时里一直让我发疯,因为我无法谷歌任何合理的解决方案。
最好的方法是什么?这么难,我觉得很奇怪……
一切顺利
尼古拉·蒙特奇奥
【问题讨论】:
标签: properties struts2 struts
我正在使用 struts 2,我想读取一些自定义参数(全局变量),最好是从 web.xml 或一些自定义“.properties”文件(即未在 Java 源代码中硬编码)。这个问题在过去的半小时里一直让我发疯,因为我无法谷歌任何合理的解决方案。
最好的方法是什么?这么难,我觉得很奇怪……
一切顺利
尼古拉·蒙特奇奥
【问题讨论】:
标签: properties struts2 struts
有几种方法可以做到这一点。
【讨论】:
首先问问自己:这些常量真的与 Struts2 相关还是仅与您的应用程序相关?
如果是后者,这不是一个真正的 Struts2 问题,并且您 - 相信我 - 不希望将“常量”管理绑定到 Struts2(或 web.xml),它们应该可以从 webapp 之外的应用程序代码访问(例如,来自一些测试代码)。
我了解您对某些(例如)Constants 类(带有静态最终字段)中的“编码”常量感到难过,但请注意,这可能不是那么糟糕的做法 - 如果它们是真正的常量,不太可能独立于您的 java 代码而更改。值得考虑。
如果没有,您可能需要一些 ConstantsManager 类,它可能是单例无状态对象(或某种“服务”对象),它知道如何加载常量,例如从某些类路径中的属性文件。您的应用程序的对象(可能包括一些 Struts2 动作)如何获得对该 ConstantsManager 实例的引用?在最简单(也是最脏)的实现中,您将拥有一个带有静态 getInstance() 方法的单例模式实现。更灵活、更时尚的是DI/IOC的方式,可能带有一些bean的容器,比如Spring; Struts2 非常适合与that 一起玩。如果您不熟悉这些概念,它们肯定会很快出现,用于与访问某些常量类似(但不那么琐碎)的问题。
【讨论】:
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties"); 加载该文件我仍然觉得这很不雅。我会看看你的建议,谢谢你的回复
ActionContext.getContext().get(...) 可能会起作用。
【讨论】: