繁体   English   中英

Java-设置上下文属性(ServletContextListener)

[英]Java - Setting context attributes (ServletContextListener)

我在Web应用程序启动阶段(contextInitialized())读取了一个属性文件,然后开始考虑如何使这些设置对servlet“可见”。 我是否需要遍历键并将每个键添加到上下文中,像这样

Iterator i = settings.keySet().iterator();
while (i.hasNext()) {
    key = (String) i.next();
    value = (String) settings.get(key);
    context.setAttribute(key, value);
}

还是有更好的方法?

谢谢!

/亚当

为什么不将所有内容存储在servlet上下文中?

context.setAttribute("mySettings", settings);

setAttribute的签名是:

public void setAttribute(String name, Object object)

您是否考虑过在web.xml中定义设置的可能性?

另外,如果不可能,请使用泛型:

String key = null;
Iterator<String> i = settings.keySet().iterator();
while (i.hasNext())
 context.setAttribute(key = i.next(), settings.get(key));

我一直在玩一个主意:

在上下文初始化的方法中,我计划只为设置创建一个全局对象。 很像建议的工具箱。 但是,除了为每个键/属性/设置设置上下文属性之外,添加设置容器/包装对象不是一个好主意吗? 我认为此类将负责保持(静态?)模块设置类。 这样我可以得到像这样的类型化引用

//ExampleServlet.java
Settings settings = (Settings)context.getAttribute("application.settings");

String color = settings.getModule1().getColor();
String font = settings.getModule1().getFont();

int blogs = settings.getModule2().getActiveBlogCount();

在整个代码中,我只需要记住一个属性键,即整个设置容器的属性键。 减少可能导致朗姆舞异常的错字风险! 这也将使重命名属性变得容易。

你怎么看?

/亚当

如何使用JNDI上下文。 JNDI是将属性传递到Web应用程序的更常见方法。

可以在META-INF / context.xml中为tomcat或任何特定于应用程序的设置指定任何属性。

我曾考虑过将整个属性对象设置为上下文属性。

如果我不走这条路,是否有关于如何命名这些属性的准则,或者您认为“ application.settings”还是“ myBlog.settings”? 如何分组密钥? 这样可以吗:

application.module1.color=black
application.module1.font=arial

从某种意义上说,我觉得维护这样的应用程序成为一种负担,因为在这些应用程序中,属性键分布在整个代码中? 如果其他开发人员在属性文件中重命名了属性,则只有在运行应用程序时(如果/何时/什么引用了旧键),我们才会知道。 对?

我必须查找JNDI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM