Tomcat
1.tomcat安装
tomcat版本:apache-tomcat-9.0.52.tar.gz
jdk版本:jdk-16.0.2_linux-x64_bin.tar.gz
1.1 jdk安装
#将jdk解压到/usr/local目录下
[root@node2 ~]# tar -xf jdk-16.0.2_linux-x64_bin.tar.gz -C /usr/local/
#将文件夹重新命名
[root@node2 ~]# mv /usr/local/jdk-16.0.2 /usr/local/jdk
#将变量写入/etc/profile文件中
[root@node2 ~]# cat >> /etc/profile << EOF
> export JAVA_HOME=/usr/local/jdk
> export PATH=.:$JAVA_HOME/bin:$PATH
> export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
> EOF
#使用source /etc/profile 命令使环境变量生效
[root@node2 ~]# source /etc/profile
#查看jdk是否安装转成功
[root@node2 ~]# java -version
java version "16.0.2" 2021-07-20
Java(TM) SE Runtime Environment (build 16.0.2+7-67)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)
1.2 tomcat 安装
#将tomcat安装包解压到/usrlocal/目录下 [root@node2 ~]# tar -xf apache-tomcat-9.0.52.tar.gz -C /usr/local/
#将apache-tomcat-9.0.52重命名为tomcat
[root@web-03 local]# mv apache-tomcat-9.0.52/ tomcat
#启动tomcat
[root@web-03 local]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
配置tomcat自启动的service文件
[Unit]
Description=tomcat
After=network-online
Wants=network-online.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=CATALINA_BASE=/usr/local/tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
#执行systemctl daemon-reload
#启动systemctl start tomcat
访问Ip:8080 查看界面
显示此界面即安装成功
tomcat的文件结构和组成
目录 | 说明 |
bin | 服务启动、停止等相关 |
conf | 配置问价 |
lib | 库目录 |
logs | 日志目录 |
webapps | 应用程序,应用部署目录 |
work | jsp编译后的结果文件,建议提前预热访问 |
conf下的配置文件
文件名 | 说明 |
server.xml | 主配置文件 |
web.xml |
每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/ 目录中,此文件为所有的webapps提供默认部署相关的配置 |
context.xml | 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自己专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中 |
tomcat-users.xml | 用户认证的账号和密码文件 |
catalina.policy |
当使用security选项启动tomcat时,用于为tomcat设置安全策略 |
catalina.properties |
Tomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数 |
logging.properties |
Tomcat 日志系统相关的配置,可以修改日志级别和日志路径等 |
上下文描述符文件位于:
$CATALINA_BASE为tomcat安装的目录
1.$CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml 2.$CATALINA_BASE/webapps/[webappname]/META-INF/context.xml
1.3 tomcat 组件
顶级组件
Server,代表整个tomcat容器,一台主机可以启动多个tomcat实例,需要确保端口不冲突
服务类组件
Service,组织Engine和Connector,里面只能包含一个Engine
连接器组件
Connector.有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于tcp的二进制通讯协议
容器类
Engine、Host(虚拟主机)、Context都是容器类组件,可以嵌入其他组件,内部配置如何运行应用程序
内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。
集群类组件
listener、cluster
名称 | 说明 |
Server | 服务器,tomcat运行的进程实例,一个Server中可以有多个Service,但通常只有一个 |
Service | 服务,用来组织Engine和Connector的关系,一个Service中只有一个Engine |
Connector | 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine |
Engine | 用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
Host | 虚拟主机 |
Context | 应用的上下文,配置特定url路径映射和目录的映射关系:url=>directory |
1.4 核心组件
tomcat 启动一个Server进程。可以启动多个Server,但一般只启动一个
创建一个Service提供服务。可以创建多个Service,但一般页支创建一个,每个Service中,是Engine和其他连接器Connector的关联配置
可以为这个Server提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同连接请求或响应
Service内部定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host
Host定义虚拟主机,虚拟主机有name名称,通过名称匹配
Context定义应用程序单独的路径映射和配置
多个组件关系如下:
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> </Engine> </Service> </Server>
1.5 tomcat处理请求的过程
假设来自客户端的请求为:http://localhost:8080/yang/inex.jsp
浏览器的请求被发送到服务端8080,tomcat监听在此端口上。通过监听的HTTP/1.1Connector获得此请求
Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
Engine获得请求locahost:8080/yang/index.jsp,匹配它所有虚拟主机Host
Engine匹配到名为localhost的Host,即使匹配不到也把该请求交给该Host处理,因为该Host被定义为该Engine的默认主机
localhost Host获得请求/index.jsp 匹配它所拥有的所有Context
Host匹配到路径为/yang的Context
path=/yang的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
Context匹配到URL PATTERN为*.jsp的servlet,对应于jspServlet类构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
Context 把执行完了之后的HttpServletResponse对象返回给Host
Host 把HttpDervletResponse对象返回给Engine
Engine把HttpServletResponse对象返回给Connector
Connector把HttpServletResponse对象返回给浏览器端
1.6 tomcat应用部署
tomcat中默认的网站根目录是$CATALINA_BASE/webapps/
在tomcat的webapps目录中,有个非常特殊的目录ROOT,他就是网站的根目录
假设要部署应用eshop、forum,将eshop解压后的文件放到这个$CATALINA_BASE/webapps/ROOT中
forum解压后文件都放在$CATALINA_BASE/webapps/forum目录下
最终网站的链接关系如下
http://localhost/ 对应于eshop应用,即$CATALINA_BASE/webapps/ROOT目录
http://localhost/forum/ 对应于forum应用,即$CATALINA_BASE/webapps/forum/
如果同时存在$CATALINA_BASE/webapps/ROOT/forum/,仍以$CATALINA_BASE/webapps/forum优先生效
每一个虚拟主机的目录都可以使用appBase配置自己的站点目录,里面都可以使用appBase目录下的ROOT目录作为主站目录
1.7 JSP WEBAPP 目录结构
主页配置:默认按以下顺序查找主页文件index.html,index.htm,index.php
WEB-INF/:当前webapp的私有资源路径,通常存储当前应用的web.xml和context.xml配置文件
META-INF/:类似于WEB-INF也是配置信息,浏览器无法访问
classes/: 类文件,当前webapp需要的类
lib/:当前应用用来的jar包
修改默认主配置文件
/usr/local/tomcat/webapps/ROOT/下添加一个index.html文件
#将tomcat重启之后,用curl 命令进行访问
[root@web-03 ROOT]# echo "tomcat index.html" >> index.html
[root@web-03 ROOT]# curl localhost:8080
tomcat index.html
#web.xml首页访问顺序如下
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
修改webapp的专用配置文件
将conf/web.xml中的<welcome-file-list>标签内容,复制到/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中
cat /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" metadata-complete="true"> <display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
配置规则
webApp的专有配置优先于系统的全局配置
修改系统的全局配置文件,需要重新启动服务生效
修改 webApp的专有配置,无需重启即可生效
应用通常打包为war格式,应用部署到tomcat的webapps目录下,还可以自动展开
server.xml的文件配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
1.8 tomcat常见配置详解
conf/server.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
8005 是tomcat的管理端口,默认监听在127.0.0.1,无需验证,就可以发送SHUTDOWN这个字符串,tomcat接收到后就会关闭此Server
建议禁用,改SHUTDOWN为一串猜不出的字符串例如:
<Server port="8005" shutdown="44ba3c71d57f494992641b258b965f28">
conf/server.xml中可以配置service,connector,Engine,Host等
service配置:一般情况下,一个Server实例配置一个Service,name属性相当于Service的ID
例:<Service name="Catalina">
连接器配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
#redirectPort,如果访问HTTPS协议,自动转向这个连接器,大多数时候,tomcat不回开启https
引擎配置:
<Engine name="Catalina" defaultHost="localhost">
defaultHost 配置
defaultHost指向内部定义某虚拟主机。缺省主机可以改动,默认localhost <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">