我有一个servlet正在创建jfree图表。默认情况下,它以分块形式返回tranfer-encoding。但是我必须在响应头中设置Content-Length。
final JFreeChart chart = ChartController.createChart();
final int chartWidth = ChartUtils.calculateWidth(request);
final int chartHeight = ChartHelper.getQuickViewChartHeight();
final ServletOutputStream out = response.getOutputStream();
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, chart, chartWidth, chartHeight);
答案 0 :(得分:1)
如建议的here一样,设置内容长度标头 和使用分块传输编码也没有意义。无论哪种情况,如here所述,您都可以使用ChartUtilities.encode()
来确定编码图像数组的字节长度:
byte[] b = ChartUtilities.encode(chart.createBufferedImage(chartWidth, chartHeight));
int imageLength = b.length;
稍后,您可以write()
将编码后的图像添加到输出流:
out.write(b);