我正在编写一个应该生成jasper报告的java servlet。我已将jrxml存储在名为jrxml(WebContent / jrxml / theFile.jrxml)的文件夹中的WebContent文件夹下。首先,我使用以下代码生成报告:
InputStream input = new FileInputStream(new File("/jrxml/employeesList.jrxml"));
JasperDesign jasperDesign = JRXmlLoader.load(input);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
然而,我一直得到一个"没有这样的文件或目录"错误信息。然后我使用了以下从Accessing properties file in a JSF application programmatically获取的代码:
String path = "/jrxml/employeesList.jrxml";
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream input = loader.getResourceAsStream(path);
JasperDesign jasperDesign = JRXmlLoader.load(input);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
现在我不再获得"没有这样的文件或目录"错误消息,但我得到" net.sf.jasperreports.engine.JRException:java.net.MalformedURLException"异常,并且根据堆栈跟踪它是由第四个命令(JRXmlLoader.load(输入))引起的。有人可以告诉我我做错了什么吗?
由于
答案 0 :(得分:1)
如果要在WebContent文件夹中加载文件,则必须使用ServletContext.html#getRealPath来获取文件系统中文件的实际路径,因此您可以尝试以下操作。
String path = getServletContext().getRealPath("/jrxml/employeesList.jrxml");
InputStream input = new FileInputStream(new File(path));
JasperDesign jasperDesign = JRXmlLoader.load(input);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
OTOH
如果使用ClassLoader
,您的资源应位于类路径中(即WEB_INF\classes
或WEB-INF\lib
中的任何广告)
答案 1 :(得分:-2)
请你试试......?
指定完整路径,例如..
InputStream input = new FileInputStream(new File("F:/jrxml/employeesList.jrxml"));