【问题标题】:Tomcat downloads folder is empty whenever I install a new war file每当我安装新的war文件时,Tomcat下载文件夹都是空的
【发布时间】:2023-04-05 05:08:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: tomcat web-applications war


    【解决方案1】:

    我认为,将用户文件保存到 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");
    

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多