【问题标题】:Tomcat: correct way to find a resource? [duplicate]Tomcat:找到资源的正确方法? [复制]
【发布时间】:2011-06-27 19:22:41
【问题描述】:

我正在开发一个部署在 Tomcat 服务器上的大型应用程序。只有一个 .jsp 页面,所有 UI 都是使用 ext-js 完成的。

有很多 .java 类。在其中一个类(正在执行验证)中,我想添加 XML 验证,为此我需要访问 .xsd 文件。

我的问题是我不知道如何干净地找到我的 .xsd 文件的路径。

我会将 .xsd 文件放在 css/、images/ 等旁边的目录中。

我知道如何做到这一点很糟糕:我调用 System.getProperty("user.home") 并从那里找到我的 web 应用程序 xsd/文件夹和 .xsd 文件。

但是什么是“干净”的方法呢?

我应该在哪里找到我的 webapp(或我的 webapp 资源)的路径,我应该如何将此信息传递给执行验证的 .java 类? p>

【问题讨论】:

    标签: java tomcat resources path


    【解决方案1】:

    对于公共网络内容中的文件,ServletContext#getRealPath() 确实是要走的路。

    String relativeWebPath = "/path/to/file.xsd";
    String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
    File file = new File(absoluteDiskPath);
    // ...
    

    但是,我无法想象有任何意图将 XSD 文件提供给公众,而且需要 XSD 的 Java 类似乎也不是 servlet。所以,我建议将 XSD 文件放在类路径中,然后从那里抓取。假设它被放在包com.example.resources中,你可以从类路径中加载它,如下所示:

    String classpathLocation = "com/example/resources/file.xsd";
    URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation);
    // Or:
    InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation);
    

    【讨论】:

    • 非常感谢。在第二种情况下,将文件放在类路径上是一种好习惯吗? (我可能会有一个关于如何做到这一点的新问题)
    • 对于Java类的资源来说,这当然是一种正常的做法。类路径就在您的 Java 类所在的位置:) 创建一个包或重用现有包并将 XSD 文件放在那里。就是这样。
    【解决方案2】:

    getServletContext().getRealPath("/") 是您所需要的。

    here

    【讨论】:

    • 在 tomcat 中不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2021-09-19
    相关资源
    最近更新 更多