java - 在 Java 中创建可下载文件并存储在 Web 应用程序子目录中

标签 java jsp tomcat servlets file-io

在我的基于 Web 的应用程序 (Tomcat7/JDK 7 - JSP 3.0) 中,我构建了一个翻译器来获取 csv 文件,清理它们,然后保存文件。然后第二部分解析文件中的某些信息并创建第二个文件(因此它可以加载到另一个系统中进行验证)。这每天都会发生。这些文件正在写入 ${ECLIPSE_HOME}(因为我在 Eclipse 中运行它)。

我想要做的是在应用程序的根目录{即[app-root]/toBeDLd}中创建一个文件夹,专门用于将生成的文件保存到其中并下载它们,让我的前端JSP能够读取和显示文件(如可下载文件列表,您单击它在网络浏览器中下载的链接)并在特定时间删除该目录中的所有文件。我不需要保留它们,也不需要备份它们。

根据我的阅读,Sending OutputStream to browser and let browser save it将是一个不错的起点,但我也阅读了一些关于 SO 的其他评论,将文件保存在 Web 应用程序目录中违反了 servlet 规范。我不确定这是否是因为它是 webapp 的根目录。理想情况下,我希望将其完全包含在 Web 应用程序中。

这可能吗?这是最好的方法吗?

最佳答案

不要将其放在 Tomcats webapps 下的任何位置。这可能是一个非常糟糕的主意。

我的建议是给你的 web.xml 添加一个 dataDir 初始化参数:

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
    <init-param>
        <param-name>dataDir</param-name>
        <param-value>/var/data</param-value>
    </init-param>
</servlet>

然后您可以在您的 servlet 中使用此参数:

getServletConfig().getInitParameter("dataDir");

如果你希望它与你的 Tomcat 紧凑,可以选择 $CatalinaBase/dataDir

现在部署 Servlet 的人可以决定将数据放在哪里。 也许是一个没有执行权的额外分区。也许是一个额外的快速分区。

关于java - 在 Java 中创建可下载文件并存储在 Web 应用程序子目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990167/

相关文章:

java - Java 有没有办法从控制台调用方法?

java - 为什么尝试解析该值会导致 NumberFormatException?

java - 尝试通过JSP访问servlet中创建的bean

java - 如何用hibernate获取表中的所有数据?

tomcat - 使用 cURL 的 j_security 身份验证

java - 如何使需要相机支持的 ​​Android 应用程序在 Samsung Galaxy Mini 和类似设备上运行?

java - 如何从 GWT 的序列化策略中删除实现类型?

Java 服务器页面参数混淆

web-services - 示例 REST 服务不适用于使用 Tomcat 的 Jersey

java - 在 Maven 项目中获取 Tomcat 依赖项错误