【发布时间】:2011-04-25 09:07:55
【问题描述】:
Web 应用程序是否可以访问自己部署的文件夹。我正在使用 JSF 1.2 框架,我需要访问部署目录中的一些文件。
JSF 是否有任何内置方法可以为我们提供已部署的文件夹和其中的文件?
【问题讨论】:
标签: java file jsf jakarta-ee
Web 应用程序是否可以访问自己部署的文件夹。我正在使用 JSF 1.2 框架,我需要访问部署目录中的一些文件。
JSF 是否有任何内置方法可以为我们提供已部署的文件夹和其中的文件?
【问题讨论】:
标签: java file jsf jakarta-ee
使用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 文件中。
【讨论】:
您可以访问类路径中的资源,但 servlet API 不保证它们的物理表示。换句话说,如果你部署一个 WAR 文件,容器可能会爆炸 WAR 文件或保持原样,或者根据自己的需要做一些完全不同的事情。
在这个特定的上下文中,这意味着您通过假设 Web 应用程序部署到一个文件夹来引入一个微妙的容器依赖关系,您应该非常小心。
但是,如果您只需要获取类路径中的一些项目,您应该看看这个问题:Getting the inputstream from a classpath resource (XML file)
【讨论】:
FacesContext.getCurrentInstance().getExternalContext().getResource("/").toString();
您将使用File 类中的parent(); 方法获取WEB-INF/classes 目录遍历的路径以获取位置
【讨论】:
FacesContext.getCurrentInstance().getExternalContext().getResource("/").toString(); 回复了你jndi:/localhost/AppName/ 吗?
MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()得到这个