当setContentLength
方法用于设置响应的长度,其大小高于实际大小时,为什么容器不会自动计算长度?
例如,
String s = "hello";
byte[] b = s.getBytes();
response.setContentLength(100);
response.getOutputStream().write(b);
response.flush();
当我点击servlet时,加载页面大约需要半分钟,这是因为内容长度标题..?
这种方法有什么需要?为什么不能让容器自己计算响应的长度?
答案 0 :(得分:2)
如果要返回大量内容,加载完整响应并立即发送它通常是不切实际的,而是加载并以块的形式发送。由于长度是作为响应开始的一部分发送的,因此容器无法在以后更改它。
在这种情况下,你告诉容器你的响应是100字节,你发送前5个字节(触发标题" Content-Length:100"也发送),所以现在收件人预计还会有95个字节。
另一方面,现在,假设您的内容为10GB,您不希望先将所有内容加载到内存中,以便容器计算大小。