设置响应头
设置响应头可以使用HttpServletResponse对象上的setHeader()、addHeader()。setHeader()用于设置响应头名称与值,addHeader()是在同一个响应头名称上附加值。
如果响应头的值是整数,使用setIntHeader()、addIntHeader()方法。
如果响应头的值是日期,则可以使用setDateHeader()、addDateHeader()方法。
所有的标头设置,必须在响应确认之前,在响应确认之后设置的标头,会被容器忽略。
缓冲区
容器可以但非必要对响应进行缓冲,通常容器默认都会对响应进行缓冲。
关于缓冲区的API
HttpServletResponse有关缓冲的方法有:
1、getBufferSize()
2、setBufferSize()
setBufferSize()必须在调用HttpServletResponse的getWriter()或getOutputStream()方法之前调用,这样,所取得的Writer或ServletOutputStream才会套用这个设置。
在调用HttpServletResponse的getWriter()或getOutputStream()方法之后调用setBufferSize(),会抛出IllegalStateException。
3、isCommitted()
在缓冲区未满之前,设置的响应相关内容都不会真正传至客户端,可以使用isCommitted()看看是否响应已确认。
4、reset()
如果想要重置所有响应信息,可以调用reset()方法,这会连同已设置的标头一并清除。
5、resetBuffer()
调用resetBuffer()会重置响应内容,但不会清除已设置的标头内容。
6、flushBuffer()
flushBuffer()会清除(flush)所有缓冲区中已设置的响应信息至客户端。
reset()、resetBuffer()必须在响应未确认前调用,如果在响应已确认后调用reset()、resetBuffer()会抛出IllegalStateException。
缓冲区刷新
HttpServletResponse对象若被容器关闭,则必须清除刷新所有的响应内容。
响应对象被关闭的时机点有以下几种:
1、Servlet的service()方法已结束
2、响应的内容长度超过HttpServletResponse的setContentLength()所设置的长度。
3、调用了sendRedirect()方法
4、调用了sendError()方法
5、调用了AsyncContext的complete()方法