web服务之Tomcat安装与基础配置

Oracle JDK 的 rpm安装

#注意需要注册登录后,才能下载JDK(官方)
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

#需要登录下载:https://www.oracle.com/java/technologies/javase/javase-jdk8-
downloads.html
[root@centos8 ~]# ls -lh jdk-8u241-linux-x64.rpm
-rw-r--r-- 1 root root 171M Feb 8 18:29 jdk-8u241-linux-x64.rpm
#安装jdk,无相关依赖包
[root@centos8 ~]# dnf -y install jdk-8u241-linux-x64.rpm
[root@centos8 ~]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
#初始化环境变量
[root@centos8 ~]# vim /etc/profile.d/jdk.sh
[root@centos8 ~]# cat /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
#以下两项非必须项
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

[root@centos8 ~]#. /etc/profile.d/jdk.sh
#查看jdk信息
[root@centos8 ~]# which java
/usr/bin/java
[root@centos8 ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Feb 8 18:35 /usr/bin/java -> /etc/alternatives/java
[root@centos8 ~]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 41 Feb 8 18:35 /etc/alternatives/java ->
/usr/java/jdk1.8.0_241-amd64/jre/bin/java
[root@centos8 ~]# rpm -q --scripts jdk-8u241-linux-x64.rpm

Oracle JDK的二进制文件安装

#下载安装包:https://www.oracle.com/java/technologies/javase/javase-jdk8-
downloads.html
[root@centos8 ~]# tar xvf jdk-8u241-linux-x64.tar.gz -C /usr/local/
[root@centos8 ~]# cd /usr/local/
[root@centos8 ~]# ln -s jdk1.8.0_241/ jdk
#初始化环境变量
[root@centos8 ~]# vim /etc/profile.d/jdk.sh
[root@centos8 ~]# cat /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
#以下两项非必须项
#export JRE_HOME=$JAVA_HOME/jre
#export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

[root@centos8 ~]#. /etc/profile.d/jdk.sh
#注意:JAVA_HOME变量必须设置,否则tomcat启动时会出下面错误
[root@centos8 ~]# catalina.sh

#验证安装
[root@centos8 ~]# java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
[root@centos8 ~]# which java
/usr/local/jdk/bin/java

Tomcat 介绍

Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet
和JSP容器

官网: http://tomcat.apache.org/
官网文档: https://tomcat.apache.org/tomcat-8.5-doc/index.html
帮助文档:
https://cwiki.apache.org/confluence/display/tomcat/
https://cwiki.apache.org/confluence/display/tomcat/FAQ

Tomcat 各版本区别

官方文档:https://tomcat.apache.org/whichversion.html

下载并安装
注意: 安装tomcat 前必须先部署JDK

官方和镜像站点下载:

https://tomcat.apache.org/download-80.cgi
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/

范例:

#官网或镜像网站下载:
[root@centos8 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-
8/v8.5.50/bin/apache-tomcat-8.5.50.tar.gz
[root@centos8 ~]# tar xf apache-tomcat-8.5.50.tar.gz -C /usr/local/
[root@centos8 ~]# cd /usr/local/
[root@centos8 local]# ln -s apache-tomcat-8.5.50/ tomcat

#指定PATH变量
[root@centos8 ~]# echo 'PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh
[root@centos8 ~]#. /etc/profile.d/tomcat.sh
[root@centos8 ~]# echo $PATH
/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/bin:/root/bin

#查看当前变量设置和命令用法
[root@centos8 ~]# catalina.sh
...
#查看进程是以root启动的
[root@centos8 ~]# ps aux|grep tomcat

打开浏览器访问:http://tomcat:8080/

扩展知识:tomcat 和 catalina 关系

Tomcat的servlet容器在4.X版本中被Craig McClanahan(Apache Struts项目的创始人,也是Tomcat
的 Catalina 的架构师)重新设计为Catalina.即Catalina就是servlet容器。
Tomcat的核心分为3个部分:
(1)Web容器:处理静态页面;
(2)JSP容器:把jsp页面翻译成一般的 servlet
(3)catalina: 是一个servlet容器,用于处理servlet

配置 tomcat自启动的 service 文件

#创建tomcat专用帐户
[root@centos8 ~]# useradd -r -s /sbin/nologin tomcat
#准备service文件中相关环境文件
[root@centos8 ~]# vim /usr/local/tomcat/conf/tomcat.conf
[root@centos8 ~]# cat /usr/local/tomcat/conf/tomcat.conf
#两个变量至少设置一项才能启动 tomcat
JAVA_HOME=/usr/local/jdk
#JRE_HOME=/usr/local/jdk/jre
#如果不指定上面变量,/var/log/messages文件中会出现下面无法启动错误提示
Mar 15 14:30:09 centos8 startup.sh[1530]: Neither the JAVA_HOME nor the JRE_HOME
environment variable is defined
[root@centos8 ~]# chown -R tomcat.tomcat /usr/local/tomcat/

#创建tomcat.service文件
[root@centos8 ~]# vim /lib/systemd/system/tomcat.service
[root@centos8 ~]# cat /lib/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
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target

[root@centos8 ~]# systemctl daemon-reload
[root@centos8 ~]# systemctl enable --now tomcat

案例:一键安装 tomcat 脚本

[root@centos8 ~]# cat install_tomcat.sh
#!/bin/bash
# Date:2021-06-27
# Author:xuanlv

DIR=`pwd`
JDK_FILE="jdk-8u291-linux-x64.tar.gz"
TOMCAT_FILE="apache-tomcat-8.5.54.tar.gz"
JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local"

color(){
   RES_COL=60
   MOVE_TO_COL="echo -en \E[${RES_COL}G"
   SETCOLOR_SUCCESS="echo -en \E[1;32m"
   SETCOLOR_FAILURE="echo -en \E[1;31m"
   SETCOLOR_WARNING="echo -en \E[1;33m"
   SETCOLOR_NORMAL="echo -en \E[0m"
   echo -n "["
   if [ $1 = "success" -o $1 = "0" ];then
       ${SETCOLOR_SUCCESS}
       echo -n $"    ok   "
   elif [ $1 = "failure" -o $1 = "1" ];then
       ${SETCOLOR_FAILURE}
       echo -n $"FAILED"
   else
       ${SETCOLOR_WARNING}
       echo -n $"WARNING"
   fi
   ${SETCOLOR_NORMAL}
   echo -n "]"
   echo
}
install_jdk(){
  if ! [ -f "$DIR/$JDK_FILE" ];then
      color 1 "$JDK_FILE 文件不存在"
      exit;
  elif [ -d $JDK_DIR/jdk ];then
      color 1 "JDK 已经安装"
      exit
  else
      [ -d "$JDK_DIR" ] || mkdir -p $JDK_DIR
  fi
  tar xf $DIR/$JDK_FILE -C $JDK_DIR
  cd $JDK_DIR && ln -s jdk1.8.* jdk
  cat > /etc/profile.d/jdk.sh <<-EOF
export JAVA_HOME=$JDK_DIR/jdk
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=\$JAVA_HOME/lib/:\$JRE_HOME/lib/
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
  source /etc/profile.d/jdk.sh
  java -version && color 0 "JDK 安装完成" || { color 1 "JDK 安装失败" ; exit; }
}
install_tomcat(){
  if ! [ -f "$DIR/$TOMCAT_FILE" ];then
      color 1 "$TOMCAT_FILE 文件不存在"
      exit;
  elif [ -d $TOMCAT_DIR/tomcat ];then
      color 1 "TOMCAT 已经安装"
      exit
  else
      [ -d "$TOMCAT_DIR" ] || mkdir -p $TOMCAT_DIR
  fi
  tar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR
  cd $TOMCAT_DIR && ln -s apache-tomcat-*/ tomcat
  echo "PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d//tomcat.sh
  id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat
  cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<-EOF
JAVA_HOME=$JDK_DIR/jdk
EOF
  chown -R tomcat.tomcat $TOMCAT_DIR/tomcat/
  cat > /lib/systemd/system/tomcat.service <<-EOF
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
EOF
  systemctl daemon-reload
  systemctl enable --now tomcat.service &> /dev/null
  systemctl is-active tomcat.service &> /dev/null && color 0 "TOMCAT 安装完成" || { color 1 "TOMCAT 安装失败" ; exit; }
}
install_jdk

install_tomcat

tomcat的文件结构和组成

目录结构

目录 说明
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录
work jsp编译后的结果文件,建议提前预热访问
#当访问过后,work目录中生成新文件
[root@centos8 tomcat]#tree work/Catalina/localhost/
work/Catalina/localhost/
├── docs
├── examples
├── host-manager
├── manager
└── ROOT
    └── org
        └── apache
            └── jsp
                 ├── index_jsp.class #字节码文件
                 └── index_jsp.java #servlet文件

配置文件说明

官方帮助文档:http://tomcat.apache.org/tomcat-8.5-doc/index.html

在tomcat安装目录下的 conf 子目录中,有以下的 tomcat的配置文件

文件名 说明
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选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties Tomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties Tomcat 日志系统相关的配置,可以修改日志级别和日志路径等
注意:配置文件大小写敏感
范例:查看配置文件
[root@centos8 conf]# ls
Catalina context.xml logging.properties tomcat-users.xml
catalina.policy jaspic-providers.xml server.xml tomcat-users.xsd
catalina.properties jaspic-providers.xsd tomcat.conf web.xml

范例: 主要配置文件内容

[root@centos8 ~]# grep -v '\-\-' /usr/local/tomcat/conf/context.xml

[root@centos8 ~]# grep -v '\-\-' /usr/local/tomcat/conf/tomcat-users.xml

[root@centos8 ~]# grep -v '\-\-' /usr/local/tomcat/conf/server.xml
...
    <Connector port="8080" protocol="HTTP/1.1"
      connectionTimeout="20000"
      redirectPort="8443" />
    <Connector executor="tomcatThreadPool"
      port="8080" protocol="HTTP/1.1"
      connectionTimeout="20000"
      redirectPort="8443" />
      ...

日志文件

参考文档: https://cwiki.apache.org/confluence/display/TOMCAT/Logging
日志格式: https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Access_Logging

范例:tomcat中的日志文件

[root@centos8 ~]# ls /usr/local/tomcat/logs/ -1
catalina.2021-06-14.log #tomcat服务日志
catalina.out #tomcat服务日志
host-manager.2021-06-14.log #host manager管理日志
localhost.2021-06-14.log #默认主机日志
localhost_access_log.2021-06-14.txt ##默认主机访问日志
manager.2021-06-14.log #manager 管理日志

范例: tomcat的访问日志格式

#查看访问日志格式
[root@centos8 ~]# tail /usr/local/tomcat/conf/server.xml
            Documentation at: /docs/config/valve.html
            Note: The pattern used is equivalent to using pattern="common" -->
       <Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
              prefix="localhost_access_log" suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" /> #说明: &quot;在html
中表示双引号"符号
         </Host>
      </Engine>
   </Service>
</Server>

#查看访问日志
[root@centos8 ~]# tail /usr/local/tomcat/logs/localhost_access_log.2021-06-14.txt

组件分层和分类

#顶级组件
Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突
#服务类组件
Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
#连接器组件
Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口
8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
#容器类
Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,
内部配置如何运行应用程序。
#内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组
件内分别定义。
#集群类组件
listener、cluster

Tomcat 内部组成

名称 说明
Server 服务器,Tomcat 运行的进程实例,一个Server中可以有多个service,但通常就一个
Service 服务,用来组织Engine和Connector的对应关系,一个service中只有一个Engine
Connector 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine
Engine 即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host 即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context 应用的上下文,配置特定url路径映射和目录的映射关系:url => directory
每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:
顶级组件:Server
服务类组件:Service
连接器组件:http, https, ajp(apache jserv protocol)
容器类:Engine, Host, Context
被嵌套类:valve, logger, realm, loader, manager, ...
集群类组件:listener, cluster, ...

范例: 查看类

[root@centos8 ~]# grep className /usr/local/tomcat/conf/server.xml
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.security.SecurityListener" />
<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" />
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"

核心组件

Tomcat启动一个Server进程。可以启动多个Server,即tomcat的多实例, 但一般只启动一个

创建一个Service提供服务。可以创建多个Service,但一般也只创建一个

  每个Service中,是Engine和其连接器Connector的关联配置
  
可以为这个Service提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应

Service 内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host

  Engine对请求头做了分析,将请求发送给相应的虚拟主机
  如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
  Engine上的缺省虚拟主机可以修改
  
Host 定义虚拟主机,虚拟主机有name名称,通过名称匹配

Context 定义应用程序单独的路径映射和配置

范例:多个组件关系 conf/server.xml

<?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">
          <Context >
          <Context />
        </Host>
     </Engine>
  </Service>
</Server>

tomcat 处理请求过程

假设来自客户的请求为:http://localhost:8080/test/index.jsp

浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1
Connector获得此请求。
Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
Engine获得请求localhost:8080/test/index.jsp,遍历它所有虚拟主机Host
Engine匹配到名为localhost的Host。如果匹配不到,就把请求交给该Engine中的defaultHost处理
localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
Host匹配到路径为/test的Context
path=/test的Context获得请求index.jsp,在它的mapping table中寻找对应的servlet
Context匹配到URL PATTERN为*.jsp 的servlet,对应于JspServlet类构造HttpServletRequest对
象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。
Context把执行完了之后的HttpServletResponse对象返回给Host
Host把HttpServletResponse对象返回给Engine
Engine把HttpServletResponse对象返回给Connector
Connector把HttpServletResponse对象返回给浏览器端

应用部署

tomcat的根目录结构
Tomcat中默认网站根目录是$CATALINA_BASE/webapps/
在Tomcat中部署主站应用程序和其他应用程序,和之前WEB服务程序不同。
nginx
假设在nginx中部署2个网站应用eshop、forum,假设网站根目录是/data/nginx/html,那么部署可以
是这样的。
eshop解压缩所有文件放到/data/nginx/html/ 目录下,forum 的文件放
在/data/nginx/html/forum/ 下。
最终网站链接有以下对应关系

http://localhost/ 对应于eshop的应用,即 /data/nginx/html/
http://localhost/forum/ 对应于forum的应用,即/data/nginx/html/forum/

Tomcat
Tomcat中默认网站根目录是$CATALINA_BASE/webapps/
在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录。
将eshop解压后的文件放到这个$CATALINA_BASE/webapps/ROOT中。
bbs解压后文件都放在$CATALINA_BASE/webapps/forum目录下。
$CATALINA_BASE/webapps下面的每个目录都对应一个Web应用,即WebApp
最终网站链接有以下对应关系

http://localhost/ 对应于eshop的应用WebApp,即$CATALINA_BASE/webapps/ROOT/目录,
http://localhost/forum/ 对应于forum的应用WebApp,即$CATALINA_BASE/webapps/forum/

如果同时存在$CATALINA_BASE /webapps/ROOT/forum ,仍以$CATALINA_BASE/webapps/forum/ 优
先生效
每一个虚拟主机都可以使用appBase指令配置自己的站点目录,使用appBase目录下的ROOT目录作为
主站目录。

范例: 主页目录和编码

[root@centos8 ~]# cat /usr/local/tomcat/webapps/ROOT/index.html
<h1>永恒国度</h1>
[root@centos8 ~]# curl 172.31.0.8:8080/index.html -I
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"22-1594212097000"
Last-Modified: Wed, 08 Jul 2021 12:41:37 GMT
Content-Type: text/html #tomcat无指定编码,浏览器自动识别为GBK,可能会导致乱码
Content-Length: 22
Date: Wed, 08 Jul 2021 13:06:03 GMT
#httpd服务器默认指定编码为UTF-8,因为服务器本身不会出现乱码
#nginx服务器默认在响应头部没有批定编码,也会出现乱码
[root@centos8 ~]# curl 172.31.0.18/index.html -I
HTTP/1.1 200 OK
Date: Wed, 08 Jul 2021 13:07:57 GMT
Server: Apache/2.4.37 (centos)
Last-Modified: Wed, 08 Jul 2021 12:59:55 GMT
ETag: "16-5a9edaf39d274"
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html; charset=UTF-8
#浏览器的设置默认不是UTF-8,可能会导致

#修改网页指定编码
[root@centos8 ~]# cat /usr/local/tomcat/webapps/ROOT/index.html
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>tomcat</title>
</head>
<h1>永恒国度</h1>

JSP WebApp目录结构

$CATALINA_BASE/webapps下面的每个目录对应的WebApp,可能有以下子目录,但下面子目录是非必
须的
主页配置:默认按以下顺序查找主页文件index.html,index.htm、index.jsp
WEB-INF/:当前目录WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml
配置文件
META-INF/:类似于WEB-INF,也是私有资源的配置信息,和WEB-INF/目录一样浏览器无法访问
classes/:类文件,当前webapp需要的类
lib/:当前应用依赖的jar包

主页设置

全局配置实现修改默认主页文件

默认情况下 tomcat 会在$CATALINA_BASE/webapps/ROOT/目录下按以下次序查找文件,找到第一个则
进行显示
index.html
index.htm
index.jsp
可以通过修改 $CATALINA_BASE/conf/web.xml 中的下面<welcome-file-list>标签内容修改默认页文件

范例: 修改默认主页文件

[root@centos8 tomcat]# pwd
/usr/local/tomcat
[root@centos8 tomcat]# echo '<h1>www.longxuan.vip</h1>' > webapps/ROOT/index.html
[root@centos8 tomcat]# curl http://127.0.0.1:8080/
<h1>www.longxuan.vip</h1>
[root@centos8 tomcat]# tail conf/web.xml
<!-- here, so be sure to include any of the default values that you wish -->
<!-- to use within your application. -->
<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>

[root@centos8 tomcat]# vim conf/web.xml
[root@centos8 tomcat]# tail conf/web.xml
<!-- here, so be sure to include any of the default values that you wish -->
<!-- to use within your application. -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

[root@centos8 tomcat]# systemctl restart tomcat
[root@centos8 tomcat]# curl http://127.0.0.1:8080/

WebApp的专用配置文件

将上面主配置文件conf/web.xml中的标签内容,复制到/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中,如下

范例: 针对主站点根目录设置专用配置文件

[root@centos8 tomcat]# vim webapps/ROOT/WEB-INF/web.xml
[root@centos8 tomcat]# cat 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_3_1.xsd"
version="3.1"
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>

#配置修改后,无需重启tomcat服务,即可观察首页变化
[root@centos8 tomcat]# curl http://127.0.0.1:8080/

范例: 针对特定APP目录设置专用配置文件

[root@centos8 tomcat]# cp -a webapps/ROOT/WEB-INF/ webapps/longxuan/
[root@centos8 tomcat]# echo /usr/local/tomcat/webapps/longxuan/test.html >
webapps/longxuan/test.html
[root@centos8 tomcat]# tree webapps/longxuan/
webapps/longxuan/
├── index.htm
├── index.html
├── test.html
└── WEB-INF
    └── web.xml
1 directory, 4 files

[root@centos8 tomcat]# cat webapps/longxuan/WEB-INF/web.xml
......
<description>
Welcome to Tomcat
</description>
<welcome-file-list>
<welcome-file>test.html</welcome-file> #修改默认页面文件的顺序
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

#注意修改属性
[root@centos8 tomcat]# chown -R tomcat.tomcat webapps/longxuan/
[root@centos7 ~]# curl http://www.longxuan.vip:8080/longxuan/
/usr/local/tomcat/webapps/longxuan/test.html

配置规则:

webApp的专有配置优先于系统的全局配置

修改系统的全局配置文件,需要重新启动服务生效

修改 webApp的专有配置,无需重启即可生效

posted @ 2021-08-20 20:59  空白的旋律  阅读(236)  评论(0编辑  收藏  举报