是否可以从JSF应用程序中找到部署路径?
还有一个问题(如果前一个问题的答案是真的):在那里存储一些上传的文件是否合法?
答案 0 :(得分:11)
是否可以从JSF应用程序中找到部署路径?
不直接,您需要抓取ServletContext
中的ExternalContext
,如下所示:
ServletContext servletContext = (ServletContext) externalContext.getContext();
它反过来提供了众所周知的dubious getRealPath()
方法。
String webContentRoot = servletContext.getRealPath("/");
如果您已使用JSF 2.0,则可以改为使用ExternalContext#getRealPath()
。
还有一个问题(如果前一个问题的答案是真的):在那里存储一些上传的文件是否合法?
你可以这样做。您只需要考虑到重新部署应用程序时它们都会丢失,原因很简单,原因就是这些文件不包含在原始WAR中。
如果您希望拥有更多永久存储空间,请考虑将其存储在网络应用程序之外的固定路径中,例如: /var/webapp/upload
左右。另一种方法是将它们存储在数据库中,这样可以提高可移植性,但是请记住在文件内容中存储一些元数据(名称,内容类型,最后修改的时间戳等),以便您可以索引/搜索/缓存上。