Не создавать пустые каталоги в файле war
Мне нужно создать несколько пустых каталогов в моем веб-приложении для будущего использования. В моей IDE я их создал, но когда я запустил свое приложение, эта папка не создается и не существует в файле war приложения.
Как я могу создать эти пустые папки в военном файле во время выполнения?
Я знаю, что добавление файла (например, файла.empty) решит мою проблему, но это не очень хорошее решение.
1 ответ
Не думайте, что вы когда-нибудь сможете писать в файловую систему в том месте, где распакован ваш.war. Нет гарантии, что.war будет даже распакован, или, если он есть, где он будет распакован.
Вам лучше использовать внешний каталог, настроенный с помощью параметра контекста сервлета, и использовать его для своего хранилища.
Если вы используете Java-сервлеты (я просто предполагаю, поскольку это Java-приложение, работающее в Tomcat, как я читал), вы можете реализовать интерфейс ServletContextListener для запуска собственного кода в событии контекста, например, для создания папок
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// check existence or create your folders
// this is the code that will be run on context init
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// here you can run custom code when the context is destroyed
}
}
Конечно, вам нужно добавить все необходимые дескрипторы в ваш файл web.xml, большинство IDE сделают это за вас, вы можете иметь свои собственные параметры или путь для загрузки файла свойств, но в любом случае вот фрагмент:
<listener>
<description>ServletContextListener</description>
<listener-class>org.your.package.MyListener</listener-class>
</listener>
<context-param>
<param-name>your:param-name</param-name>
<param-value>value</param-value>
</context-param>
<context-param>
<param-name>your:config-file</param-name>
<param-value>path/to/config.properties</param-value>
</context-param>
надеюсь, я не опоздал. Я использовал эту стратегию раньше с QuartzScheduler для настройки групп заданий резервного копирования / предупреждений, работающих в фоновом режиме.