java调用jasper,java – 使用JasperReports与相对路径

在Java网络应用中,原本通过绝对路径加载并展示JRXML报告的方法需要改为使用相对路径。尝试将JRXML文件的路径设置为request.getContextPath() + "/jrxmlFiles/",但在编译或填充报告时遇到`java.io.FileNotFoundException`异常。已查阅相关资料,但未能找到解决方案。问题在于如何调整代码以正确处理JasperDesign的相对路径加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个网络应用程序,客户端请求查看一些报告.该方法一直是使用iReport并在屏幕上显示报告.

I have already asked something like this.但是今天我发现报告文件(jrxml)的路径是绝对的.所以我必须更改程序,以便它接受相对路径.我一直在尝试这样做,但似乎jrxml或编译(.jasper)文件都不接受相对路径,无法编译或填写报告.

这是我已经得到的:

//path is generated as request.getContextPath() + "/jrxmlFiles/"

public void generateReport(HttpServletResponse res, ConexionAdmin con, String path) throws Exception{

ServletOutputStream out = null;

ByteArrayOutputStream bos = new ByteArrayOutputStream();

JasperDesign jasperDesign = JRXmlLoader.load(path);

JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, pars, con.initConexion());

res.setContentType("application/pdf");

res.setContentLength(bytes.length);

out = res.getOutputStream();

out.write(bytes, 0, bytes.length);

res.setHeader("Cache-Control", "cache");

res.setHeader("Content-Disposition", "attachment; filename=report.pdf");

res.setHeader("Pragma", "cache");

res.setContentLength(bos.size());

out.write(bos.toByteArray());

out.flush();

bos.close();

out.close();

res.flushBuffer();

}

这似乎与绝对路径一起工作,但是抛出:

Exception Message

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException

当更改为相对路径时.我已经搜查网,没有成功,如何改变我的适合.

我有javaDoc的jasper API,但我不是读它通过,如果我可以帮助它.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值