【问题标题】:Java: Universally accessing resource files regardless of application serverJava:无论应用程序服务器如何,都可以通用访问资源文件
【发布时间】:2015-11-19 15:34:25
【问题描述】:

我正在寻找访问资源文件(例如一堆 .xml 文件)以及它们所在的文件夹结构的“最佳实践”方式,而不管使用的是什么应用程序服务器。

现在我正在使用 Wildfly 8 服务器,我通过获取应用程序的真实路径来访问所有 src/main/resources/xxxx,然后使用 Paths.get(resourcePath) 以及 Files.walk(Paths.get(folderPath)) 如果我想访问文件夹的文件。

但是,当我尝试部署到 Weblogic 12c 时遇到了一个问题,因为此应用服务器实际上获取了 WEB-INF/classes 下的所有内容并创建了一个 .jar 文件并将其添加到 WEB-INF/lib。我仍然可以使用classLoader.getResource(resourcePath) 访问单一资源,但由于某种原因,当我尝试创建new File(Paths.get(resourcePath) 或使用Files.walk(Paths.get(folderPath)) 时,它似乎不起作用。它抛出一个异常,说文件不存在,我猜是因为它被打包在一个 jar 文件中,因此无法访问。

我可能会使用classLoader.getResource(resourcePath) 访问我的所有资源,但不幸的是,在我的情况下,我不知道在编译时哪些资源可用。我特别需要能够浏览选定文件夹的文件和子文件夹,但我还没有找到在两个应用服务器或所有应用服务器上执行此操作的通用方法。

如果解决方案使用新的 File api 而不是创建一堆 FileReader,则可以加分,但我也可以。

【问题讨论】:

    标签: java weblogic wildfly


    【解决方案1】:

    您可以将 XML 文件放在文件夹 /WEB-INF/xml 中,然后使用 ServletContext 获取该位置的 FilePath

    变体 1:

    调用servletContext.getResourceUrl("/WEB-INF/xml") 以获取URL 并将此URL 转换为FilePath。但取决于服务器,这可能会返回一个非文件资源 URL,例如jndi:/ 网址。

    变体 2:

    调用servletContext.getRealPath("/WEB-INF/xml") 获取文件字符串并将此URL 转换为FilePath

    【讨论】:

    • 这将是一个解决方案,是的,但我不愿意接受没有办法从资源文件夹中访问资源文件夹树。
    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2011-05-15
    相关资源
    最近更新 更多