• 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的专有配置,无需重启即可生效

  • 相关阅读:
    002powershell使用常见问题
    028_如何外网下载大文件
    028MAC常用工具unlicense
    027_录屏倒计时弹窗实用小程序
    NIO相关基础篇
    写给刚上小学一年级的果果(家长寄语)
    [转]Mavlink协议
    [原][ARCGIS]使用ARCMAP分离导出单个矢量图形文件SHP
    [原][译]从osgEarth2升级到osgEarth3的变化
    [减肥]生酮减肥餐做法
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/15168148.html
Copyright © 2020-2023  润新知