认识Tomcat核心组件及其启动参数

认识Tomcat及其核心组件

  Tomcat是一个java的web容器,Tomcat是实现了javaEE当中的Servlet和JSP规范的一个容器。Tomcat通常用于动态请求的处理(Servlet)。Tomcat采用组件的方式去设计(面向组件)。总体的功能是经过组件的方式去拼装的。而且每个组件均可以进行替换保证了它的一个灵活性。看到下图: java

Tomcat
   Server 和 Service组件: Tomcat的一个服务器(Server)和Tomcat的服务(Service Tomcat-standalone),主要做用是将链接器(Connector)和引擎(Engine)关联;

  链接器(Connector): 链接器帮助咱们把客户端里面的请求链接到咱们Tomcat的服务。Tomcat能够配置多个链接器。在这个链接器中能够指定Service和外部通讯的一个协议(HTTP 1.一、HTTPS、AJP: apache 私有协议,用于apache 反向代理Tomcat)。web

  容器组件(Container ): 容器组件包含引擎(Engine,默认的引擎叫catalina)、虚拟机(Host)、Context。apache

  Engine主要的做用是将协议解析并转换成request传给虚拟机。tomcat

  虚拟机(Host) 基于域名分发请求(能够配置多个虚拟机)。bash

  Context隔离每一个WEB应用,每个Context的ClassLoader都是独立的(Tomcat的webapps目录下有一个ROOT文件夹表明的是根路径)。服务器

  Tomcat还有一些其它组件,像logger日志管理器、loader载入器、pipeline管道等。这些组件都是内嵌的组件。app

组件之间的组成关系

  咱们知道Tomcat里面有哪些组件了,那这些组件的组成关系怎样呢?看下图: curl

Tomcat组件之间的组成关系
  最顶层的是 Server,而后是 ServiceService能够有多个,通常状况下只配置一个),一个 Service里面能够支持多个 Connector,一个 Service里面只能由惟一的一个 EngineEngine里面能够包含多个 HostHost能够包含多个 Context

Tomcat启动参数的说明

Tomcat的主要启动参数

  一、JAVA_OPTS: jvm 启动参数 , 设置内存 编码等 -Xms100m -Xmx200m -Dfile.encoding=UTF-8;webapp

  二、JAVA_HOME: 指定jdk 目录,若是未设置从java 环境变量当中去找;jvm

  三、CATALINA_HOME: Tomcat 程序的根目录;

  四、CATALINA_BASE: 应用部署目录,默认为CATALINA_HOME;

  五、CATALINA_OUT: 应用日志输出目录,默认为CATALINA_BASE;

  六、CATALINA_TMPDIR: 应用临时目录,默认为CATALINA_BASE/temp。

平时启动Tomcat的过程

  一、复制WAR包到Tomcat的webapps文件夹下;

  二、执行starup.bat(startup.sh)脚本启动;

  三、在启动过程当中会自动将war包解压装载。

  可是在咱们平时开发的时候是直接在Eclipse或IDEA中启动WEB项目的,不会把将项目打包,而后将war包复制到Tomcat的webapps目录下再执行starup.bat(startup.sh)脚本的。

  咱们在Eclipse或IDEA中启动WEB项目的时候实际上是在Tomcat程序文件以外建立了一个部署目录,在通常的生产环境中也是这么作的 即:Tomcat程序目录和部署目录分开 。咱们在只须要在启动时指定CATALINA_HOMECATALINA_BASE 参数便可实现。

演示Tomcat程序目录和部署目录分开

  一、下载并解压Tomcat

  二、建立apps目录,在apps下建立test-web,test-web下新建一个logs目录。

  三、将Tomcat目录下的conf和webapps两个目录拷贝一份到test-web。

  四、建立并编写脚本:tomcat.sh

#!/bin/bash 
#####设置jvm内存,最小内存和最大内存
export JAVA_OPTS="-Xms100m -Xmx200m"	
#####指定JDK目录
export JAVA_HOME=/usr/local/java
#####对应的Tomcat的目录
export CATALINA_HOME=/usr/local/apache-tomcat-8.5.34
##### pwd:当前脚本所在目录
export CATALINA_BASE="`pwd`"
##### 接收一个参数,这个参数包含start、stop、restart、version和configtest
##### start:执行catalina.sh脚本
##### stop:关闭catalina.sh脚本
##### restart:重启catalina.sh脚本
##### version:查看版本号
##### configtest:查看配置是否正确
case $1 in
        start)
        $CATALINA_HOME/bin/catalina.sh start
                echo start success!!
        ;;
        stop)
                $CATALINA_HOME/bin/catalina.sh stop
                echo stop success!!
        ;;
        restart)
        $CATALINA_HOME/bin/catalina.sh stop
                echo stop success!!
                sleep 2
        $CATALINA_HOME/bin/catalina.sh start
        echo start success!!
        ;;
        version)
        $CATALINA_HOME/bin/catalina.sh version
        ;;
        configtest)
        $CATALINA_HOME/bin/catalina.sh configtest
        ;;
        esac
exit 0
复制代码

  五、在test-web目录下执行./tomcat.sh start命令启动Tomcat,打印出的日志最后一行为start success!!即启动成功

  六、执行curl 127.0.0.1:8080,日志打印出webapps/ROOT/index.jsp文件的内容则访问成功。

  这样就能够将应用程序和Tomcat的部署目录进行分离。那这样有什么好处呢?看下图:

Tomcat
  一、看上图所知:个人Tomcat在A目录,全部的应用在B目录,B目录中的全部的应用是指向Tomcat的,当Tomcat要进行升级的时候,我只须要把Tomcat所在的A目录升级了就能够了,而不须要一点一点的去升级全部的配置了。

  二、我在每个应用程序内新建了一个logs文件夹,咱们的日志文件是独立的不会和其它项目混淆在一块儿。

  三、咱们的配置文件conf也是独立的。各应用之间互不影响,灵活性高。

相关文章
相关标签/搜索