不在war文件中创建空目录

时间:2012-06-06 11:51:56

标签: java war

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

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

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

2 个答案:

答案 0 :(得分:1)

不要以为您可以在解压缩.war的位置写入文件系统。不能保证.war甚至会被打开包装,或者如果是,它将被解压缩。

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

答案 1 :(得分: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中使用了此策略来设置在后台运行的备份/警报作业组。