文章目录
- 1. Tomcat的相关介绍
- 1.1 Tomcat简介
- 1.2 Tomcat的核心组件
- 1.2.1 Web容器
- 1.2.2 Servlet容器
- 1.2.3 JSP容器
- 1.3 Tomcat的功能组件
- 1.3.1 connector连接器
- 1.3.2 container容器
- 1.3.2.1 子容器及其相关功能
- 1.4 主要作用
- 1.5 Tmocat处理请求的过程
- 2. Tomcata服务部署
- 2.1 安装并配置JDK
- 2.2 设置JDK环境变量
- 2.3 安装Tomcat并用systemctl启动
- 2.3.1 路径启动
- 2.3 2 为tomcat添加进systemd服务
- 3. Tomcat的端口及配置文件
- 3.1 Tomcat常用端口
- 3.2 主要目录、文件及其功能
- 4. 虚拟主机
- 4.1 作用
- 4.2 配置虚拟主机(基于域名)
- 4.2.1 创建 scj 和 shan 项目目录和文件
- 4.2.2 修改 Tomcat 主配置文件
- 4.2.3 重启并检测是否成功
- 5. tomcat 配置优化
- 5.1 配置文件优化
- 5.2 内核优化
- 5.3 JVM优化
1. Tomcat的相关介绍
1.1 Tomcat简介
Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器
Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
1.2 Tomcat的核心组件
- Web 容器:完成 Web 服务器的功能。
- Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
- JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。
1.2.1 Web容器
Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。
1.2.2 Servlet容器
Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性,
简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
1.2.3 JSP容器
JSP 全称 Java Server Pages
,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
1.3 Tomcat的功能组件
Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector
,和负责处理请求的容器 Container
。
其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。
每个 Tomcat 服务器可以管理多个 Service。
1.3.1 connector连接器
暴露监听端口,接收客户端发来的请求和返回响应消息给客户端
1.3.2 container容器
负责处理用户请求的业务逻辑。
由4个子容器组成(engine、host、context、wrapper),子容器之间是父子关系
1.3.2.1 子容器及其相关功能
- engine:引擎,管理多个虚拟主机,一个container只有一个engine
- host:代表一个虚拟主机
- context:代表一个 Web 应用,包含多个 Servlet 封装器
- wrapper:servlet封装器,每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能
1.4 主要作用
- 可以作为 Web 应用服务器,处理静态 Web 页面, 如 html 页面,但性能一般
- 还可以作为 Servlet/JSP 容器,处理 java 语言开发的 jsp 动态页面应用程序,这也是 tomcat 主要的应用场景
1.5 Tmocat处理请求的过程
1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。
客户端请求过程:
客户端浏览器——> connector(暴露的8080端口) ——>container(engine)——>host ——>context——>wrapper
container(engine) 根据域名发送给对应的虚拟主机
host 根据用户访问的URL路径
context 根据URL路径对应的Web应用
wrapper 根据应用程序处理业务逻辑
2. Tomcata服务部署
2.1 安装并配置JDK
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux#将所需源码包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
#rpm安装JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm
rpm -ql jdk1.8 | tail -n 1
#查看安装路径
cd /usr/java/jdk1.8.0_201-amd64/ ;ls
文件名 | 功能 |
---|---|
bin | 存放 Java 可执行文件的目录 |
include | 存放 Java 开发头文件的目录 |
jre | 存放 Java 运行时环境的目录 |
LICENSE | JDK 许可证文件 |
README.html | JDK 的直观说明文档(HTML 格式) |
src.zip | JDK 的源代码压缩包 |
THIRDPARTYLICENSEREADME.txt | 第三方许可证文档 |
COPYRIGHT | JDK 的版权信息 |
javafx-src.zip | JavaFX 源代码压缩包 |
lib | 存放 JDK 和 JavaFX 库文件的目录 |
man | 存放 JDK 手册页(man page)文件的目录 |
release | JDK 的版本信息 |
THIRDPARTYLICENSEREADME-JAVAFX.txt | JavaFX 第三方许可证文档 |
java -version
#查看目前JDK版本
2.2 设置JDK环境变量
#查看全局配置文件
vim /etc/profile
vi /etc/profile.d/java.shexport JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
#java家目录
export JRE_HOME=$JAVA_HOME/jre
#jre家目录
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#指向java工具包和环境包
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#java环境变量#linux查找可执行文件是根据PATH变量从左往右查找,找到即停止
#所以需要将安装版本的路径放在$PATH前面`CLASSPATH` 是一个环境变量,用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当 Java 程序运行时,虚拟机会搜索类路径上指定的路径,以找到所需的类文件和库文件,以便正确加载和执行程序。#CLASSPATH和 PATH是必需的,而JAVA_HOME和JRE_HOME是为了方便修改,只需要修改JAVA_HOME
source /etc/profile.d/java.sh
#调用Java脚本java -version
#查看当前JDK版本
#测试
任意Java脚本,测试是否成功
javac HelloWorld.java
#编译
java -cp . HelloWorld #执行脚本
---------------------------------热知识-------------------------------------------------------------------
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
CLASSPATH:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件。
tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到。
dt.jar:dt.jar是关于运行环境的类库,主要是swing包。
----------------------------------------------------------------------------------------------------------
2.3 安装Tomcat并用systemctl启动
2.3.1 路径启动
#解压tomcat安装包
cd /opt
tar xf apache-tomcat-9.0.16.tar.gz
#解压缩源码包
cp -r apache-tomcat-9.0.16/ /usr/local/tomcat
#将源码包目录拷贝至/usr/local/下并重命名为tomcat
#简化路径,方便管理
或
mv apache-tomcat-9.0.16 /usr/local/tomcat
#启动Tomcat的方法,省略路径
startup.sh #后台启动tomcat
catalina.sh start #后台启动tomcat
catalina.sh run #前台启动 tomcat#关闭Tomcat的方法:
shutdown.sh #关闭tomcat#查看tomcat是否启动:
ss -natp |grep 8080
2.3 2 为tomcat添加进systemd服务
#先关闭服务
/usr/local/tomcat/bin/shutdown.sh
#添加用户设置属主属组
useradd -s /sbin/nologin tomcat
chown tomcat:tomcat /usr/local/tomcat/ -R
#新建.service服务文件
vi /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
#重新加载服务,并开启,查看是否成功启动
systemctl daemon-reload
systemctl start tomcat
ss -ntap |grep 8080
或
systemctl status tomcat
浏览器访问Tomcat的默认主页 http://192.168.67.102:8080
3. Tomcat的端口及配置文件
3.1 Tomcat常用端口
8080: 默认接收 http 请求的端口
8005: 安全端口,可以关闭tomcat
8009: apache 和 tomcat 联动 AJP 协议
8443:负责处理https请求连接
3.2 主要目录、文件及其功能
目录名 | 功能 |
---|---|
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 缓存的时候会使用到 |
文件名 | 说明 |
---|---|
server.xml | 主配置文件 |
web.xml | 每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为 |
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日志系统相关的配置,可以修改日志级别和日志路径等 |
注意:配置文件对于大小写很敏感
4. 虚拟主机
4.1 作用
- 分离多个网站:通过配置虚拟主机,可以将不同的网站分开,并为每个网站指定独立的文档根目录、日志文件、访问日志等,以避免网站之间的资源冲突和混乱。
- 实现多个域名指向不同的网站:通过虚拟主机,可以将多个域名指向同一台服务器的不同网站,实现一个服务器对应多个域名,提高服务器的利用率和灵活性。
- 隔离与保护:每个虚拟主机都是独立的,网站之间不会相互干扰,如果一个网站出现问题,不会影响其他网站的正常运行。
- 提供定制化配置:通过虚拟主机配置,可以为每个网站提供独立的配置选项,如SSL证书、访问权限、反向代理等,以满足不同网站的需求。
- 简化管理和维护:通过虚拟主机,可以利用Tomcat提供的管理工具(如Tomcat Manager)对每个虚拟主机进行独立的管理和监控,方便统一管理多个网站
4.2 配置虚拟主机(基于域名)
新增两个域名 www.scj.com 和 www.shan.com,希望通过这两个域名访问到不同的项目内容。
4.2.1 创建 scj 和 shan 项目目录和文件
#创建 scj 和 shan 项目目录与文件
cd /usr/local/tomcat/webapps
mkdir scj shan
#自定义主页内容
echo "this is scj web" > scj/index.html
echo "this is shan web" > shan/index.html
4.2.2 修改 Tomcat 主配置文件
#修改主配置文件
vim /usr/local/tomcat/conf/server.xml
约164行位置插入
-----------------------------------------------------<Host name="www.scj.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/scj"path="" reloadable="true" /></Host><Host name="www.shan.com" appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/shan"path="" reloadable="true" /></Host>###################释义#########
Host name :主机名appBase :Tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webappsunpackWARs :是否解压war包autoDeploy :指示Tomcat运行时,如有新的WEB应用是否允许自动部署xmlValidation :是否验证xml文件执行有效性检验的标志xmlNamespaceAware :是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验appBase :WEB应用的目录path :设置访问的URI为WEB应用的根目录reloadable :是否在程序有改动时重新载入
4.2.3 重启并检测是否成功
#服务机关闭防火墙并重启服务
systemctl restart tomcat
systemctl stop firewalld
setenforce 0
#前往客户机,更改/etc/hosts文件并关闭防火墙
echo "192.168.67.102 www.scj.com www.shan.com" >> /etc/hosts
systemctl stop firewalld
setenforce 0
#在客户机中测试
curl http://www.scj.com:8080
curl http://www.shan.com:8080
5. tomcat 配置优化
5.1 配置文件优化
maxThreads(最大线程数/并发)
processorCache(进程缓冲)
acceptCount(等待队列数)
enableLookups(关闭DNS反向解析)
URIEncoding(网页字符集编码UTF-8)
maxKeepAliveRequests(长连接最大请求数)
connectionTimeout(连接超时时间)
compression(开启页面压缩)
5.2 内核优化
#/etc/security/limits.conf
nofile nproc memlock
#/etc/sysctl.conf
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.ip_local_port_range=1024 65535
5.3 JVM优化
#在 catalina.sh 中设置 JAVA_OPTS 参数JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m"-server #表示启用JDK的Server模式,实现在多核服务器性能更佳
-Xms2048m -Xmx2048m #设置JVM堆内存初始值和最大最一样大,一般设置为物理内存的 1/2
-XX:PermSize=1024m -XX:MaxPermSize=1024m #设置永久代(非堆内存)初始值和最大最一样大,一般设置为物理内存的 1/4#初始值和最大最设置一样大的原因:可以减少GC次数和内存伸缩带来的频繁内存申请,从而减少一定的系统开销。-Xmn #设置JVM堆内存新生代的大小,一般设置为堆内存的 3/8-XX:ParallelGCThreads=2 #设置并行GC(垃圾回收)线程数,提高垃圾回收效率
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof 设#置进程发生OOM异常退出会进行DUMP备份
-XX:+DisableExplicitGC #禁止调用System.gc()方法,防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低