Tomcat 实战指南:从部署到配置,一文搞定!
Tomcat 安装部署
JVM、JRE、JDK 简介
JVM(JavaVirtualMachine-Java虚拟机)
- JVM就是我们耳熟能详的<Java虚拟机>,它就相当于一台<虚拟机>,它的核心任务就是实现<跨平台性>。
- JVM主要功能:
- 实现:跨平台性
- 解析:Java编译生成的<.class文件>(操作系统不能直接识别.class文件,必须借助JVM来解析)
- 承载:Java应用程序,例如:在多实例tomcat应用场景中,就是在一台<JVM虚拟机>中运行了多个<Tomcat实例>
JRE(JavaRuntimeEnvironment-Java运行时)
- JRE就是<JVM + .class基础类文件>的集合,从而最终为<Java应用程序>提供一个<Java运行时环境>。
- 当我们只想运行一个<java应用程序>,而不是做<Java开发>,则仅仅只需安装JRE即可,无需安装JDK。
JDK(JavaDevelopmentKit-Java开发工具包)
JDK是一个Java开发工具包,它提供了完整的<开发、编译、运行、调试 … 等>开发环境。
它包含着:
- JRE(即:JVM + .class基础类文件)
- JAVA编译器(即:将java文件编译成为.class类文件) … 等等<开发所需的完整组件>
图解:JVM、JRE、JDK、Tomcat之间的关系
Tomcat概述
Tomcat概述
★ Tomcat官网:Apache Tomcat® - Welcome!
Tomcat是Apache 软件基金会(Apache Software Foundation)的核心开源项目。
Tomcat技术先进、性能稳定,开源免费,深受Java开发者的喜爱,是开发和调试JSP程序的首选,成为目前比较流行的<Web应用服务器>。
- Nginx 主要用于:<HTML静态网页>。
- Apache Httpd 主要用于:<HTML静态网页>。
- Apache Tomcat 主要用于:<Java类的动态网站>,Apache Tomcat 也可处理<HTML静态网页>,但是性能不如<Apache和Nginx>。
Tomcat的应用场景
- 我们通常采用<Httpd服务器 或 Nginx服务器>作为<前端服务器>,采用<Tomcat服务器>作为<后端服务器>。
- <前端服务器>直接面向用户,针对<HTML(超文本标签语言)静态页面>的<访问请求>,<前端服务器>可以直接予以响应
- 针对<JSP动态页面>的<访问请求>,<前端服务器>则采用反向代理的方式,转发给<后端服务器>来处理。
安装Tomcat 实例
了解:Tomcat与JAVA之间的关系
- Tomcat必须运行在JRE(JAVA运行时)环境中,因此在安装Tomcat之前,必须事先安装JRE。
- JAVA官方下载:https://www.oracle.com/java/technologies/downloads/archive/
- 针对:<Tomcat 5.5及之前的低版本>
- <Tomcat服务端>:必须安装,因为JDK提供了<Java编译器>。
- 针对:<Tomcat 6.0及之后的高版本>
- 在<开发环境>中:<Tomcat服务端>必须安装。
- 在<生产环境>中:<Tomcat服务端>仅须安装<JRE(server-jre)>即可,因为Tomcat已经集成了<Java编译器>。
- 了解:Tomcat与JAVA之间的<版本对应关系>
https://tomcat.apache.org/whichversion.html
环境说明:
| 节点 | 角色 | IP地址 | 操作系统 | 硬件规格 |
|---|---|---|---|---|
| tomcat | Tomcat动态网站服务器 | 192.168.19.128/24 | Rocky Linux 9.5 | 1 vCPU、1GB 内存 |
安装:Tomcat实例
二进制安装:Tomat11
- 下载:Tomcat 11+ https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.24/bin/apache-tomcat-11.0.24.tar.gz
- 下载: jdk17+ https://download.java.net/openjdk/jdk17.0.0.1/ri/openjdk-17.0.0.1+2_linux-x64_bin.tar.gz
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.24/bin/apache-tomcat-11.0.24.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jre/x64/linux/OpenJDK17U-jre_x64_linux_hotspot.tar.gz
- 安装:JRE 17+
tar -axf OpenJDK17U-jre_x64_linux_hotspot_17.0.19_10.tar.gz -C /opt/
mv /opt/jdk-17.0.19+10-jre/ /opt/jre-17
- 设置:针对 JAVA 的用户登录环境变量
cat > /etc/profile.d/java.sh <<EOF
export PATH=/opt/jre-17/bin/:\$PATH
export JAVA_HOME="/opt/jre-17"
EOF
source /etc/profile.d/java.sh
java -version
- 安装:Tomcat 11+
tar -axf apache-tomcat-11.0.24.tar.gz -C /opt
mv /opt/apache-tomcat-11.0.24 /opt/tomcat-11
- 设置:Tomcat运行时所需的<setenv.sh环境变量脚本文件>
- <Tomcat实例>需要的<环境变量>:
- 环境变量1:CATALINA_HOME(必须) 用于设置:<Tomcat二进制发行版>的<安装目录>。
- 环境变量2:CATALINA_BASE(可选) 用于设置:<Tomcat二进制发行版>的<工作目录>。
- 每个<工作目录>对应着一个<Tomcat实例>。
- 默认值为 CATALINA_BASE=$CATALINA_HOME。
- 环境变量3:CATALINA_PID(必须) 用于设置:<Tomcat二进制发行版>的<PID进程文件>。
- 环境变量4:JRE_HOME或JAVA_HOME 用于指定:Java运行时环境或用于启动Tomcat的Java开发工具包的位置。
- JRE_HOME 用于指定:JRE的位置。
- JAVA_HOME 用于指定:JDK的位置。
- 必须二选一,如果JRE_HOME和JAVA_HOME同时使用,则JRE_HOME最终生效。
cat > /opt/tomcat-11/bin/setenv.sh <<EOF
export JRE_HOME="/opt/jre-17"
export CATALINA_HOME="/opt/tomcat-11"
export CATALINA_BASE="\$CATALINA_HOME"
export CATALINA_PID="\$CATALINA_BASE/tomcat.pid"
EOF
- 启动:Tomcat 11+
- 启动:Tomcat实例
echo "/opt/tomcat-11/bin/startup.sh" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
/opt/tomcat-11/bin/startup.sh
- 停止:Tomcat实例
/opt/tomcat-11/bin/shutdown.sh
- 配置:防火墙
netstat -tunlp | grep java
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
- 查看:Tomcat目录结构
ll /opt/tomcat-11
- 设置:针对Tomcat的<用户登录环境变量>,方便执行管理命令
cat > /etc/profile.d/tomcat.sh <<EOF
export CATALINA_HOME="/opt/tomcat-11"
export CATALINA_BASE="\$CATALINA_HOME"
export PATH="\$CATALINA_HOME/bin:$PATH"
EOF
source /etc/profile.d/tomcat.sh
- 访问:Tomcat首页
YUM安装:Tomcat 9
- 安装:JRE 17+ 和 Tomcat 9
yum install -y java-17-openjdk* tomcat* --disablerepo=epel
–disablerepo=epel 禁用:EPEL源,防止版本冲突
- 启停:Tomcat 9
systemctl enable tomcat ## 设置:开机自启动
systemctl start tomcat ## 当前:立即启动
systemctl status tomcat ## 查看:启动状态
systemctl restart tomcat ## 当前:立即重启
systemctl stop tomcat ## 当前:立即停止
- 配置:防火墙
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
- 禁用:SELinux安全上下文机制
if ! [[ $(getenforce) == "Disabled" ]]; then
sed -r -i '/^[ \t]*SELINUX=/c\SELINUX=disabled' /etc/selinux/config
reboot
fi
- 查看:Tomcat目录结构
ls -l /usr/share/tomcat # 查看:YUM安装的<Tomcat实例的目录结构>
- 设置:针对Tomcat的<用户登录环境变量>,方便执行管理命令
cat > /etc/profile.d/tomcat.sh <<EOF
export JAVA_HOME="/usr/lib/jvm/java"
export CATALINA_HOME="/usr/share/tomcat"
export CATALINA_BASE="\$CATALINA_HOME"
EOF
source /etc/profile.d/tomcat.sh
- 访问:Tomcat首页
Tomcat端口说明
8080/tcp 负责侦听:http:// ## <HTTP协议>的<访问请求>
8443/tcp 负责侦听:https:// ## <HTTP+SSL协议>的<访问请求>
8009/tcp 负责侦听:AJP:// ## <AJP协议>的<访问请求>
- 通常用于:与<其他 HTTP 服务器,如 httpd>进行<业务整合>,实现彼此之间的<通信>
<Tomcat 实例>可以采用<AJP 协议>来接收并响应<其他 HTTP 服务器>的<动态资源请求>
- 安全建议:不要对<客户端>开放这个<8009/tcp 端口>,仅对<指定的其他 httpd 服务器>开放
8005/tcp 负责侦听:关闭 tomcat 的<SHUTDOWN 命令>,从而实现<远程关闭 Tomcat>
- 默认仅侦听:127.0.0.1:8005 套接字
- 关闭的方法:
which telnet || yum install -y telnet
telnet 127.0.0.1 8005 ## 本地连接:8005端口
SHUTDOWN ## 本地执行:关闭指令(大小写敏感)
Tomcat管理性访问控制
客户端IP-管理性-访问控制
★ 注意:
- 在YUM安装中 ,默认:允许<任意客户端IP的访问>。
- 在二进制安装中,默认:拒绝<任意客户端IP的访问>,仅允许<127.0.0.1的访问>。
- 配置允许:访问<Host Manager虚拟主机管理>的<客户端IP地址> ◀ 支持使用:正则表达式
cat $CATALINA_BASE/webapps/host-manager/META-INF/context.xml
configFile="$CATALINA_BASE/webapps/host-manager/META-INF/context.xml"
sed -i -r 's/(^\s*allow=).*/\1"0.0.0.0\/0,::\/0" \/>/' $configFile
cat $configFile
(2) 配置允许:访问<Manager APP应用发布管理、Server Status服务器状态查看>的<客户端IP地址> ◀ 支持使用:正则表达式
configFile="$CATALINA_BASE/webapps/manager/META-INF/context.xml"
sed -i -r 's/(^\s*allow=).*/\1"0.0.0.0\/0,::\/0" \/>/' $configFile
cat $configFile
(3) 配置允许:访问<Documentation和Configuration帮助文档>的<客户端IP地址控制> ◀ 支持使用:正则表达式
configFile="$CATALINA_BASE/webapps/docs/META-INF/context.xml"
sed -i -r 's/(^\s*allow=).*/\1"0.0.0.0\/0,::\/0" \/>/' $configFile
cat $configFile
(4) 配置允许:访问<Examples示例文件>的<客户端IP地址> ◀ 支持使用:正则表达式
configFile="$CATALINA_BASE/webapps/examples/META-INF/context.xml"
sed -i -r 's/(^\s*allow=).*/\1"0.0.0.0\/0,::\/0" \/>/' $configFile
cat $configFile
- 用户角色-管理性-访问控制
- Tomcat的<HTML接口>采用了<CSRF跨站域请求伪造>保护机制,从而防止应<CSRF漏洞>而产生冒名顶替的网络攻击。
- 注意:
- 在YUM安装中,默认未授权:<用户角色>的<管理性访问控制>,对应的配置文件为 $CATALINA_BASE/conf/tomcat-users.xml。
- 在源码安装中,默认未授权:<用户角色>的<管理性访问控制>,对应的配置文件为 $CATALINA_BASE/conf/tomcat-users.xml。
- 用户角色说明:
- manager-status 角色:可访问【Server Status 服务器状态查看页面】
- manager-gui 角色:可访问【Manager APP应用发布管理页面】和【Server Status 服务器状态查看页面】
- manager-script 角色:仅可访问【文本界面】和【Server Status 服务器状态查看页面】
- manager-jmx 角色:仅可访问【JMX代理】和【Server Status 服务器状态查看页面
注意:该【manager-gui】不能和【manager-script】或【manager-jmx】在一起使用
- admin-gui 角色:可访问【Host Manager虚拟主机管理页面】
- admin-script 角色:仅可访问【文本界面】
注意:该【admin-gui】不能和【admin-script】在一起使用
- 授权
adminName='admin'
adminPassword='a123456!'
cat > $CATALINA_BASE/conf/tomcat-users.xml <<EOF
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user name="$adminName" password="$adminPassword" roles="manager-gui,admin-gui" />
</tomcat-users>
EOF
- 重启
systemctl restart tomcat # ────针对:YUM 安装
/opt/tomcat8/bin/shutdown.sh # 先停止┬ 针对:二进制安装
/opt/tomcat8/bin/startup.sh # 后启动┘
Tomcat 配置文件解析
了解:Tomcat与 Servlet
- Tomcat 是:运行在JRE中的一个<进程实例>,也称之为<Web容器>。
- Servlet 是:运行在<WebAPP应用>中的<服务器端Java程序>,每一个Servlet用于处理一类业务逻辑,如:登录、注册、购物车。
- Tomcat与Servlet关系图:
了解:Tomcat目录结构
which tree || yum install -y tree
tree -L 1 -N /opt/tomcat-11
了解:Tomcat配置文件
tree -N /opt/tomcat-11/conf
- $CATALINA_BASE/conf/catalina.policy 配置文件
- 用于定义:<Tomcat实例>中<Java Class类>的<安全策略>
- 它包含着:系统代码、Web应用程序、Catalina本身的<权限定义>
- $CATALINA_BASE/conf/catalina.properties 配置文件
- 用于定义:<Tomcat实例>中<Java Class类>的<标准Java属性>
- 它包含着:<安全设置>、<类加载设置>、<类扫描设置>、和<字符串缓存设置>四大块信息。
- $CATALINA_BASE/conf/logging.properties 配置文件
- 用于定义:<Tomcat实例>内置的<日志记录功能>
- 它包含着:<阈值>和<日志位置>等内容
- $CATALINA_BASE/conf/context.xml 配置文件
- 用于定义:应用于的<全局性上下文对象>,例如:定义虚拟目录、配置session会话保持等等。
- 它的特点:Tomcat将会定时查看,一旦变化,自动重载。
- $CATALINA_BASE/conf/server.xml 配置文件(很重要)
- 用于定义:<Tomcat Servlet/JSP容器>的行为,这是<Tomcat实例>的<主要配置文件>
它使用<JavaServlet规范中指定的分层语法>来配置<Catalina的初始状态>以及<Tomcat引导和构建各种组件的顺序>。 - 它的特点:不能动态重载,一旦变化,必须手动重启。
- 用于定义:<Tomcat Servlet/JSP容器>的行为,这是<Tomcat实例>的<主要配置文件>
- $CATALINA_BASE/conf/tomcat-users.xml
- 用于定义:<Realm数据库>需要使用的<用户、密码、角色>信息,从而实现<用户认证和授权>。
- $CATALINA_BASE/conf/web.xml配置文件
- 用于定义:应用于的<全局性Servlet容器默认配置>。
- 它包含着:Servlet、Filter、Session、MIME、Welcome等等设置。
了解:server.xml(运维人员关注)
- server.xml配置:<Tomcat Servlet/JSP容器>的行为,<运维人员>会关注<server.xml配置文件>。
- server.xml特点:不能动态重载,一旦变化,必须手动重启。
- server.xml包含如下<常用元素>:
- Server 根元素
- Listener 监听器元素
- GlobalNamingResources 全局命名资源元素
- Service 服务元素
- Connector 连接器元素
- Engine 引擎元素
- Realm 领域元素
- Host 虚拟主机元素
- Valve 阀门元素
- 运作机制:
Server根元素
- <Server根标签>:
- 它是:是一个<顶级标签>,一个<Server根标签>就代表着一个<Tomcat实例>,也称为<Catalina servlet容器 或 Catalina实例>。
- 它是:整个server.xml的<top根元素>
在一个<Server服务器标签>中,可以包含:一个或多个<Service服务标签>
<Server port="8005" shutdown="SHUTDOWN">
port 属性:定义<SHUTDOWN 命令>的<侦听端口>
shutdown 属性:定义<SHUTDOWN 命令>
Listener 监听器元素
- <Listener监听器标签>:
- 它负责:监听<特定事件>,当<特定事件>触发时,<Listener监听器>会捕捉到该<特定事件>,并做出相应处理。
- <Listener监听器>通常用于:Tomcat的<启动和关闭>过程。
<!-- org.apache.catalina.startup.VersionLoggerListener(启动过程监听器)
应是:第一个 Listener 监听器。
负责:监听 tomcat 启动过程,并会记录 Tomcat、Java 和操作系统信息。
-->
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- org.apache.catalina.security.SecurityListener(安全检查监听器)
负责:在 Tomcat 启动时,执行许多安全检查,如果安检失败,则阻止 Tomcat 启动。
默认未启用。
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!-- org.apache.catalina.core.AprLifecycleListener(APR/native 本机库监听器)
负责:检查 APR/native 本地库是否存在,并加载 APR/native 本地库
-->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- org.apache.catalina.core.JreMemoryLeakPreventionListener(预防 JRE 内存泄漏监听器)
org.apache.catalina.mbeans.GlobalResourcesLifecycleListener(全局资源生命周期侦听器)
org.apache.catalina.core.ThreadLocalLeakPreventionListener(线程池中线程自动续订复用监听器)
以上三个监听器,负责:防止由于使用<特定的 java/javax API>而导致的<内存泄漏>。
-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
GlobalNamingResources全局命名资源元素
<GlobalNamingResources 全局命名资源标签>:
- 定义:整个的、单独的<全局性JNDI资源>
- JNDI 它是:Java命名及目录接口(Java Naming and Directory Interface)
- 提供:统一的<客户端API接口>,例如:数据库连接。
- JNDI 它是:Java命名及目录接口(Java Naming and Directory Interface)
<GlobalNamingResources>
<!-- 默认配置:
♦ 通过<org.apache.catalina.users.MemoryUserDatabaseFactory 类>来加载<指定的 conf/tomcat-users.xml 配置文件>,
从而在内存中创建一个<MemoryUserDatabase 数据库对象实例>,进而执行<用户和角色验证>。
name 属性:定义<全局命名资源>的<资源对象名>
type 属性:定义<全局命名资源>的<Java 类名>
org.apache.catalina.UserDatabase 是<Tomcat Realm 数据库接口>的一种实现,不适用于大规模生产。
org.apache.catalina.UserDatabase 可以从<conf/tomcat-users.xml 配置文件>加载<用户及角色>信息。
针对此处定义<Tomcat Realm 数据库接口资源对象>的,我们可以通过<Realm 元素>来加以调用。
description 属性:定义<描述性信息>
factory 属性:定义<创建对象的工厂>
这里配置是:采用名为<org.apache.catalina.users.MemoryUserDatabaseFactory>的工厂,依据名为
<org.apache.catalina.UserDatabase 类>,来创建一个<Tomcat Realm 数据库实例对象>。
pathname 属性:定义<Tomcat Realm 数据库实例对象>需加载的<conf/tomcat-users.xml 配置文件>
-->
<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服务元素
- 定义:<所有WebApp应用程序>可共享使用的和,从而实现<完整的功能模块>。
- 会自动在<conf 目录>和<work 目录>中,创建一个<Service 服务标签名称>的<子目录>
- 每一个<Service 服务标签>:可以关联着一个或多个<Connector 连接器标签>
- 每一个<Service 服务标签>:仅可关联着一个<唯一的Engine引擎标签>
- <name 属性>:可自定义名称,但须确保<同一个Server服务器标签>中的<Service 名称唯一性>
- 一个<Server 元素>中可以包含:一个或多个<Service 元素>。
<!-
name 属性: 定义<Service 元素>的<标签名>
className 属性: 指定需要使用的<class implementation 指定名称的类实现>
如果未指定,将默认采用<standard implementation 标准的类实现>
-->
<Service name="Catalina">
Connector连接器元素
- <Connector 连接器标签>:
- 定义:<具体的连接器>,用于侦听<客户端>的<接口参数>,如:端口、协议、连接超时、重定向端口。
<!-- 定义:基于 HTTP/1.1 协议的连接器(非 SSL),侦听 8080/tcp 端口 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000" <!-- 设置:GET 和 POST 请求中的最大参数个数 -->
/>
<!-- 定义:需要共享使用:哪一个<Executor 执行器>所定义的<共享线程池>,默认情况下,并未定义<Executor 执行器> -->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000" <!-- 设置:GET 和 POST 请求中的最大参数个数 -->
/>
-->
<!-- 定义:基于org.apache.coyote.http11.Http11NioProtocol 协议的连接器(SSL),侦听8443/tcp 端口-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- 定义:基于org.apache.coyote.http11.Http11AprProtocol 协议的连接器(SSL),侦听8443/tcp SSL 端口-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
<!-- 定义:基于AJP 协议的连接器,侦听8009/tcp 端口-->
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
maxParameterCount="1000"
/>
-->
Engine 引擎元素
- <Engine引擎标签>:
- 定义:<处理每个请求>的<入口点>,<引擎名称>是<Catalina 卡特琳娜>
- 负责分析<请求中的HTTP报头>,然后传递给<Host 虚拟主机>
- 在一个<Engine 引擎标签 >中,可以包含:多个<Host 主机标签>,但须确保<Host 名称唯一性>
- 定义:<处理每个请求>的<入口点>,<引擎名称>是<Catalina 卡特琳娜>
- 注意:每一个<Service 服务标签>仅可关联一个唯一性的<Engine 引擎标签>。
<!--
name 属性:定义<Engine 元素>的<标签名>
defaultHost 属性:定义接收并响应<客户端请求>的<默认 Host 虚拟主机>,注意:该<Host 虚拟主机名>必须已定义
jvmRoute 属性:针对基于 AJP 协议的<负载均衡>,定义作为<后端节点>的<本机节点名称>
-->
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost">
Realm元素
- <Realm 领域标签>:
- 定义:用于<用户认证和授权>的<数据库>,<数据库>包含着用户名、密码、角色。
- 通过不同的<realm 实现>,我们可以将<Tomcat 实例>集成到不同的<身份验证>信息环境中,从而保障<Tomcat 实例>的安全性。
- 我们可以在<Engine、Host 或 context>中定义<Realm 标签>。
- 定义:用于<用户认证和授权>的<数据库>,<数据库>包含着用户名、密码、角色。
<!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack -->
<!-- 使用LockOutRealm(锁定区域)来防止试图通过暴力攻击来猜测用户密码-->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- 通过引用<GlobalNamingResources 元素>中定义的<名为UserDatabase 的Resource 资源对象>,来启用<用户认证和授权> -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
Host虚拟主机元素
- : - 定义: - 一个中可以包含一个或多个。
<!--
name 属性:name="localhost",可以是localhost 或FQDN 名
<Tomcat 实例>会根据<name 属性值>,在<Service 服务标签名目录>中,自动创建<同名目录>
appBase 属性:appBase="webapps",设置:<war 工程包>自动解压的<基础目录>,可是<相对/绝对路径>
unpackWARs 属性:unpackWARs="true",设置:开启<Web 工程包>的<自动解压功能>
autoDeploy 属性:autoDeploy="true",设置:开启<Web 工程包>的<自动发布功能>,可实现热部署
workDir 属性:workDir="webapps/work",设置:<Web 工程包>的<临时工作目录>,可是<相对/绝对路径>
<相对路径>:是相对于<$CATALINA_BASE 目录>
<绝对路径>:可自定义
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
Valve阀元素
- <Valve 元素>:
- 它是:可以在<Engine、Host 或 Context> 的<请求处理管道>中插入的<组件>,每一个<Valve 元素> 可以用来实现<不同的处理能力>。
<!-- 定义:<访问日志文件>的<文件名及其内容格式>,如:localhost_access_log.txt -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
了解:context.xml(运维人员/开发人员关注)
- context.xml 定义:应用于的<上下文对象>,例如,定义虚拟目录、配置session 会话保持等等。
- context.xml 特点:Tomcat 将会定时查看,一旦变化,自动重载。
- 解读:$CATALINA_BASE/conf/context.xml(全局性配置)
cat $CATALINA_BASE/conf/context.xml
了解:web.xml(开发人员关注)
- web.xml 定义:应用于的<Servlet 容器默认配置>。
包含着:Servlet、Filter、Session、MIME、Welcome 等等设置。
- web.xml 特点:不能动态重载,一旦变化,必须手动重启。
更多推荐




所有评论(0)