Undertow简介
Undertow 是RedHat(红帽公司)的开源产品,采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。
WildFly8的默认Servlet容器采用的不是Tomcat,也不是Jetty,而是JBoss自己开源的Undertow,Undertow是用Java编写的性能灵活的Servlet容器,底层基于高性能的NIO框架XNIO,XNIO也是JBoss开源的产品,JBoss开源的高性能NIO框架还有一个很有名:Netty。Undertow在WildFly8中的角色如图:
Undertow的架构类似于Jetty,采用应用内嵌的方式,这也正是为什么说它有灵活的性能的原因,利用Undertow可以快速构建一个小巧的应用服务,实现代码如下:
从源代码,我们可以抽象出Undertow生成应用的架构,如图所示

利用运行调试,我们可以更加深入地了解Undertow中的一些概念:
ServletInfo:Servlet的最小单位,是对javax.servlet.Servlet具体实现的再次封装
FilterInfo:过滤器封装
DeploymentInfo:包布署对象,包含多个ServletInfo,可以说是ServletInfo的集合
ServletContainer:容器,用来管理DeploymentInfo,一个容器可以添加多个DeploymentInfo
DeploymentManager:包布署的管理,是对添加到ServletContainer的DeploymentInfo的一个引用,用于运行发布和启动容器
HttpHandler:servlet path处理器,DeploymentManager启动后返回的Servlet处理器,通常是HttpContinueReadHandler(连续读处理器)
PathHandler:分发器,将用户请求分发给对应的HttpHandler
HttpServerExchange:数据交换封装,可以转换成ServletRequest和ServletResponse
示例代码的调试运行栈如下:
连接通道
作为Servlet协议协议转换的实体HttpServerExchange的结构如下:
Undertow的性能