【问题标题】:How to get deployment directory path in JSF application?如何在 JSF 应用程序中获取部署目录路径?
【发布时间】:2010-08-09 15:48:36
【问题描述】:

是否可以从 JSF 应用程序中找出部署路径?

还有一个问题(如果前一个问题的答案是正确的):在那里存储一些上传的文件是否合法?

【问题讨论】:

    标签: java deployment jsf file-upload


    【解决方案1】:

    是否可以从 JSF 应用程序中找出部署路径?

    不是直接,您需要从ExternalContext 中获取ServletContext,如下所示:

    ServletContext servletContext = (ServletContext) externalContext.getContext();
    

    它又提供了众所周知的 dubious getRealPath() 方法。

    String webContentRoot = servletContext.getRealPath("/");
    

    如果您已经使用 JSF 2.0,则可以改用 ExternalContext#getRealPath()


    还有一个问题(如果前一个问题的答案是正确的):在那里存储一些上传的文件是否合法?

    你可以这样做。您只需要考虑到在重新部署应用程序时它们都会丢失,原因很简单,这些文件不包含在原始 WAR 中。

    如果您想要更多的永久存储空间,请考虑将其存储在 Web 应用程序外部的固定路径中,例如/var/webapp/upload 左右。另一种方法是将它们存储在数据库中,这将增加可移植性,但请记住在文件内容中存储一些元数据(名称、内容类型、上次修改的时间戳等),以便您有一些东西可以索引/搜索/缓存开。

    【讨论】:

    • 实际上我需要将上传的图像存储在某个地方。正如我发现的那样,将图像位置存储在数据库中并将图像本身存储在文件系统中的某个位置是一种很好的做法。我想提供 2 个选项:在应用程序之外的某个地方,如您所建议的(已经实施),以及在部署路径下。但我不知道他们会在重新部署后被清除,所以我可能会放弃这个想法。谢谢!
    • 是的,您也可以这样做。使用 SQL 进行搜索要容易得多。尽管纯粹主义者会说“不”反对将二进制数据存储在数据库中,但它实际上并没有坏处。这只是..没用的。您不能索引/搜索二进制数据。但它绝对比在不同地方存储数据+元数据更便携。只有当它是一个联网的数据库时,它的性能可能比在与网络服务器运行的相同本地磁盘上时慢。
    • 主要论点是,当图像存储在 FS 中时,我可以查看它们,而当它们存储在数据库中时,我需要一些应用程序进行查看。但谢谢你的另一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多