0

我有生成碧玉报告的类,我正在使用

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

我将这个类打包在一个 jar 中并放入我在 tomcat @(WEB-INF/lib) 上的应用程序中。

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

如何从 Jar 访问这些文件?

4

2 回答 2

0

您可以使用访问 Web 应用程序中的资源

ServletContext.getResourceAsStream(RESOURCE_HOME + "/srPaySlipSalaryComp.jasper");

上面的代码将从以下位置查看:

  • 网络应用程序文件夹
  • /META-INF/resources存在的每个库中WEB-INF/lib

如果您想使用您拥有的代码

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

该文件应位于以下两个位置:

  • WEB-INF/classes
  • 在任何图书馆WEB-INF/lib
于 2012-07-13T10:49:47.037 回答
0

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

因此,一种解决方案(可能是最好的解决方案)是也将 jasper 文件放在 jar 文件中WEB-INF/libWEB-INF/classes.

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

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

于 2012-07-13T10:55:29.067 回答