2010-08-09 66 views

回答

11

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

不是直接的,你需要从ExternalContextServletContext如下:

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

这反过来提供知名和dubiousgetRealPath()方法。

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

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


一个问题(如果前一个问题的回答是真实的):这是合法存放一些上传的文件吗?

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

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

+0

实际上我需要在某处存储上传的图像。正如我发现的,将图像位置存储在数据库中并将图像本身存储在文件系统中是一种很好的做法。我想提供2个选项:根据您的建议(已实施)和部署路径下的应用程序之外的某处。但我不知道他们在重新部署后会被清除,所以我可能会放弃这个想法。谢谢! – Roman 2010-08-09 15:59:23

+0

是的,你也可以这样做。使用SQL进行搜索更容易。虽然纯粹主义者会说“不”将二进制数据存储在数据库中,但它实际上并不会造成伤害。这只是......没用。您无法在二进制数据中进行索引/搜索。但它绝对比在不同地方存储数据+元数据更具可移植性。只有当它是一个网络数据库时,它可能会比在网络服务器运行的同一本地磁盘上的性能要慢。 – BalusC 2010-08-09 16:02:06

+0

主要论点是,当存储在FS中的图像可以查看它们以及它们存储在数据库中时,我需要一些应用程序进行审阅。但是,谢谢你的另一点。 – Roman 2010-08-09 16:07:08

相关问题