0

我需要在我的 Web 应用程序中创建一些空目录以供将来使用。在我的 IDE 中,我创建了它们,但是当我运行我的应用程序时,这个文件夹没有被创建并且在应用程序的 war 文件中不存在。

如何在运行时在 war 文件中创建这些空文件夹?

我知道添加一个文件(例如 .empty 文件)可以解决我的问题,但这不是一个好的解决方案。

4

2 回答 2

1

不要假设您可以在解压 .war 的位置写入文件系统。无法保证 .war 甚至会被解包,或者如果是的话,它会被解包到哪里。

您最好使用通过 servlet 上下文参数配置的外部目录,并将其用于存储。

于 2012-06-06T12:15:58.523 回答
0

如果您使用的是 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 使用此策略来设置在后台运行的备份/警报作业组。

于 2020-08-03T12:46:12.533 回答