请帮助: .jrxml每次生成报告时都在编译。我想只编译一次。请帮助我,我需要添加什么条件。我没有使用输入/输出流。使用compileReport可以做什么只编译一次。
答案 0 :(得分:3)
不要在任何可通过Web访问的地方提供JRXML文件。 JRXML文件包含易于读取的SQL语句,它们提供了:
恶意用户可以将此信息用于恶意目的。我倾向于将SQL语句移动到数据库视图或存储过程中,这会隐藏很多信息。
您的报告创建过程应如下所示:
.jasper
个文件。.jasper
文件存储在存储库和Web服务器上。简而言之,编译报告是您应该在应用程序环境之外执行的过程。这是开发人员应该采取的步骤。开发人员将已编译的报告检入存储库,测试/构建环境可以获取最新的副本。
除非您有绝对要求即时编译报告。请注意,除非您要创建动态报告,否则即时编译报告并不合理。在这种情况下,您需要使用类似DynamicJasper的内容。
所有这一切,你的问题的答案是:
Sample_Report.jasper
。Sample_Report.jasper
资源不存在,则按照您的显示进行编译。这可能类似于:
JasperReport jasReport = null;
try {
jasReport = (JasperReport)JRLoader.loadObject(
getResourceAsStream("Sample_Report.jasper")
);
}
catch( Exception e ) {
jasperReport = JasperCompileManager.compileReport(
getResourceAsStream("Sample_Report.jrxml")
);
}
如果事实上存在于这些位置,则必须确保正确的目录和文件可以加载。您还必须在编译后保存已编译的报告,以便下一次迭代将获取.jasper
文件。
要保存已编译的.jasper
文件,您可以使用以下API:
JasperCompileManager.compileReportToStrem(input, output);
另见: