我需要在我的Web应用程序中创建一些空目录以供将来使用。在我的IDE中,我创建了它们,但是当我运行我的应用程序时,这个文件夹没有创建,并且在app war文件中不存在。
如何在运行时在war文件中创建这些空文件夹?
我知道添加一个文件(例如.empty文件)会解决我的问题,但这不是一个好的解决方案。
答案 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中使用了此策略来设置在后台运行的备份/警报作业组。