【问题标题】:Traverse Deployed Folder from the Web Application从 Web 应用程序遍历已部署的文件夹
【发布时间】:2011-04-25 09:07:55
【问题描述】:

Web 应用程序是否可以访问自己部署的文件夹。我正在使用 JSF 1.2 框架,我需要访问部署目录中的一些文件。

JSF 是否有任何内置方法可以为我们提供已部署的文件夹和其中的文件?

【问题讨论】:

    标签: java file jsf jakarta-ee


    【解决方案1】:

    使用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 文件中。

    【讨论】:

      【解决方案2】:

      您可以访问类路径中的资源,但 servlet API 不保证它们的物理表示。换句话说,如果你部署一个 WAR 文件,容器可能会爆炸 WAR 文件或保持原样,或者根据自己的需要做一些完全不同的事情。

      在这个特定的上下文中,这意味着您通过假设 Web 应用程序部署到一个文件夹来引入一个微妙的容器依赖关系,您应该非常小心。

      但是,如果您只需要获取类路径中的一些项目,您应该看看这个问题:Getting the inputstream from a classpath resource (XML file)

      【讨论】:

        【解决方案3】:

        FacesContext.getCurrentInstance().getExternalContext().getResource("/").toString();

        您将使用File 类中的parent(); 方法获取WEB-INF/classes 目录遍历的路径以获取位置

        【讨论】:

        • 我正在使用与 eclipse 集成的 tomcat 服务器。我得到的部署文件夹路径是“jndi:/localhost/AppName/”。使用此路径我无法检索文件,因为 listFiles 属性为使用此路径创建的文件对象返回“null”!!
        • FacesContext.getCurrentInstance().getExternalContext().getResource("/").toString(); 回复了你jndi:/localhost/AppName/ 吗?
        • 是的。它返回“jndi:/localhost/AppName/”。我不确定是不是因为tomcat集成了eclipse!
        • 你也可以使用MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()得到这个
        猜你喜欢
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多