代码之家  ›  专栏  ›  技术社区  ›  morgancodes

javaweb应用程序中的所有资源都应该被唯一地命名吗?

  •  2
  • morgancodes  · 技术社区  · 15 年前

    试图了解爪哇岛的资源。我相信以下是正确的:

    • 最好总是通过类路径加载资源,而不是通过文件系统,即使在单元测试中也是如此。

    因此,资源必须始终具有唯一的文件名,否则会发生冲突。

    我的假设或结论有缺陷吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Stephen C    15 年前

    假设1)通过类路径加载的资源没有名称空间,它们只有一个文件名。

    Class.getResourceAsStream(String pathname) ,不以“/”开头的路径名将被解释为相对于classes包的路径名。

    类路径机制的工作原理是将每个JAR文件的名称空间等覆盖在类路径上。因此,您可以在不同的jar中使用相同的路径名拥有多个资源,但实际上只有一个资源是可见的(稍后将其描述为“冲突”。)但是从可见路径名集的角度来看,每个路径名都唯一地标识一个资源。

    如果我们谈论的是资源 ,则从类路径加载具有一定的优势。但是,如果我们讨论的是由应用程序创建和管理的资源,那么通过类路径加载就有问题了。。。因为你不能 类路径的资源。

    而且,即使澄清了你所说的“资源”是什么意思,我也不认为这样说是正确的 最明智的做法是通过类路径加载资源。我们不可能预料到 全部的 最聪明的 方法是以其他方式加载资源(但是,如果你说“一般”或“通常”而不是“总是”,我会同意这个假设。)

    结论3)因此,资源必须始终具有唯一的文件名,否则会发生冲突。

    如果来自类路径上不同jar的资源具有非唯一的路径名,那么您会遇到某种冲突,其中一个或其他资源将无法加载(至少,不能通过普通的类加载器api加载)。但是这个 可以

    我的假设或结论有缺陷吗?

    • 假设1)从表面上看是错误的,但可以用一种使其成为真实的方式重新解释它。

    • 假设2)也是错误的,但是可以用一种使其成为真实的方式来重新解释:即放松“总是”,定义你所说的“资源”是什么意思。然而,这个假设在逻辑上并不是结论所必需的。

        2
  •  0
  •   Peter Tillemans    15 年前

    我个人认为加载资源对于单元测试特别有用,因为通过使用类路径,我可以确保通过测试版本隐藏生产资源。