java - 从 WEB-INF/lib 中的 Jar 中的类访问 tomcat web-app 中的文件

标签 java tomcat

我有生成我正在使用的 jasper-reports 的类

private String RESOURCE_HOME = "/reports/jasper";
getClass().getResource(RESOURCE_HOME + "/srPaySlipSalaryComp.jasper").getFile();

我把这个类打包在一个 jar 中,然后放到我在 tomcat @(WEB-INF/lib) 上的应用程序中。

现在在我的服务器上,我在 [tomcat]/webapp/[myapp]/reports/jasper 中有 jaspers

如何从 Jar 访问这些文件?

最佳答案

getClass().getResource() 使用类加载器加载资源。所以它能加载的资源是类路径下可以访问到的资源。所以它只能从 WEB-INF/lib 中的 jar 加载,或者从 WEB-INF/classes 中加载,或者从 tomcat 的类路径中的 jar 加载。

因此,一种解决方案(可能是最好的解决方案)是将 jasper 文件也放入 WEB-INF/lib 中的 jar 文件中,或者放在 WEB-INF/classes 下的目录中

如果你真的想把 jasper 文件放在 webapp 中,那么你需要使用 ServletContext.getResource() 加载资源。 .

在这两种解决方案中,您将获得的不是指向文件的 URL,而是指向 jar 或 war 中资源的 URL。所以你不应该调用 getFile()。将 URL 或 getResourceAsStream() 返回的 InputStream 传递给 Jasper API。

关于java - 从 WEB-INF/lib 中的 Jar 中的类访问 tomcat web-app 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11468940/

相关文章:

java - 我什么时候需要使用Authenticator通过Javamail读取和发送电子邮件?

java - 如何删除 GUI 中的选择框?

Tomcat urlrewritefilter - 从目录路径到根路径?

java - Apache Avro ThreadLocal 对象在 Tomcat 未部署时徘徊

Tomcat 7 在调用静态页面时给出 HTTP 405

java - Spring Boot 找不到/WEB-INF/classes/index.jsp

java - 如何单击 span 标签内的元素? - Selenium

java - 如何在 IE 11 中使用 Selenium webdriver 单击安全警告窗口?

java - 如何在静态方法中获取Activity()?

tomcat - 如何使用 Jenkins 从 Windows 机器在 Unix 机器上重启 Tomcat?