《Java EE 7精粹》—— 2.11 Upgrade Processing

简介: HTTP 1.1(RFC 2616)第14.42节定义的升级机制,允许从HTTP 1.1过渡到一些其他的、不兼容的协议。协议变更后的应用层通信的功能和性质是完全依赖于所选择的新的协议。在客户端和服务器之间协商升级后,后续请求使用新选择的协议交换消息。

本节书摘来异步社区《Java EE 7精粹》一书中的第2章,第2.11节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.11 Upgrade Processing

HTTP 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来实现的:

734941cedc1494d8ee34ebfc6d0d80d577591537

请求处理查找头信息中的Upgrade字段并基于其值决定是否升级。在这个例子中,如果Upgrade字段值等于echo,连接就会升级。响应状态和头信息被正确设置。upgrade()方法被HttpServletRequest调用,并传递一个HttpUpgradeHandler实例。

在退出Servlet的service方法后,Servlet容器完成所有过滤器的处理,并标记由HttpUpgradeHandler的实例来处理连接:

d59dfc0ca76a637073cf1706dda8caec719f3a48

这段代码显示了HttpUpgradeHandler的实现。Servlet容器调用HttpUpgradeHandler的init()方法,传递一个WebConnection实例以允许协议Handler访问数据流。当升级处理完成后,HttpUpgradeHandler.destroy()方法被调用。

Servlet过滤器只处理初始的HTTP请求和响应,不参与后续的通信。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
497 1
|
6月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
219 0
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
813 1
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
262 0
|
设计模式 监控 安全
屏幕监控软件的设计模式:深入理解Java EE
在Java EE环境中,屏幕监控软件采用生产者-消费者设计模式,`ScreenCaptureProducer`类捕获屏幕数据并放入队列,`ScreenCaptureConsumer`负责处理和提交。数据每5分钟通过定时任务和RESTful API自动提交至网站,提升管理效率。该方案支持实时监控、数据分析和高效的数据处理。
263 2
|
存储 Java 对象存储
<Java EE 进阶> 3.Spring简单的读和取
<Java EE 进阶> 3.Spring简单的读和取
137 1
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
169 3
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
219 3
|
安全 Java 编译器
【Java EE】总结12种锁策略以及synchronized的实现原理
【Java EE】总结12种锁策略以及synchronized的实现原理
334 1