《Java EE 7精粹》—— 2.11 Upgrade Processing
本节书摘来异步社区《Java EE 7精粹》一书中的第2章,第2.11节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.11 Upgrade ProcessingHTTP 1.1(RFC 2616)第14.42节定义的升级机制,允许从HTTP 1.1过渡到一些其他的、不兼容的协议。协议变更后的应用层通信的功能和性质是完全依赖于所选择的新的协议。在客户端和服务器之间协商升级后,后续请求使用新选择的协议交换消息。一个典型的例子是RFC 6455的Opening Handshake一节中描述的如何从HTTP协议升级到WebSocket协议。
Servlet容器提供了一个HTTP升级机制。然而,Servlet容器本身不感知升级协议。协议处理被封装在HttpUpgradeHandler中。Servlet容器和HttpUpgradeHandler之间的数据读写的形式是字节流。
由Servlet.service()方法决定是否升级。升级是通过添加一个新的方法HttpServletRequest.upgrade()和两个新的接口javax.servlet.http.HttpUpgradeHandler和javax.servlet.http.WebConnection来实现的:
请求处理查找头信息中的Upgrade字段并基于其值决定是否升级。在这个例子中,如果Upgrade字段值等于echo,连接就会升级。响应状态和头信息被正确设置。upgrade()方法被HttpServletRequest调用,并传递一个HttpUpgradeHandler实例。
在退出Servlet的service方法后,Servlet容器完成所有过滤器的处理,并标记由HttpUpgradeHandler的实例来处理连接:
这段代码显示了HttpUpgradeHandler的实现。Servlet容器调用HttpUpgradeHandler的init()方法,传递一个WebConnection实例以允许协议Handler访问数据流。当升级处理完成后,HttpUpgradeHandler.destroy()方法被调用。
Servlet过滤器只处理初始的HTTP请求和响应,不参与后续的通信。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
- 基础知识《零》---Java程序运行机制及运行过程
- Java反射异常:java.lang.NoSuchFieldException
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
- Java实现蓝桥杯第十一届校内模拟赛
- Java实现 LeetCode 454 四数相加 II
- Java GUI 鼠标事件
- java实现公式解析
- java 11 Java Flight Recorder
- java实现断点续传的原理
- java 11 标准Java异步HTTP客户端
- macos:安装java 17.0.6(android studio报错:Unable to locate a Java Runtime.)
- 浅析Java各种变量线程安全问题
- Java java.util.concurrent.Future的一个例子
- 华为OD机试 - 找到比自己强的人数(Java & JS & Python)
- java系统服务运行分析
- Java使用GSON对JSON进行解析——IDEA引入jar包方式
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
- Java Logger(java日志)
- java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】
- JAVA学习第十九课(java程序的异常处理 (二))
- 函数调用图工具: Understand(支持Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M)
- JAVA语言之Java 中不同的并行实现的性能比较
- java是值传递还是引用传递?
- Java如何在指定端口创建套接字?
- 【java】Java 接口(Interface)
- JAVA开发讲义(二)-Java程序设计之数据之谜一