java - 从 tomcat 访问 jar 文件

标签 java jsp tomcat jar classpath

他在那里,

卡了好久了。我想做的事情归结为:

  • 我开发了一个小库,我正在以 jar 文件的形式部署它。它包含一个我需要访问的文件,它位于“json2/json.js”(是的,做 jscript/rhino 事情)
  • 我将 jar 文件导入到经典的 java 项目中,它工作正常。找到并读取文件
  • 我将 SAME jar 文件导入 tomcat 项目,如下所示:
  • 调用 java 类的 .jsp
  • 在 java 类中我调用我的库,它位于 tomcat/lib 目录中
  • 现在当我尝试访问我不能访问的文件时(空指针)

来源:

        InputStream in = ClassLoader.getSystemResourceAsStream("json2/json.js");

当我在 tomcat 中运行它时,(in==null)。

为了诊断,我即兴创作了以下内容:

        File fu = new File(new URI(this.getClass().getClassLoader().getResource("").toString()));
        String[] l = fu.list();
        for (int i = 0; i < l.length; i++) {
            System.out.println(i+"||"+l[i]);
        }

对于经典的 java 类,它只生成我的主类文件。在 tomcat 中,它显示了“tomcat/lib”目录的内容。

有什么想法吗?将不胜感激...


编辑

我忘记添加的一个细节(这真的让我很吃力):

SParser.class.getClassLoader().getParent().getResource("")

提出一个 null-ptr。卧槽?我没有访问特定的资源,仍然没有结果。

最佳答案

不要使用 getSystemResourceAsStream()。使用 getResourceAsStream()。在 Tomcat webapp 环境中,系统类加载器不知道 Tomcat/lib 或 webapp 库。

另外,在抓取ClassLoader时,最好抓取当前线程的上下文类加载器。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("/json/json.js");

关于java - 从 tomcat 访问 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487081/

相关文章:

java - 如何检查字符串是否具有特定模式

java - 如何在java中将类的对象转换为十六进制数组

java - 错误: No tag "iterator" defined in tag library imported with prefix "logic"

java - 检查 Textarea 字段是否为空。如果是这样,请不要发表评论

java - Tomcat 7 启动问题 : Could not initialize class org. apache.tomcat.util.descriptor.DigesterFactory

java - 如何修复 java.lang.OutOfMemoryError : Java heap space error?

下载过程的 Java Swing 进度条

java - 如何让线程等待 JFrame 在 Java 中关闭?

javascript变量到jsp表达式

performance - Grails 性能 : XML processing 4x slower in tomcat than run-app?