当前位置: 首页 > news >正文

Tomcat架构解析

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主要用于客户端与服务器端之间的身份认证和数据传输加密。

 


http://www.mrgr.cn/news/39427.html

相关文章:

  • 在Ubuntu 16.04上安装Virtualmin与Webmin、LAMP、BIND和PostFix的方法
  • 实验四 IEEE 802.3协议分析和以太网
  • NLP_情感分类_机器学习(w2v)方案
  • 河南人社厅:注册满两年可按条件认定副高
  • 【Swift官方文档】7.Swift集合类型
  • 24.2.29蓝桥杯|单位换算--8道题
  • 面试题:通过栈实现队列
  • 基于SSM+小程序的校园失物招领管理系统(失物2)(源码+sql脚本+视频导入教程+文档)
  • InnoDB 死锁
  • 【CSS Tricks】css动画详解
  • VS开发 - 静态编译和动态编译的基础实践与混用
  • Junit和枚举ENUM
  • 通信工程学习:什么是LAN局域网、MAN城域网、WAN广域网
  • java判断ip是否为指定网段
  • Spring依赖注入推荐使用构造函数注入而非@Autowired
  • 嵌入式linux系统中库函数如何提高效率
  • ServletContainerInitializer接口详解
  • Gson将对象转换为JSON(学习笔记)
  • 2、Spring Boot 3.x 集成 Feign
  • SQL中基本SELECT语句及常见关键字的使用(内连接,左/右连接)