servlet中的Jasper Report生成MalformedURLException

时间:2014-09-21 14:45:46

标签: java servlets jasper-reports

我正在编写一个应该生成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(输入))引起的。有人可以告诉我我做错了什么吗?

由于

2 个答案:

答案 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\classesWEB-INF\lib中的任何广告)

答案 1 :(得分:-2)

请你试试......?

指定完整路径,例如..

InputStream input = new FileInputStream(new File("F:/jrxml/employeesList.jrxml"));