[Servlet]HttpServletResponse设置响应标头、缓冲区、语系编码、MIME

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值