0

在我的网络应用程序的许多地方,我需要一个特定的字符串,它是:

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

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

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

如果有更好的方法请提出。

我使用tomcat作为服务器。

4

2 回答 2

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;
  }
}
于 2013-02-03T16:02:37.400 回答
0

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

于 2013-02-03T15:48:32.360 回答