每当我安装新的war文件时,Tomcat下载文件夹都是空的

时间:2012-11-13 00:12:15

标签: tomcat web-applications war

我知道Tomcat对我自己和其他人有危险。

要部署,我创建一个WAR文件(从Eclipse导出),然后将该WAR文件复制到\ apache-tomcat-7.0.23 \ webapps \文件夹,然后使用\ apache-tomcat-7.0.23 \ bin重新启动\的startup.bat。

我的webapp将PDF文件写入下载文件夹,据我所知,该文件夹必须位于Eclipse项目的WebContent文件夹中。

问题是,当我安装一个新的WAR文件时,当Tomcat解压缩它时,它会清除下载文件夹的内容,因此用户的先前输出会丢失。

提前感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:2)

我认为,将用户文件保存到Web应用程序的WebContent文件夹是不对的(至少不是很方便)。 WebContent文件夹适用于在Web应用程序存档中分发的资源。

通常的做法是在磁盘上使用某些特定位置来查找计划重用的用户文件

1)要在配置文件中指定位置,请在应用程序CLASSPATH的根目录中创建文件app.properties。在此文件中,您将拥有该属性

user.pdfs.location=/path/to/user/pdfs

要读取属性,请在servlet中使用以下代码:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream propsStream = classLoader.getResourceAsStream("app.properties");

Properties properties = new Properties();
properties.load(propsStream);

String userPdfsPath = properties.getProperty("user.pdfs.location");

因此,您始终可以在已创建的WAR中的“/WEB-INF/classes/app.properties”文件中更改PDF的位置。

2)或者您可以将参数传递给Tomcat的JVM:

-Duser.pdfs.location="/path/to/user/pdfs"

要读取参数值,请使用以下代码:

String userPdfsPath = System.getProperty("user.pdfs.location");

另一种流行的(但并不总是正确的)方法是将文件作为BLOB保存到数据库。考虑到在这种情况下,您有时可能会遇到应用程序性能或备份问题。

如果您想使用临时文件(例如,您想为用户创建只是为了下载的PDF),您应该使用JVM的临时目录。要获取临时目录

String tempDirPath = System.getProperty("java.io.tmpdir");

或者只需使用

创建临时PDF文件
File tempPDF = File.createTempFile("temp-", ".pdf");

答案 1 :(得分:1)

每当您重新部署任何应用程序时,Tomcat都会清除war文件和解压缩的文件夹。因此,如果您在提取的war路径中存储任何内容,它将在下次重新部署时被删除。 此外,在提取的Web应用程序中存储任何用户数据通常不是一个好习惯。如果您选择任何其他路径来创建用户文件,那么您也会更方便。