Tomcat由一系列的组件构成,其中核心的组件有三个:
因此Tomcat 是Web应用服务器,也是一个Servlet/JSP 容器。Tomeat 作为Servlet 容器,负贵处理客户的. jsp动态页面的请求,把请求传送给servlet, 并将servlet的响应传送回给客户。
什么是servlet?
什么是JSP?
Tomcat功能组件结构:
Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container,其中连接器和容器相辅相成,一起构成了基本的web服务Service。每个Tomcat服务器可以管理多个Service
Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
Container:负责对内处理业务逻辑。其内部由Engine、 Host、Context和Wrapper四个容器组成,用于管理和调用_Servlet 相关逻辑。
Service:对外提供的Web服务。主要包含Connector 和Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个Service,且各service 之间相互独立。
Container结构分析:
每个Service 会包含一个Container 容器。在Container 内部包含了4个子容器:
4个子容器的作用分别是:
Engine、Host.、Context和wrapper, 这四个容器之间属于父子关系。容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个Web应用。每个Web应用会有多个Servlet 封装器。
Tomcat请求过程:,
详解:
假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser
tomcat端口
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
cd /opt/
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm ##需要用到的软件包
cd /opt/
rpm -ivh jdk-8u201-linux-x64.rpm #安装一个新的RPM软件包
rpm -qpl jdk-8u201-linux-x64.rpm #查询指定软件包的文件列表
java -version #查看安装的java版本信息
cd /usr/java/jdk1.8.0_201-amd64/ ##jdk安装目录
##设置jdk环境变量
cd /etc/profile.d/
vim java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile.d/java.sh ##启动java.sh脚本
java -version
##验证java是否安装成功
vim hello.java
public class hello{
public static void mian (String[] args) {
System.out.println("hello");
}
}
javac hello.java
cd /opt/
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cd /usr/local/tomcat/bin
./startup.sh ##后台运行tomcat
./shutdown.sh ##后台关闭tomcat
./catalina.sh start ##后台运行tomcat
./catalina.sh run ##前台运行romcat,会占用窗口
netstat -lntp | grep :8080
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload #重新加载
systemctl start tomcat #启动tomcat服务
netstat -lntp | grep :8080
优化tomcat启动速度
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat/中主要目录说明:
目录名称 | 功能作用 |
---|---|
bin | 存放启动和关闭 tomcat的脚本文件,如catalina.sh、startup.sh、shutdown.sh |
conf | 存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml |
lib | 存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动 |
logs | 存放 Tomcat 执行时的日志 |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放 Tomcat 默认的 Web 应用项目资源的目录 |
work | Tomcat 的工作目录,存放 Web 应用代码生成和编译文件 |
##创建不同域名的目录和文件
cd /usr/local/tomcat/webapps/
mkdir kgc
mkdir benet
echo "this is kgc tomcat web\!" > ./kgc/index.jsp
echo "this is benet tomcat web\!" > ./benet/index.jsp
##修改tomcat 主配置文件 server.xml
cd /usr/local/tomcat/conf
vim server.xml
--165行前--插入
修改Host配置段
关键词 | 功能 |
---|---|
name | 主机名 |
appBase | Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps |
unpackWARs | 在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true |
autoDeploy | 在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true |
xmlValidation | 是否验证xml文件执行有效性检验的标志 |
xmlNamespaceAware | 是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验 |
Context docBase | 相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径 |
path | 相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / |
reloadable | 是否允许重新加载此context相关的Web应用程序的类;默认为false |
systemctl stop tomcat
systemctl start tomcat
netstat -lntp | grep :8080
systemctl disable --now firewalld
setenforce 0
##采用另外一种方法安装jdk
cd /opt/
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz
tar xf apache-tomcat-9.0.16.tar.gz
tar xf jdk-8u91-linux-x64.tar.gz
mv jdk1.8.0_91 /usr/local/
mkdir /usr/local/tomcat
cp -r apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -r apache-tomcat-9.0.16 /usr/local/tomcat/tomcat2
##修改java中的配置文件
vim /etc/profile
==在最后添加==
export JAVA_HOME=/usr/local/jjdk1.8.0_91
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile
##配置tomcat环境变量
vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
source /etc/profile.d/tomcat.sh
##修改 tomcat2 中的server.xml文件,要求各tomcat实例配置不能有重复的端口号
cd /usr/local/tomcat/tomcat2/conf
vim server.xml
#22行,修改Server prot,默认为8005 -> 修改为8006
#69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8081
修改为8010
##修改 tomcat1 实例中的 startup.sh 文件
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
##修改 tomcat1 实例中的 shutdown.sh 文件
vim /usr/local/tomcat/tomcat1/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
##修改 tomcat2 实例中的 startup.sh 文件
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
##修改 tomcat2 实例中的 shutdown.sh 文件
vim /usr/local/tomcat/tomcat2/bin/startup.sh
# ----------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
##启动两个服务
/usr/local/tomcat/tomcat1/bin/startup.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
netstat -natp | grep java