【问题标题】:Why a servlet couldn't get jasper report path ? [duplicate]为什么 servlet 无法获取 jasper 报告路径? [复制]
【发布时间】:2026-01-03 10:40:01
【问题描述】:

我是 Java 中 Web 应用程序开发的新手,我正在为此使用 net beans。

我创建了一个 Web 应用程序来在客户端打印碧玉报告。为此我使用了一个 servlet。在这里我得到了上述问题。我以不同的方式给出了文件路径。但最后我必须将文件路径与当前工作目录(分区)一起放置。但是我想给它加上src文件夹的路径。

我也给这个路径加上了项目名称。但我获得了以下异常。

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: Jasper\JasperReport\src\java\jasper\Report.jrxml (The system cannot find the path specified)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:222)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:193)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:184)
    at net.sf.jasperreports.engine.JasperCompileManager.compileToFile(JasperCompileManager.java:224)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:539)
    at jasper.Show.processRequest(Show.java:61)
    at jasper.Show.doGet(Show.java:113)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.FileNotFoundException: Jasper\JasperReport\src\java\jasper\Report.jrxml (The system cannot find the path specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:217)
    ... 28 more
Jasper\JasperReport\src\java\jasper\Report.jrxml
  1. 列表项

【问题讨论】:

    标签: java servlets jasper-reports filenotfoundexception


    【解决方案1】:

    如果您粘贴代码片段,会更容易为您提供帮助。不过我还是会试试的。

    方法JasperCompileManager.compileReportToFile 将jrxml 文件的路径作为参数,可以是绝对路径,也可以是相对于工作目录的路径。而且我认为在这种情况下你不应该使用这种方法。

    在你的情况下,我认为使用这样的东西会更好:

    InputStream jrxmlFileStream = getClass.getResourceAsStream("/path/to/file.jrxml");
    // this path should be relative to src folder
    JasperCompileManager.compileReportToStream(jrxmlFileStream, reportFileOutputStream);
    // reportFileOutputStream - an OutputStream that writes to destination file
    

    (我在这里省略了任何异常处理或资源关闭)

    【讨论】:

    • :- String jsaperFile="C:\\Users\\user\\Desktop\\Terance\\Jasper\\JasperReport\\src\\java\\jasper\\Report.jrxml";这是 jasper 报告,字符串 report=JasperCompileManager.compileReportToFile(jsaperFile);
    • @Barrier 您应该将上述评论添加到您的实际问题本身。
    最近更新 更多