Tomcat: 是基于JAVA语言的轻量级应用服务器,是一款完全开源免费的Servlet服务器实现。
1. 总体设计
socket: 其实就是操作系统提供给程序员操作“网络协议栈”的接口,你能通过socket的接口,来控制协议,实现网络通信,达到跨主机通信。
- 监听socket
- 已完成连接socket
类加载器: 与普通程序不同的是,JAVA程序(class文件)并不是本地的可执行程序。当运行JAVA程序时,首先运行JVM,然后把Java.class加载到JVM里头运行,负责加载Java.class的这部分就是类加载器。
JVM默认提供了3个类加载器:
- Bootstrap: 用于加载JVM提供的基础运行类,即位于%JAVA_HOME%/jre/lib目录下的核心类库。
- Extension: JAVA提供的一个标准的扩展机制用于加载除核心类库外的Jar包。默认的扩展目录是%JAVA_HOME%/jre/lib/ext。
- System: 用于加载环境变量CLASSPATH指定目录下的或者-classpath运行参数指定的Jar包。
2. Catalina
Catalina是Tomcat提供的Servlet容器实现,它负责处理来自客户端的请求并输出响应。
对于Tomcat来说,Servlet容器是其核心组件。所有基于JSP/Servlet的JAVAWeb应用均需要依托于Servlet容器运行并对外提供服务。
Tomcat本质上是一款Servlet容器,因此Catalina是Tomcat的核心,其他模块均为Catalina提供支撑。
Catalina使用Digester解析XML配置文件并创建应用服务器。
Digester: 是一款用于将XML转换为JAVA对象的事件驱动型工具,是对SAX(同样为事件驱动型XML处理工具,已包含到J2SE基础类库当中)的高层次封装。
2.3 创建Server
Server的解析:
- 创建Server实例
- 创建全局J2EE企业命名上下文
- 为Server添加生命周期监听器
- 构造Service实例
- 为Service添加生命周期监听器
- 为Service添加Executor
- 为Service添加Connor
- 为Connector添加虚拟主机SSL配置
- 为Connector添加生命周期监听器
- 为Connector添加升级协议
- 添加子元素解析规则
Engine的解析:
- 创建Engine实例
- 为Engine添加集群配置
- 为Engine添加生命周期监听器
- 为Engine添加安全配置
Host的解析:
- 创建Host实例
- 为Host添加集群
- 为Host添加生命周期管理
- 为Host添加安全配置
Context的解析:
- context实例化
- 为Context添加生命周期监听器
- 为Context指定类加载器
- 为Context添加会话管理器
- 为Context添加初始化参数
- 为Context添加安全配置以及Web资源配置
- 为Context添加资源链接
- 为Context添加Value
- 为Context添加守护资源配置
- 为Context添加Cookie处理器
2. 4 Web应用加载
web应用加载属于Server启动的核心处理过程。
Catalina对Web应用的加载主要由StandardHost、HostConfig、StandardContext、Context-Config、StandardWrapper这5个类完成。
2.5 Web请求处理
。。。
Tomcat在$CATALINA_BASE/conf/web.xml中默认定义了两个Servlet:
- DefaultServlet: 主要用于处理静态资源,而且为了提升服务器性能,Tomcat对访问文件进行了缓存。
- JspServlet: 负责处理所有JSP文件的请求。
Coyote
仅有Servlet容器服务器是无法对外提供服务的,还需要由链接器接受来自客户端的请求,并按照既定协议(如HTTP)进行解析,然后交由Servlet容器处理。
Coyote是Tomcat链接器框架的名称,是Tomcat服务器提供的供客户端访问的外部接口。客户端通过Coyote与服务器建立链接、发送请求并接受响应。
Coyote封装了底层的网络通信(Socket请求及响应处理),为Catalina容器提供了统一的接口,使Catalina容器与具体的请求协议及I/O方式解耦。Coyote将Socket输入转换为Request对象,交由Catalina容器进行处理,处理请求完成后,Catalina通过Coyote提供的Response对象将结果写入输出流。
Jasper
Tomcat的JSP引擎——Jasper
Tomcat性能调优
性能测试和性能优化是软件开发中非常重要的两项工作。性能优化涵盖的范围非常广,即包括网络、磁盘、数据库,又包括服务器、应用系统代码优化,既涉及各个角色的协作,如运维工程师对基础设备的优化、DBA对数据库的优化、开发人员对资源访问及算法的优化。
过早的优化是一切邪恶的根源。
传输安全(SSL)
SSL协议的3个特性:
- 保密
- 鉴别
- 完整性
从性能角度考虑,加解密是一项计算昂贵的处理,因此尽量不要将整个web应用采用SSL链接,实际部署过程中,选择有必要进行安全加密的页面(如存在敏感信息传输的页面)采用SSL通信。
HTTPS是在HTTP的基础上加入了安全套接字(SSL)。SSL主要用于客户端与服务器端之间的身份认证和数据传输加密。