创建可下载文件并存储在Java中的web app子目录中

时间:2014-04-10 13:57:25

标签: java jsp tomcat servlets file-io

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

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

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

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

1 个答案:

答案 0 :(得分:0)

不要把它放在Tomcats webapps 下。这可能是一个非常糟糕的主意。

我的建议是在web.xml中添加dataDir init参数:

<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的人可以决定将数据放在何处。 也许是没有执行权限的额外分区。也许一个额外的快速分区。