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

认识Tomcat及其核心组件

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

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

  连接器(Connector): 连接器帮助我们把客户端里面的请求连接到我们Tomcat的服务。Tomcat可以配置多个连接器。在这个连接器中可以指定Service和外部通信的一个协议(HTTP 1.1、HTTPS、AJP: apache 私有协议,用于apache 反向代理Tomcat)。

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

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

  虚拟机(Host) 基于域名分发请求(可以配置多个虚拟机)。

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

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

组件之间的组成关系

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

  最顶层的是 Server,然后是 ServiceService可以有多个,一般情况下只配置一个),一个 Service里面可以支持多个 Connector,一个 Service里面只能由唯一的一个 EngineEngine里面可以包含多个 HostHost可以包含多个 Context

Tomcat启动参数的说明

Tomcat的主要启动参数

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

  2、JAVA_HOME: 指定jdk 目录,如果未设置从java 环境变量当中去找;

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

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

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

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

平时启动Tomcat的过程

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

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

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

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

  我们在Eclipse或IDEA中启动WEB项目的时候其实是在Tomcat程序文件之外创建了一个部署目录,在一般的生产环境中也是这么做的 即:Tomcat程序目录和部署目录分开 。我们在只需要在启动时指定CATALINA_HOMECATALINA_BASE 参数即可实现。

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

  1、下载并解压Tomcat

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

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

  4、创建并编写脚本: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
复制代码

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

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

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

  1、看上图所知:我的Tomcat在A目录,所有的应用在B目录,B目录中的所有的应用是指向Tomcat的,当Tomcat要进行升级的时候,我只需要把Tomcat所在的A目录升级了就可以了,而不需要一点一点的去升级所有的配置了。

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

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

转载于:https://juejin.im/post/5c14f9356fb9a04a027a3fb8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值