我有生成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访问这些文件?
答案 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/lib
或WEB-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。