Tomcat学习小记(一)

1、Tomcat概述

Tomcat 服务器是一个开源的轻量级Web应用服务器,擅长处理动态资源,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。

Tomcat服务器架构采用套娃式架构,每个功能的实现都是由各个组件环环相套。

Tomcat核心功能;HTTP服务器,进行Socket通信(TCP/IP),解析HTTP报文

         Servlet容器,通过自带的Servlet和自定义的Servlet,处理具体的业务逻辑

Tomcat工作流程:页面通过Socket发送请求到HTTP服务器

        HTTP服务器解析报文,对请求进行处理,通过适配器组件将request转成ServletRequest发送给Servlet服务器

        Servlet服务器找到对应的Servlet处理请求,并将结果ServletResponse返回给HTTP服务器

        HTTP将返回信息进行处理,将ServletResponse转成Response通过Socket返回给页面

        页面收到返回信息进行展示

2、Tomacat架构

为了实现功能很行很多封装设计,封装了很多组件,组件与组件之间的关系构成了Tomcat的架构

<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN">--对应server组件

  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina"> -- 对应service组件
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --对应COnnector组件
	
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> --对应Connector组件,监听不同端口
	
    <Engine name="Catalina" defaultHost="localhost"> --对应Engine组件,默认localhost地址
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"> --对应Host组件,虚拟主机,访问地址的虚拟域名,
appBase应用基础路径,webapps下的一个文件夹就是一个context <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>

 server组件:一个server代表一个tomcat的实例,又因为Tomcat的核心是Servlet容器(Catalina),也称server 组件为Catalina实例,一个server有多个service组件,但默认使用一个

service组件:用来对外提供服务的,包含多个Connector组件(监听不同端口的请求和解析请求)和一个Servlet容器(进行业务处理)

Connector组件:用来实现http服务功能,又名Coyote

Container组件:用来实现Servlet容器功能,又名Catalina

Coyote组件:连接器组件,包含EndPoint子组件、Processor子组件、Adapter 子组件,EndPoint子组件+Processor子组件整理组合成ProtocolHandler组件

EndPoint子组件:进行Socket通信,处理TCP/IP协议,支持BIO、NIO、NIO2、APR网络IO模型,可以进行配置,Tomcat8之前默认为BIO,Tomcat8之后默认NIO

Processor子组件:进行HTTP报文解析,处理HTTP协议

 Adapter 子组件:适配器,将Request对象封装成ServletRequest对象,将ServletResponse对象封装成Response对象

Engine组件:Engine组件(引擎)是Servlet容器Container组件的核心结构,支持在其中定义多个虚拟机(HOST),虚拟机允许Tomcat引擎在配置一台机器上的多个域名

Host组件:虚拟机,虚拟机允许Tomcat引擎在配置一台机器上的多个域名并且互不干扰

Context组件:每个虚拟机支持多个web应用的部署,就是我们常用的上下文对象

wrapper组件:上下文中可以部署多个Servlet,并且每一个Servlet都会被包装组件所包含

3、套娃式架构的好处

组件之间关系清晰,便于管理组件的生命周期

架构设计的组件与配置文件server.xml标签一一对应,便于解读

便于子容器继承父容器的一些配置

灵活配置组件

4、Tomcat实例构建

1、从官网下载源代码的压缩包,在本地进行解压,导入idea

2、进入src目录,创建一个pom.xml文件,便于管理

3、在项目目录中创建source文件夹,将conf、webapps目录移动到source文件夹下

4、给tomcat的源码启动类Bootstrap配置运行参数

 

 

 

 5、启动BootStrap类的main函数

posted @ 2020-05-06 13:25  CarBlack  阅读(163)  评论(0编辑  收藏  举报