Web应用程序是否可以访问其自己的已部署文件夹。我正在使用JSF 1.2框架,我需要访问部署目录中的一些文件。
JSF是否有任何内置方法可以为我们提供已部署的文件夹及其中的文件?
答案 0 :(得分:2)
使用ExternalContext.getResourcePaths("/")
。在servlet容器中,这将委托给ServletContext.getResoucePaths(String)
。正如文档所述:
例如,对于Web应用程序 含有:
/welcome.html /catalog/index.html /catalog/products.html /catalog/offers/books.html /catalog/offers/music.html /customer/login.jsp /WEB-INF/web.xml /WEB-INF/classes/com.acme.OrderServlet.class /WEB-INF/lib/catalog.jar!/META-INF/resources/catalog/moreOffers/books.html
getResourcePaths("/")
会回来{"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"}
,和getResourcePaths("/catalog/")
会 返回{"/catalog/index.html", "/catalog/products.html", "/catalog/offers/", "/catalog/moreOffers/"}
。
对于可移植代码,不假设您可以通过文件系统访问资源:
此方法(
getResource(String)
)允许servlet容器从任何源为servlet提供资源。资源可以位于本地或远程文件系统,数据库或.war文件中。
答案 1 :(得分:1)
您可以访问类路径中的资源,但servlet API不保证其物理表示。换句话说,如果部署WAR文件,容器可能会爆炸WAR文件或保持原样,或根据需要做一些完全不同的事情。
在这个特定的上下文中,它意味着您通过假设将Web应用程序部署到文件夹来引入一个微妙的容器依赖关系,您应该非常小心。
但是,如果你只需要获得类路径中的一些项目,那么你应该看一下这个问题:Getting the inputstream from a classpath resource (XML file)
答案 2 :(得分:0)
FacesContext.getCurrentInstance().getExternalContext().getResource("/").toString();
您将使用WEB-INF/classes
课程中的parent();
方法获取File
dir遍历的路径以获取位置