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

时间:2012-07-13 10:44:49

标签: 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访问这些文件?

2 个答案:

答案 0 :(得分: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
  • 的任何库中

答案 1 :(得分:0)

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

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

如果您确实想将jasper文件放在webapp中,则需要使用ServletContext.getResource()加载资源。

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