Java培训之HttpServletResponse的输出问题

1 response的输出流

response对象有getWriter()和getOutputStream()两个方法,它们都是用来向客户端响应用的流对象,不过一个是字符流,另一个是字节流。

  • PrintWriter getWriter():获取响应字符流,用来向客户端响应二进制数据,例如图片;
  • ServletOutputStream getOutputStream():获取响应字节流,用来向客户端响应文本数据,例如HTML代码。

这两者之前只能使用其中一个,也就是说,要么使用字符流,要么使用字节流,不能两者兼得。如果在获取其中一个流对象后,再去获取另一个流,那么就会出现异常。

Java培训之HttpServletResponse的输出问题
2 刷新输出流

response内部的输出流有8KB的缓冲区,如果缓冲区满了的话,那么response会自动去提交,即把缓冲区内容输出给客户端。这时调用response的isCommited()方法返回的就是true,表示response已经提交过至少一次了。
也可以在缓冲区没有装满时调用response.flushBuffer()方法刷新输出流,把缓冲区中的数据发送到客户端去。同样,这也会导致response的isCommited()方法返回的就是true,表示response已经提交过至少一次了。
其实也可以调用response.getWirter().flush()方法达到与调用response.flushBuffer()相同的效果。这两种方式基本相同!
一旦response的isCommited()方法返回true,这说明服务器已经至少把状态码、响应头等数据发送给客户端了,也就是说已经开始向客户响应了。

Java培训之HttpServletResponse的输出问题
但是,这里你要注意一下,不是说服务器向客户端发送了数据,就表示数据一定会显示在浏览器上。因为客户端的浏览器也许会有自己的缓存,在浏览器的缓存没有满之前,浏览器是不会去显示的。例如IE8和Google浏览器就是这样,但FireFox会马上显示数据!
测试得到IE8的缓存为16KB,只要响应数据大于16KB就会在IE8上显示出来。、
Java培训之HttpServletResponse的输出问题
Android培训

Android培训学院

http://www.itcast.cn/Android

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/253145.html

(0)
上一篇 2022年5月7日 04:37
下一篇 2022年5月7日 04:41

相关推荐

发表回复

登录后才能评论