0

我正在使用 pentaho classic 生成一个 html 报告。我们在部署应用程序的节点之前有一个负载均衡器。

代码如下:

if(reportType.equals("HTML")) {
                                        response.setContentType("text/html");
                response.setHeader("content-type","text/html"); 
                    (report,response.getOutputStream());



                final StreamRepository targetRepository = new StreamRepository(response.getOutputStream());
                  final ContentLocation targetRoot = targetRepository.getRoot();
                  final HtmlOutputProcessor outputProcessor = new StreamHtmlOutputProcessor(report.getConfiguration());
                  final HtmlPrinter printer = new AllItemsHtmlPrinter(report.getResourceManager());
                  printer.setContentWriter(targetRoot, new DefaultNameGenerator(targetRoot, "index", "html"));
                  printer.setDataWriter(null, null);
                  printer.setUrlRewriter(new FileSystemURLRewriter());
                  outputProcessor.setPrinter(printer);
                  AbstractReportProcessor reportProcessor = new StreamReportProcessor(report, outputProcessor);
                  // Generate the report
                  reportProcessor.processReport();
                  reportProcessor.close();
                log.info("html");
                return "html";
            } 

报告已正确生成。但是,在报告末尾出现以下二进制代码。

PK�l�BO�j))mimetypeapplication/vnd.pentaho.reporting.classicPK�l�BMETA-INF/manifest.xml͗�n�@���wq��bj��/�>��mK�@� �ԿniM�v�[�}S/�s�s1.ׇ^f{�(�jII�H��N�mK�^_�g�^-�=Sb��E�)<����[ ......

非常感谢。

大卫。

4

1 回答 1

0

二进制文件是实际的 PRPT 文件。您发布的任何代码都无法附加该文件 - 因此它必须是添加该内容的其他代码。鉴于此代码片段不是完整的 servlet,一切皆有可能。

执行经典的调试例程:在没有负载平衡器的情况下运行 servlet。如果垃圾消失,请修复平衡器配置。

其次,检查哪些过滤器对您的请求有效。过滤器可以对响应进行预处理和后处理,因此可以添加您的 servlet 可能不知道的附加内容。

于 2013-07-16T08:10:15.947 回答