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

每当我安装新的war文件时,Tomcat下载文件夹都是空的,tomcat,web-applications,war,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解压它时,它会清除下载文件夹的内容,所

我对Tomcat的了解足以对我自己和其他人构成危险

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

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

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

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

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

通常的做法是,将磁盘上的某些特定位置用于计划重用的用户文件

1) 要指定配置文件中的位置,请在应用程序类路径的根目录中创建文件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");

无论何时重新部署任何应用程序,war文件和提取的文件夹都会被Tomcat删除。因此,很明显,如果您在提取的war路径中存储任何内容,那么它将在下次重新部署时被删除。
此外,在提取的web应用程序中存储任何用户数据通常不是一个好的做法。如果您选择任何其他路径来创建用户文件,也会更好、更方便

谢谢你的帮助。我完全准备好将这些文件存储到其他地方!您能更具体地说明我将如何指定“应用程序配置文件中的位置”吗。所有程序都已设置为将报告写入一个目录,该目录的名称已存储在MySQL表中,并且可供所有servlet使用。但我认为Tomcat中有一个参数表示“当用户键入这个url(或url的开头)时,然后在这个文件夹中查找它”。那个参数会在哪里,它叫什么?再次感谢。@BillQualls我不知道Tomcat中有这样一个参数。但您始终可以编写特殊的servlet将文件返回给用户。将servlet的“url模式”指定为
下载servlet
,并将“file”参数传递给它:
/download servlet?file=user.pdf
。下面是一个类似servlet的示例: