Tomcat(二)——Tomcat的组成与架构

Tomcat目录结构

  • bin,存放tomcat的可执行脚本,startup等。还存放着这些脚本执行所依赖的jar包。
  • conf,存放配置文件,server.xml等。
  • lib,存放tomcat的依赖库,tomcat和web项目共同依赖的jar包也可以放到这个目录下。
  • logs,默认情况,存放日志的位置。
  • temp,存放临时文件。
  • webapps,默认的应用部署目录。
  • work,存放tomcat运行过程中产生的文件,如在tomcat中跑jsp时,翻译出来的servlet就会放在这个目录下。
  • LICENSE,许可证文件
  • NOTICE
  • RELEASE-NOTES
  • RUNNING.txt

JVM启动参数配置

  • Tomcat是Java写的,Tomcat本身也是一个Java程序,在运行的时候需要依赖JVM,是可以配置JVM启动参数的。
  • 可以使用环境变量来配置JVM启动参数的。
  • 环境变量就是一些变量,可以来控制系统或者应用程序的一些行为的。
  • 这个环境变量是JAVA_OPTS

JAVA_OPTS常见的参数:

  • -server -Xms512m -Xmx512m
  • -service告诉JVM这是一个服务器应用,JVM可以做一些自己认为的优化。
  • -Xms512m -Xmx512m是用来调试JVM中堆大小的。
    • Xms是用来调整初始堆内存的。
    • -Xmx是用来调整最大堆内存的。
    • 最大堆内存是受限于物理内存的。
    • 当业务量大时才会调整后两个参数。
  • 调大初试堆和最大堆JAVA_OPTS="-server -Xms2048m -Xmx2048m"

Tomcat配置文件

配置文件为conf目录下的server.xml,文件的详细结构:

<Server port="8005" shutdown="SHUTDOWN">
     <Service name="Catalina"> 
         <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
         <Connector port="8092" protocol="AJP/1.3" redirectPort="8443" />
         <Engine name="Catalina" defaultHost="localhost">
              <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
              </Host>
        </Engine>
    </Service>
</Server>

去除各种属性后的结构:

<Server>
    <Service>
        <Connector>
        </Connector>
        <Engine>
            <Host>
                <Context></Context>
            </Host>
        </Engine>
    </Service>
</Server>
  • Server是根元素,Server下面可以有多个service配置的
  • 在Service下可以配置多个Connector
  • 而Connector是用来接收用户请求
  • 一个Service下必须只有一个Engine,用来处理Connector接收到的请求的,Java代码都是由Engine来执行的。
  • 在一个Engine下可以有多个Host的,Host是虚拟主机的概念,一般来说一个IP加一个端口构成了一个队。
  • 一个IP端口对可以为多个域名提供服务的,我们可以在多个请求下加入不同的Host头,来决定路由到哪一个Host进行处理。
  • 在Host里面可以有一个或多个Context的,一个Context实际就是一个Web应用。
    这里写图片描述

  • Web应用是被Service等包着的,Service这些就是容器——Container。

  • Tomcat是Web应用的容器,整个Server就是Tomcat。

Tomcat对应的这些组件的实现

  • Connector
    • 由Coyote实现,Coyote这个组件实现了多种不同的Connector。
    • Tomcat默认的,最常见的就是BIO Connector。
      • BIO Connector使用比较传统的阻塞式的IO操作的方式,对应实现方式也是传统的Java IO的实现。
      • 具体就是当客户端有一个连接过来的时候,服务端这边就会分配一个线程去处理,如果这个请求比较大,发了很久一个请求头还没有发完,那对应的处理线程就只能一直等待。因此叫阻塞式IO。
  • Container,执行代码逻辑
  • 对于Tomcat来说,Container的具体实现是Catalina,这也就说明了配置环境变量时为什么配的是Catalina。因为Catalina是实现容器的组件,我们最终的代码都是由Catalina中的代码来执行的。

Tomcat请求处理流程

  1. 浏览器发出请求。
  2. Connector接收请求并处理,connector会完成一些socket方面操作,会从socket上读取数据,会对请求进行解析,解析完成之后交给Container进行处理。
  3. Container中,对于Tomcat中来说就是Catalina,Catalina中会根据Connector中解析出来的内容来确定具体请求来响应什么东西,如静态页面、图片、动态内容等。
  4. Container会根据请求的内容生成具体的响应,这个响应在由Connector下发到浏览器。
  5. 因此Connector是用来完成网络处理相关的部分;而Container是用来执行web应用的代码,包括去查找一些静态资源。
    这里写图片描述

Tomcat配置文件更多

猜你喜欢

转载自blog.csdn.net/u011741311/article/details/80140304
今日推荐