我有生成我正在使用的 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/