【问题标题】:Jasper Report in servelt generating a MalformedURLExceptionservlet 中的 Jasper 报告生成 MalformedURLException
【发布时间】:2014-09-21 14:45:46
【问题描述】:

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

谢谢

【问题讨论】:

    标签: java servlets jasper-reports


    【解决方案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);
    

    奥特

    如果使用ClassLoader,您的资源应位于类路径中(即WEB_INF\classesWEB-INF\lib 中的任何罐子中)

    【讨论】:

      【解决方案2】:

      你能试试关注吗..?

      指定完整路径如..

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

      【讨论】:

      • 这不起作用,但 Karthikeyan 提供的解决方案有效。还是谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多