Как получить доступ к файлу конфигурации из сервлета, развернутого как .war-файл и работающего в Tomcat 5.5? - PullRequest
1 голос
/ 01 июня 2009

Я пытаюсь получить доступ к файлу конфигурации из сервлета внутри .war-файла. Проблема в том, что путь к файлу по умолчанию - сам корень tomcat, и жесткое кодирование пути к файлу тоже не похоже на вариант. Можно ли получить какую-либо информацию через ServletContext или любые переменные Tomcat?

Ответы [ 3 ]

1 голос
/ 01 июня 2009

Если вы поместите файл в каталог 'classes' в вашем конкретном каталоге webapps (./webapps/ndomservlet enj/classes), то вы можете получить к нему доступ из класса Java, выполнив это:

Class.getResourceAsStream(<filename>);

так что если у вас есть файл conf в /webapps/myServlet/classes/conf.xml

Class.getResourceAsStream("conf.xml");
1 голос
/ 01 июня 2009

Гэндальф предоставил «правильный» ответ. Вы можете безопасно использовать это где угодно. Это все, что вам нужно.

Только предостережение. Некоторые люди предполагают, что, поскольку существуют способы ЧТЕНИЯ данных из WAR, это означает, что можно также ПИСАТЬ данные внутри WAR. В буквальном смысле, иногда это правда. Но не всегда. И это почти никогда не безопасно.

Я упоминаю об этом, потому что унаследовал веб-приложение, которое сделало именно это. Хранит целое дерево каталогов файлов в разобранном каталоге WAR. Первое обновление программного обеспечения, которое пришло, "Пуф!" все эти тщательно загруженные файлы данных исчезли.

Так что обрабатывайте WAR только для чтения. Если вам нужно написать, укажите каталог вне сервера приложений. Желательно в качестве настраиваемого параметра в файле web.xml, чтобы вы могли использовать JNDI для его поиска и переопределять его для целей тестирования без необходимости изменения исходного кода.

0 голосов
/ 01 июня 2009

Я совсем не уверен, что это «правильная» вещь, но в прошлом я читал переменную среды для пути к моему файлу конфигурации.

Примерно так (вы должны лучше обрабатывать исключения, чем в этом примере ... но вы понимаете):

public File getConfigurationFile() {
   String envPath = System.getEnv("CONFIG_FILE"); // Use a better-named variable
   if(envPath == null || envPath.equals("") {
      throw new RuntimeException("CONFIG_FILE environment variable not set.");
   } else {
      File f = new File(envPath);
      if(!f.exists())  {
       throw new RuntimeException("CONFIG_FILE environment variable points to non-existent file");
      } else if(!f.isFile()) {
       throw new RuntimeException("CONFIG_FILE environment variable points to non-file entity.");
      } else if(!if.canRead()) {
       throw new RuntimeException("CONFIG_FILE points to unreadable file.");
      } else {
        return f;
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...