HTTP 1.1 (
RFC 2616)14.42 节定义了 HTTP 升级机制,允许你从 HTTP 1.1 过渡到其它兼容的协议。应用层的通信完全取决于升级后选择的协议。客户端和服务端完成协议升级后,后续请求都将使用新协议。典型的例子是如何将 HTTP 协议升级到 WebSocket,这在
RFC 6455 的
Opening Handshake 中有介绍。
Servlet 容器提供了协议升级机制,但容器本身没有包含关于新协议的辅助类,新协议处理都封装到 HttpUpgradeHandler 接口中进行。Servlet 容器和 HttpUpgradeHandler 之间的数据读写是通过字节流。
下面的例子中,在 Servlet.service 方法中决定是否升级协议,并使用到了一个新的方法:HttpServletRequest.upgrade,还有两个新的接口:javax.servlet.http.HttpUpgradeHandler 和 javax.servlet.http.WebConnection:
if (request.getHeader("Upgrade").equals("echo")) {
response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
response.setHeader("Connection", "Upgrade");
response.setHeader("Upgrade", "echo");
request.upgrade(MyProtocolHandler.class);
System.out.println("Request upgraded to MyProtocolHandler");
}
请求中判断了 Upgrade 头信息,用于判断是否需要进行协议升级。如果 Upgrade 的值是 echo,那么将会设置正确的响应 status 和头信息。request.upgrade 方法将会传入 HttpUpgradeHandler 接口实现 Class 类。
当请求离开 service 方法之后,servlet 容器处理完了所有的 filter,然后标记当前请求需要由 HttpUpgradeHandler 的实例处理。
public class MyProtocolHandler implements HttpUpgradeHandler {
@Override
public void init(WebConnection wc) {
//. . .
}
@Override
public void destroy() {
//. . .
}
}
上面的代码是 HttpUpgradeHandler 接口的一个实现样例。Servlet 将调用 HttpUpgradeHandler 的 init 方法,并传入 WebConnection 对象,使 HttpUpgradeHandler 能访问到数据,当升级过程完成后,HttpUpgradeHandler.destroy 方法将会被调用。
文章来源:
http://www.aptusource.org/2014/04/java-ee-upgrade-processing/
分享到:
相关推荐
Java EE 中与Servlet 有关的课件
包括资源创建、资源注入和打包,还涵盖了多项相关技术,包括JavaServer Faces(JSF)、Java Servlet、WebSocket Java API、JSON处理Java API(JSON—P)、国际化和本地化、bean验证、Java EE上下文和依赖注入(CDI)以及...
Java EE 7 tutorial 中的examples代码,找了很久才找到下来的,跟Java EE 7 tutorial配套使用,是官方的学习资料。
包括资源创建、资源注入和打包,还涵盖了多项相关技术,包括JavaServer Faces(JSF)、Java Servlet、WebSocket Java API、JSON处理Java API(JSON—P)、国际化和本地化、bean验证、Java EE上下文和依赖注入(CDI)以及...
Develop professional applications in Java EE 7 with this essential reference guide
Java EE 7 Recipes
Java EE 7 API Documentation 官方英文版(html) 从官方 Java EE SDK 7 安装程序中提取的,原版文档
java ee sdk 7 api说明文档
Java EE WEB 工程师培训------JDBC+Servlet+JSP整合开发
java EE,servlet jsp java web 开发的帮助文档,API
本书是英文原版的图书 探讨了GlassFish的安装和配置,然后再移动到的Java EE 7的应用程序的开发,涵盖了所有主要的Java EE 7的API。它着重于超越基础开发部署到GlassFish 4应用程序服务器的Java应用程序。本书涵盖了...
What’s New in Java EE 7 Chapter 2 : Servlets WebServlet Servlet Filters Event Listeners Asynchronous Support Nonblocking I/O Web Fragments Security Resource Packaging Error ...
编写java web项目或者servlet都会用得到java_ee_api
权威指南、Java EE 7、Java EE 7、第2卷
Apress.Begining EJB3 Java EE 7 Edition.2013
本书为java ee 规范的讲解,JSF,CDI,EJB,JPA,JTA,互操作包括message queue;restful service; soapservice
Java EE 7 Development with WildFly
《轻量级Java EE企业应用实战:Struts2+Spring4+Hibernate整合开发(第4版)》是《轻量级Java EE企业应用实战》的第4版,第4版保持了前几版内容全面、深入的特点,主要完成全部知识的升级。 《轻量级Java EE企业...
文档更新于2013-05-25. 来源:Oracle官网的Java EE SDK的安装目录下...Specification: JSR 342: JavaTM Platform, Enterprise Edition 7 (Java EE 7) Version: 7.0 Status: Early Draft Review Release: 25 May 2013