论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
Oracle
›
Servlet4.0 Response
Servlet4.0 Response
瑞星
金牌会员
|
2022-9-30 15:16:22
|
显示全部楼层
|
阅读模式
楼主
主题
987
|
帖子
987
|
积分
2961
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
Servlet4.0 Response对象
Response对象封装Server返回Client的所有信息。在HTTP协议中,Server传达给Client信息转换到HTTP Header或者HTTP BODY中。
5.1 Buffering缓冲区
Serverlet Container可以但不强制缓冲发送给客户端的内容。默认得,Servlet Container会开放接口设置缓冲区。如ServletResponse对象的方法可以设置缓冲区:
getBufferSize
setBufferSize
isCommitted
reset
resetBuffer
flushBuffer
当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响应头。方法如下:
setHeader
addHeader
setHeader使用指定的名称替换已经存在的值,若header的值是集合,则集合的值被清空,使用新值替换。
addHeader添加指定名称的值到集合,该名称未存在,则会创建新集合。
若header的值是int类型或Date类型,则ServletResponse接口提供下述方法:
setIntHeader
setDateHeader
addIntHeader
setIntHeader
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对象都会引发未知错误。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
瑞星
金牌会员
这个人很懒什么都没写!
楼主热帖
复习一下Linux常用命令,孰能生巧~ ...
OpenSSL RSA相关基本接口和编程示例 ...
2022护网面试题总结
一次服务器被入侵的处理过程分享 ...
适用于顺序磁盘访问的1分钟法则 ...
内网安全-横向移动(1)
Iceberg在袋鼠云的探索及实践 ...
kubernetes入门
Oracle实现金额小写转大写函数 ...
Android studio 连接SQLite数据库 +创 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Java
物联网
快速回复
返回顶部
返回列表