tomcat学习笔记(一)系统架构和原理

tomcat学习笔记(一)系统架构和原理

  • Tomcat
    • 浏览器访问服务器的流程
      • tomcat请求处理大致过程
      • tomcat系统总体架构
      • coyote 连接器组件
        • coyote内部组件和工作流程
      • servlet容器Catalina
    • tomcat核心配置文件server.xml

Tomcat

b/s(浏览器/服务器模式) 浏览器是客户端(发送http请求)

浏览器访问服务器的流程

http请求只是定义了数据的组织格式(通信格式),是一个应用层协议,数据传输依靠的是TCP/IP协议。
1、用户输入url地址,然后出发访问,或者是搜索框输入关键词进行搜索。
2、浏览器发起TCP连接请求(三次握手)
3、服务器接受请求建立连接
4、浏览器生成HTTP格式的数据包
5、通过TPC/IP发送请求数据包
6、服务器解析HTTP格式数据包
7、服务器执行请求
8、服务器生成HTTP格式的数据包
9、服务器通过TPC/IP发送响应数据包给浏览器
10、浏览器解析HTTP格式的数据包
11、浏览器呈现静态数据给用户,静态数据(html/js/图片)

tomcat请求处理大致过程

tomcat是一个http服务器,能够接受并且处理http请求
如果tomcat直接调用业务处理类完成业务处理的话,那么tomcat便和我们的java类耦合在一起了。tomcat显然不是这么做的。
HTTP服务器接受到请求之后,吧请求交给Servlet容器来处理,servlet容器通过servlet接口调用业务类。servlet接口和servlet容器一套内容被称作servlet规范

tomcat既按照servlet规范的要求去实现了servlet容器规范,同时也是一个HTTP服务器。
1、HTTP服务器会把请求信息使用ServletRequest对象封装起来
2、进一步调用servlet容器中的某个具体的servlet
3、根据url和servlet的映射关系,找到相应的servlet
4、如果servlet还没有被加载,就用反射机制创建这个servlet,并调用servlet的init方法来完成初始化
5、接着调用这个具体的servlet的servcie方法来处理请求,请求处理结果使用servletResponse对象封装
6、把servletResponse对象返回给HTTP服务器,HTTP服务器会把相应发送给客户端

tomcat系统总体架构

通过上述,tomcat有两个非常重要的功能需要完成
1、要和客户端浏览器进行交互进行socket通信,将字节流和request/response对象进行转换。
2、servlet处理业务逻辑

tomcat有两个重要组件,一个是Connector连接器组件,一个是Container容器组件。
连接器:和客户交互(socket通信),对应角色是http服务器功能
容器组件:处理业务逻辑(对应角色:servlet容器)

coyote 连接器组件

1、coyote封装了底层的网络通信(socket请求及相应处理)
2、coyote是catalina容器(容器组件)与具体的请求协议及io操作方式的完全解耦
3、coyote将socket输入转换封装为Request对象,进一步封装后交友catalina容器进行处理,处理请求完成后,catalina通过coyote提供的response对象将结果写入输出流
4、coyote负责的具体协议(应用层)和io相关内容

应用层默认协议是HTTP/1.1,传输层默认的io模型是NIO

coyote内部组件和工作流程

EndPoint:通信端点,即终端,通信监听的接口,是具体socket接受和发送处理器,是对传输层的抽象,因此EndPoint用来实现TCP/IP协议的
Processor 是协议处理接口,应用协议解析处理,processor接受来自EndPoint的socket,读取字节流解析成tomcat Request和Response对象,并通过Adapter将其提交到容器处理,processor是应用层协议的抽象。
Adapter:由于协议不同,客户端发过来的请求信息也不尽相同,tomcat定义了自己的request类,但是这个对象不是标准的servletrequest,不能用tomcatrequest作为参数来调用容器,引入coyoteAdapter,这是适配器模式的经典应用,连接器嗲用coyoteAdapter的service方法,传入的是tomcat request对象,coyoteAdapter将tomcat request对象转换为servletRequest,在调用容器。

servlet容器Catalina

tomcat是一个由一系列可配置(conf/server.xml)的举荐构成的web容器,而catalina是tomcat的servlet容器
从另一个角度来说,tomcat本质上就是一个servlet容器,因为catalina才是tomcat的核心,其他模块都是为Catalina提供支撑的。
tomcat往往我们认为是Catalina的一个实例。
Catalina实例通过加载server.xml完成其他实例的创建,创建并管理一个server,server创建并管理多个服务,每个服务又可以有多个connector和一个container。
**catalina:**负责解析tomcat配置文件,一次来创建服务器server组件并进行管理
**server:**服务器标识整个catalina servlet容器以及其他组件,负责组装启动servlet引擎,tomcat连接器,server通过实现lifecycle接口,提供了一种优雅的启动和关闭整个系统的方式
**service:**服务是server内部的组件,一个server包含多个service,他讲若干个connector组件绑定到了一个contaner
**container:**容器,负责处理用户的servlet请求,并返回对象给web用户的模块

tomcat核心配置文件server.xml




 
 

  
  
  
  
  
  
  
  

  
  
    
    
  

  
   
  

    
    

















	

    
	
	
	

    
    
    
    
    
    
    

    
	
    
               
               
               
   

    

    
	
    

      
      

      
      
        
        
      
	  
	  

      

        
        

		

        
        

      
	  
	  
	  

        
        

        
        

      
    
  


你可能感兴趣的:(tomcat)