如何在JSF应用程序中获取部署目录路径?

Rom*_*man 4 java deployment jsf file-upload

是否有可能从JSF应用程序中找到部署路径?

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

Bal*_*usC 11

是否有可能从JSF应用程序中找到部署路径?

不是直接的,你需要抓住ServletContextExternalContext如下:

ServletContext servletContext = (ServletContext) externalContext.getContext();
Run Code Online (Sandbox Code Playgroud)

它反过来提供了众所周知和可疑的 getRealPath()方法.

String webContentRoot = servletContext.getRealPath("/");
Run Code Online (Sandbox Code Playgroud)

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


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

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

如果您希望拥有更多永久存储空间,请考虑将其存储在Web应用程序之外的固定路径中,例如/var/webapp/upload左右.另一种方法是将它们存储在数据库中,这样可以提高可移植性,但是请记住在文件内容中存储一些元数据(名称,内容类型,最后修改的时间戳等),以便您有索引/搜索/缓存的内容上.