位置: IT常识 - 正文

Servlet4.0 Response

编辑:rootadmin
Servlet4.0 Response对象Response对象封装Server返回Client的所有信息。在HTTP协议中,Server传达给Client信息转换到HTTP Header或者HTTP BODY中。5.1 Buffering缓冲区Serverlet Container可以但不强制缓冲发 ...

推荐整理分享Servlet4.0 Response,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Servlet4.0 Response对象

Response对象封装Server返回Client的所有信息。在HTTP协议中,Server传达给Client信息转换到HTTP Header或者HTTP BODY中。

5.1 Buffering缓冲区

Serverlet Container可以但不强制缓冲发送给客户端的内容。默认得,Servlet Container会开放接口设置缓冲区。如ServletResponse对象的方法可以设置缓冲区:

getBufferSizesetBufferSizeisCommittedresetresetBufferflushBuffer

当Servlet Container使用ServletOutputStream或者Write时,可以使用这些方法配置缓冲区。

getBufferSize返回缓冲区大小,若没有缓冲区,则返回0。

setBufferSize servlet可以使用该方法设置缓冲区大小。

申请的大小可以不是servlet请求的大小,但是至少要是请求的大小。这样,容器才能重使用该缓冲区,也能够提供足够的缓冲区。该方法需要在Servlet Container使用ServletOutputStream或者是Writer输出响应之前调用。

isCommitted方法表示内容是否已经响应给客户端。

flushBuffer方法强制将缓冲区数据输出至客户端。

reset方法强制清空缓冲区的数据若内容未提交至客户端。

resetBuffer方法强制清空缓冲区的数据但不包括请求头和响应码若内容未提交至客户端。

若内容已经输出至客户端,调用reset方法或resetBuffer方法都会抛出异常。但是不会改变缓冲区内容。

若缓冲区已经满需要立即输出响应内容给客户端。

5.2 HTTP响应头

Servlet可以通过ServletResponse接口的方法设置HTTP响应头。方法如下:

setHeaderaddHeader

setHeader使用指定的名称替换已经存在的值,若header的值是集合,则集合的值被清空,使用新值替换。

Servlet4.0 Response

addHeader添加指定名称的值到集合,该名称未存在,则会创建新集合。

若header的值是int类型或Date类型,则ServletResponse接口提供下述方法:

setIntHeadersetDateHeaderaddIntHeadersetIntHeader

HTTP响应头需要比响应体输出至客户端,若响应体已经输出再输出响应头,Servlet Container会忽略响应头。

对于Servlet生成的内容Servlet 编程者有义务设置Content-Type。HTTP/1.1不要求必须设置Content-Type请求头。

推荐Servlet Container 使用X-Powerd-By请求头发布自身的实现。

这个请求头的值起码是一个以上。如"Servlet/4.0"。

5.3 HTTP Trailer 预告

HTTP Trailer是发送在响应体之后的响应头集合。适用于chunked编码发送的场景或者是其他额外的协议。

如果HTTP Trailer 请求头已经就绪则调用isTrailerFieldsReady()方法会返回true。

servlet可以通过HttpServletRequest接口的getTrailerFields()方法读取 Trailer 请求头。

servlet可以输出HTTP Trailer头通过提供Supplier给HttpServletResponse接口提供的setTrailerFields()方法。也可以通过提供的Supplier使用HttpServletResponse接口的getTrailerFields()方法获取HTTP Trailer请求头。

5.4 非阻塞IO

非阻塞IO只能在异步处理请求中使用。否则ServletInputStream.setReadListener和ServletOutputStream.setWriteListener调用时,需要抛出IllegalStateException异常。

为了支持在Web 容器支持非阻塞写,引入如下改变:

WriteListener提供下述回调方法:

void onWritePossible() 当WriteListener注册到ServletOutputStream

后,当ServletOutputStream能写时会第一次调用WriteListener.onWritePossible()方法。

只有当ServletOutputStream.isReady()方法返回true才会调用WriteListener.onWritePossible()方法。

onError(Throwable t)处理响应失败时会调用该方法。

伴随着WriteListener还有ServletOutputStream的其他方法帮助WebApplication判断是否准备好写内容至客户端。

boolean isReady()如果写ServletOutputStream成功则会返回true。如果这个方法返回true,则ServletOutputStream写操作可以继续完成。若没有后续内容需要写,则该方法返回false。void setWriteListener(WriteListener listener) 关联WriteListener和ServletOutputStream。当可以写入数据时容器会调用WriteListener的方法。

注册的WriteListener会开始非阻塞IO,此时禁止转为阻塞IO。Servlet Container需要保证WriteListener的线程安全

5.5 Response对象的生命周期

每个Response对象都只能在service或者doFilter方法中生效,异步处理请求除外。

异步处理请求情况下,Response对象一直有效直到Servlet Container 调用AsyncContext.complete方法后。Servlet Container会回收Response对象为了提供性能,

研发需要明白,在这些作用域外引用Response对象都会引发未知错误。

本文链接地址:https://www.jiuchutong.com/zhishi/311536.html 转载请保留说明!

上一篇:没有实收资本的公司开立账套如何建立银行存款分录?(没有实收资本的股权原值)

下一篇:phpcms首页模板是哪个文件(phpcms 用的是什么模板引擎)

  • 个人所得税信息采集怎么弄
  • 计提个税会计分录怎么做小规模
  • 固定资产可以一次性摊销吗
  • 油票发票在报销中怎么开
  • 其他综合收益转入投资收益
  • 小企业费用包括哪些
  • 纳税人销售自产门窗并负责安装
  • 印鉴变更手续费50元
  • 购买商品加包装后出售账务处理
  • 年底员工借款如何处理
  • 长期待摊费用当月增加当月摊销吗
  • 开具红字发票无蓝字发票如何网上申报?
  • 贷款利息可以抵税吗
  • 进项税的现金流怎么填
  • 预付费服务是什么
  • 库存现金进账单会计分录
  • 17税率改16税率的时间
  • 高新技术企业资格复核
  • 原材料实际成本法核算问题
  • 建筑劳务预缴税款后怎么申报
  • 补缴的附加税怎么入账
  • 权利,许可证照印花税
  • 我们无法创建新的分区,也找不到现有的分区 贴吧
  • 会务费如何入账
  • 代扣代缴返还的手续费科目
  • win7为什么还有人用
  • php编程代码
  • ros source
  • 个人出租住房如何开增值税专用发票
  • 挂靠借用资质账务处理?
  • php操作mysql数据库(增删改查)
  • 非正常损失的存货进项税额转出
  • 人脸识别测颜值,al
  • 营改增工程计价规则
  • 商业银行流动性风险监管指标
  • ChatDoctor本地部署应用的实战方案
  • css5个定位
  • vuex五个核心概念
  • 外贸出口退税操作流程
  • 海关缴款书当月能查到吗
  • 前置测试模型
  • 织梦如何使用
  • 织梦cms要钱吗
  • mongodb replica set 配置高性能多服务器详解
  • 建筑业用的会计账簿
  • 营改增后建筑企业如何正确开具发票
  • 小微企业如何升级一般纳税人
  • 长期股权投资追溯调整有几种情况
  • 销货方开具红字发票还用给购买方吗
  • 付款后退货
  • 汽车租赁行业税负是多少
  • 住宿费专票可以抵扣进项税吗税率多少
  • 地租钱不付如何为
  • 停车发票怎么盖章
  • 餐饮食材成本高怎么形容
  • 购买方退货的会计分录怎么写
  • 在建工程领用工程物资
  • mysql数据库输入汉字是问号
  • oracle分区大小建议
  • win10虚拟桌面版
  • 没有vcd怎么放光盘
  • 苹果系统怎么更新
  • yosemite 10.10.3 beta4 下载地址 os x10.10.3beta4官方下载
  • win10hdmi转vga显示器没反应
  • win7笔记本触摸板怎么开启
  • linux搭建chia
  • j-v测试
  • JavaScript中的方法名不区分大小写
  • data.table
  • js设置窗口大小
  • scrapy爬虫教程
  • 如何消除手机自动出现的广告
  • js判断函数
  • js函数关键字
  • javascript用户名验证
  • python 数据类型
  • 通用申报表水利基金怎么填
  • 收到税务局税收返还
  • 神马电力几号发行
  • 有限公司怎么交五险
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设