我在从 Jetty 版本加载 Web 应用程序中的资源文件时遇到问题9.4.37.v20210219
。
我正在Thread.currentThread().getContextClassLoader()
获取类加载器实例,然后尝试使用classLoader.getResourceAsStream("resourceFileName")
. 这行代码从 jetty version 返回 null 9.4.37.v20210219
。
通过在码头版本中记录类加载器实例进行比较研究时9.4.37.v20210219
,9.4.36.v20210114
我看到以下差异
在码头 9.4.37.v20210219,我得到
startJarLoader@1c4af82c
但是使用码头 9.4.36.v20210114,我得到
WebAppClassLoader{984235065}@3aaa3c39
startJarLoader 是否指示码头服务器类路径?从 webapp 加载资源文件的标准方法是什么?
附加信息,我的 Web 应用程序已部署在其中,JETTY_BASE/webapps
并且我有要在其中加载的资源文件。这个 webapp 有一个依赖 jar,它部署在JETTY_BASE/lib/ext
. Thread.currentThread().getContextClassLoader()
在 webapp 内部的方法中使用,该方法从其依赖项 jar 中调用。换句话说,被调用的线程属于 webapp 的依赖 jar,它位于服务器类路径/父类加载器中。这就是我猜的原因,但我想知道为什么从码头9.4.37.v20210219
和更高版本中可以看到这种差异。
顺便说一句,做MyClass.class.getClassLoader()
退货WebAppClassLoader{984235065}@3aaa3c39
,我可以使用相同的方式将资源作为流获取,classLoader.getResourceAsStream("resourceFileName")
但我想知道为什么行为与 jetty version 有所不同9.4.37.v20210219
。
感谢任何帮助!提前致谢!