有没有什么办法可以在运行时在context.xml中存储一个字符串?

时间:2013-02-03 14:20:23

标签: java java-ee tomcat context.xml

在我的Web应用程序的许多地方,我需要一个特定的String:

request.getServletContext().getRealPath("/"); 
// I can only get this once the web-app starts

有时一个简单的java类需要知道这个字符串。我不希望每次将这个字符串传递给类的功能。一种方法是在Web应用程序的最开头将此字符串存储在文件中。每次我需要这个,只需阅读文件。但这似乎不是一个很好的选择。还有其他出路吗?

可以存储在应用程序的context.xml中。如果有可能我该怎么做?

如果有更好的方法请建议。

我使用tomcat作为服务器。

2 个答案:

答案 0 :(得分:1)

调用应用程序启动时运行以下代码(例如使用ServletContextListener):

public void contextInitialized(ServletContextEvent sce) {
   ServletContextRootRealPath.set(sce.getServletContext().getRealPath("/"));
}

然后,只要你需要它,你只需致电

ServletContextRootRealPath.get()

因为它是全静态的,所以变量可以在JVM范围内访问每个在这个JVM中运行的代码。

公用事业类

public final class ServletContextRootRealPath {
  private static String path;

  private ServletContextRootRealPath() {
    // don't instantiate utility classes
  }

  public static void set(String rootRealPath) {
    path = rootRealPath;
  }

  public static String get() {
    return path;
  }
}

答案 1 :(得分:0)

您可以将值存储在任何类的静态变量中(基本上是用于提供常用实用程序功能的帮助程序类)。稍后您可以在不创建类实例的情况下引用此变量,因为它是静态的,可以在没有实例的情况下访问。