我需要在我的 Web 应用程序中创建一些空目录以供将来使用。在我的 IDE 中,我创建了它们,但是当我运行我的应用程序时,这个文件夹没有被创建并且在应用程序的 war 文件中不存在。
如何在运行时在 war 文件中创建这些空文件夹?
我知道添加一个文件(例如 .empty 文件)可以解决我的问题,但这不是一个好的解决方案。
不要假设您可以在解压 .war 的位置写入文件系统。无法保证 .war 甚至会被解包,或者如果是的话,它会被解包到哪里。
您最好使用通过 servlet 上下文参数配置的外部目录,并将其用于存储。
如果您使用的是 java servlet(我只是假设,因为它是在我阅读时在 tomcat 中运行的 java 应用程序),您可以实现 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 使用此策略来设置在后台运行的备份/警报作业组。