- 一.Tomcat概述
- 二.Tomcat配置文件介绍及核心组件
- 2.1、配置文件
- 2.2、核心组件
- 三.Tomcat服务部署
- 3.1、关闭防火墙
- 3.2、安装JDK包
- 3.3、设置JDK环境变量
- 3.4、安装tomcat
- 3.5、将tomcat添加到服务
- 四.虚拟主机配置
自 2017 年 11 月编程语言排行榜 Java 占比 13%,高居榜首,Tomcat 也一度成为 Java 开发人员的首选。其开源、占用系统资源少、跨平台等特性被深受喜爱。本章主要学习如何 部署 Tomcat 服务,根据生产环境实现多个虚拟主机的配置,最后的重点是进行压测,根据 压测结果如何优化 Tomcat 服务及常见的内存溢出如何处理。
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。
官网地址:https://tomcat.apache.org/
二.Tomcat配置文件介绍及核心组件 2.1、配置文件安装目录下 文件介绍
| 目录名字 | 功能 |
| bin | 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件 |
| conf | 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。 |
| lib | 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包 |
| logs | 存放 Tomcat 日志 |
| temp | 存放 Tomcat 运行时产生的文件 |
| webapps | 存放项目资源的目录 |
| work | Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到 |
conf子目录
| 文件名 | 说明 |
| server.xml | 主配置文件 |
| web.xml | 每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件 |
| context.xml | 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件 |
| tomcat-users.xml | 用户认证的账号和密码文件 |
| catalina.policy | 当使用security选项启动omcat时,用于为tomcat设置安全策略 |
| catalina.properties | Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数 |
| logging.properties | Tomcat日志系统相关的配置,可以修改日志级别和日志路径等 |
| 注意配置文件对于大小写敏感 |
Tomcat 由一系列的组件构成,其中核心的组件有三个:
- Web 容器:完成 Web 服务器的功能。
- Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
- JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码
多实例:多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。
引擎:一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等
| 名称 | 说明 |
| server | 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个 |
| service | 服务,用来组织Engine和Connector的对应关系,一个service中只有一个Engine |
| connector | 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine |
| Engine | 即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
| Host | 即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分 |
| Context | 应用的上下文,配置特定url路径映射和目录的映射关系: url => directory |
tomcat 处理请求过程
- Tomcat启动一个Server进程。可以启动多个Server,即tomcat的多实例,但一般只启动一个
- 创建一个Service提供服务。可以创建多个Service,但一般也只创建一个
- 每个Service中,是Engine和其连接器Connector的关联配置
- 可以为这个Service提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应
- Service 内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host
- Engine对请求头做了分析,将请求发送给相应的虚拟主机
- 如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
- Engine上的缺省虚拟主机可以修改
- Host定义虚拟主机,虚拟主机有name名称,通过名称匹配
- Context定义应用程序单独的路径映射和配置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]#rpm -ivh jdk-8u201-linux-x64.rpm
将安装 Tomcat 所需软件包传到/opt目录下 apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm 切换至/opt下,安装JDK cd /opt rpm -ivh jdk-8u201-linux-x64.rpm3.3、设置JDK环境变量
1. 修改配置文件 vim /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64 export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH=$JAVA_HOME/bin:$PATH 2. 刷新配置文件 [root@localhost jdk1.8.0_201-amd64]#source /etc/profile3.4、安装tomcat
1. #切换至/opt下,解压tomcat包 cd /opt tar -zxf apache-tomcat-9.0.16.tar.gz 2. #将解压后的包拷贝至/usr/local/下并重命名 cp -r apache-tomcat-9.0.16 /usr/local/tomcat 3. #切换至拷贝的目录下,启动tomcat cd /usr/local/tomcat/ /usr/local/tomcat/bin/startup.sh 4. #看是否启动成功 ss -natp |grep 8080 5. #在网页测试是否可以成功登录 http://192.168.32.98:8080/3.5、将tomcat添加到服务
1. #先关闭服务 /usr/local/tomcat/bin/shutdown.sh 2. #添加用户设置属主属组 useradd -s /sbin/nologin tomcat chown tomcat:tomcat tomcat/ -R 3. #新建服务文件 vim /etc/systemd/system/tomcat.service [Unit] Description=Tomcat #After=syslog.target network.target remote-fs.target nss-lookup.target After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh RestartSec=3 PrivateTmp=true User=tomcat Group=tomcat [Install] WantedBy=multi-user.target 4. #重新加载服务,并开启,查看是否成功启动 systemctl daemon-reload systemctl start tomcat ss -ntap |grep 8080四.虚拟主机配置
可能有时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.why.com,www.accp.com希望通过这两个域名访问到不同的项目内容。
[root@localhost webapps]#mkdir why accp [root@localhost webapps]#echo "this is kgc web !" > why/index.jsp [root@localhost webapps]#echo "this is accp web !" > accp/index.jsp [root@localhost webapps]#cat accp/index.jsp kgc/index.jsp this is accp web ls this is why web ls #http://tomcat.apache.org/tomcat-8.5-doc/index.html #配置文件的详解 [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml[root@localhost ~]#systemctl restart tomcat ##更改hosts文件## C:WindowsSystem32driversetc 改hosts文件 192.168.32.101 www.why.com www.accp.com http://www.why.com:8080/why/ http://www.why.com:8080/accp/



