1. 设置响应标头:
1) 标头中的内容也是以键值对的形式出现,一行一个键值对,格式是"键:值列表",标头允许一个键可以有多个值;
2) 在这里罗列一下常用的HttpServletResponse里关于响应标头设置的方法;
3) setHeader和addHeader:
i. void setHeader(String name, String value); // 设置name键的值为value,如果不存在将添加,如果存在则覆盖该键的值
ii. void addHeader(String name, String value); // 给name键添加一个值value,允许多值添加,如果name键不存在则创建
4) 如果要添加或者设置的值是整数、日期等特定类型的值则HttpServletResponse也提供了相应类型的方法:
i. void setIntHeader(String name, int value); // 设置int型键值
ii. void addIntHeader(String name, int value); // 添加int型值
iii. void setDateHeader(String name, long date); // 设置Date型值
iv. void addDateHeader(String name, long date); // 添加Date型值
!!很可惜的是HttpServletResponse只多提供了这4个特殊类型值的标头设置方法,并没有包装其它类型值的标头设置方法,如double等;
5) 所有标头的设置都必须在响应确认(Commit)前进行,如果在响应确认后在设置则晚了,会被完全忽略,因为响应已经发送给客户端了;
!!那什么是响应确认呢?在接下来的响应缓冲区的介绍中会解释;
2. 设置响应缓冲区:
1) 响应缓冲区就相当于C语言使用printf等输出函数时使用的缓冲区,所有的printf都不会立马就输出到屏幕上,而是先进入缓冲区,等到要冲刷(flush)时再将缓冲区中的内容显示至屏幕;
2) 响应缓冲区就是PrintWriter的缓冲区,并不是调用了PrintWriter的各种输出函数后立马就会发送至客户端,而是先将这些内容暂存在响应缓冲区buffer中,一旦符合了某些条件就会将缓冲区中的内容发送至客户端(flush冲刷),具体是什么条件能触发冲刷动作后面会具体罗列;
3) HttpServletResponse操作响应缓冲区的常用方法罗列:
// 缓冲区大小的获取和设置
i. int getBufferSize(); // 返回当前缓冲区的大小,单位是字节,默认情况下是8192,即8KB大小
ii. void setBufferSize(int size); // 直接设定缓冲区的大小
!!setBufferSize必须要在getWriter和getOutputStream之前调用,只有这样才会使获得的输出流套用该设置,如果在获得输出刘之后再改动缓冲区大小会直接抛出IllegalStateException异常;
// 缓冲区内容的清除
iii. void reset(); // 将缓冲区内的所有内容都清除,包括标头、状态码和body(HTML输出语句等)全部都清除
iv. void resetBuffer(); // 只清除body,但保留标头和状态码
!!这两个函数必须要在响应提交给客户端(即Commit确认)之前调用,如果已经提交了(缓冲已经空了)再清除内容会直接抛出IllegalStateException;
// 所以确认是否Commit是关键,使用isCommitted来查看当前是否处于提交状态
v. boolean