• Tomcat服务的部署及配置优化


    1. Tomcat的相关介绍

    1.1 Tomcat简介

    Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器

    Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

    一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

    1.2 Tomcat的核心组件

    • Web 容器:完成 Web 服务器的功能。
    • Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
    • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

    1.2.1 Web容器

    Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

    1.2.2 Servlet容器

    Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性,
    简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建

    1.2.3 JSP容器

    JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。

    JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。

    JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

    1.3 Tomcat的功能组件

    Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container
    其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。
    每个 Tomcat 服务器可以管理多个 Service。

    1.3.1 connector连接器

    暴露监听端口,接收客户端发来的请求和返回响应消息给客户端

    1.3.2 container容器

    负责处理用户请求的业务逻辑。
    由4个子容器组成(engine、host、context、wrapper),子容器之间是父子关系

    1.3.2.1 子容器及其相关功能
    • engine:引擎,管理多个虚拟主机,一个container只有一个engine
    • host:代表一个虚拟主机
    • context:代表一个 Web 应用,包含多个 Servlet 封装器
    • wrapper:servlet封装器,每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能

    1.4 主要作用

    • 可以作为 Web 应用服务器,处理静态 Web 页面, 如 html 页面,但性能一般
    • 还可以作为 Servlet/JSP 容器,处理 java 语言开发的 jsp 动态页面应用程序,这也是 tomcat 主要的应用场景

    1.5 Tmocat处理请求的过程

    在这里插入图片描述

    1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
    2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
    3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
    4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

    客户端请求过程:
    客户端浏览器——> connector(暴露的8080端口) ——>container(engine)——>host ——>context——>wrapper

    container(engine) 根据域名发送给对应的虚拟主机
    host 根据用户访问的URL路径
    context 根据URL路径对应的Web应用
    wrapper 根据应用程序处理业务逻辑

    2. Tomcata服务部署

    2.1 安装并配置JDK

    systemctl stop firewalld
    setenforce 0
    #关闭防火墙和selinux
    
    #将所需源码包传到/opt目录下
    jdk-8u201-linux-x64.rpm
    apache-tomcat-9.0.16.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    #rpm安装JDK
    cd /opt
    rpm -ivh jdk-8u201-linux-x64.rpm 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    rpm -ql jdk1.8 | tail -n 1
    #查看安装路径
    
    • 1
    • 2

    在这里插入图片描述

    cd /usr/java/jdk1.8.0_201-amd64/ ;ls
    
    • 1
    文件名功能
    bin存放 Java 可执行文件的目录
    include存放 Java 开发头文件的目录
    jre存放 Java 运行时环境的目录
    LICENSEJDK 许可证文件
    README.htmlJDK 的直观说明文档(HTML 格式)
    src.zipJDK 的源代码压缩包
    THIRDPARTYLICENSEREADME.txt第三方许可证文档
    COPYRIGHTJDK 的版权信息
    javafx-src.zipJavaFX 源代码压缩包
    lib存放 JDK 和 JavaFX 库文件的目录
    man存放 JDK 手册页(man page)文件的目录
    releaseJDK 的版本信息
    THIRDPARTYLICENSEREADME-JAVAFX.txtJavaFX 第三方许可证文档

    在这里插入图片描述

    java -version 
    #查看目前JDK版本
    
    • 1
    • 2

    在这里插入图片描述

    2.2 设置JDK环境变量

    #查看全局配置文件
    vim /etc/profile
    
    • 1
    • 2

    在这里插入图片描述

    vi /etc/profile.d/java.sh
    
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64   
    #java家目录
    export JRE_HOME=$JAVA_HOME/jre
    #jre家目录
    export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    #指向java工具包和环境包
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    #java环境变量
    
    #linux查找可执行文件是根据PATH变量从左往右查找,找到即停止
    #所以需要将安装版本的路径放在$PATH前面
    
    `CLASSPATH` 是一个环境变量,用于指定 Java 程序运行时的类路径。类路径是指计算机中存储 Java 类文件和库文件的路径。当 Java 程序运行时,虚拟机会搜索类路径上指定的路径,以找到所需的类文件和库文件,以便正确加载和执行程序。
    
    
    #CLASSPATH和 PATH是必需的,而JAVA_HOME和JRE_HOME是为了方便修改,只需要修改JAVA_HOME
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    source /etc/profile.d/java.sh
    #调用Java脚本
    
    java -version
    #查看当前JDK版本
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    #测试
    任意Java脚本,测试是否成功
    
    • 1
    • 2

    在这里插入图片描述

    javac HelloWorld.java
    #编译
    
    • 1
    • 2

    在这里插入图片描述

    java -cp . HelloWorld #执行脚本
    
    • 1

    在这里插入图片描述

    ---------------------------------热知识-------------------------------------------------------------------
    JDK :java development kit (java开发工具)
    JRE :java runtime environment (java运行时环境)
    JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
    CLASSPATH:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件。
    tools.jar:是系统用来编译一个类的时候用到的,即执行javac的时候用到。
    dt.jar:dt.jar是关于运行环境的类库,主要是swing包。
    ----------------------------------------------------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.3 安装Tomcat并用systemctl启动

    2.3.1 路径启动

    #解压tomcat安装包
    cd /opt
    tar xf apache-tomcat-9.0.16.tar.gz  
    #解压缩源码包 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    cp -r apache-tomcat-9.0.16/ /usr/local/tomcat
    #将源码包目录拷贝至/usr/local/下并重命名为tomcat
    #简化路径,方便管理mv apache-tomcat-9.0.16 /usr/local/tomcat
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    #启动Tomcat的方法,省略路径
    startup.sh          #后台启动tomcat
    catalina.sh start   #后台启动tomcat
    catalina.sh run     #前台启动 tomcat
    
    #关闭Tomcat的方法:
    shutdown.sh      #关闭tomcat
    
    #查看tomcat是否启动:
    ss -natp |grep 8080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    2.3 2 为tomcat添加进systemd服务

    #先关闭服务
    /usr/local/tomcat/bin/shutdown.sh
    
    • 1
    • 2

    在这里插入图片描述

    #添加用户设置属主属组
    useradd -s /sbin/nologin tomcat
    chown tomcat:tomcat /usr/local/tomcat/ -R
    
    • 1
    • 2
    • 3
    #新建.service服务文件
    vi /etc/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
    ExecStart=/usr/local/tomcat/bin/startup.sh
    ExecStop=/usr/local/tomcat/bin/shutdown.sh
    RestartSec=3
    PrivateTmp=true
    User=tomcat
    Group=tomcat
     
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    #重新加载服务,并开启,查看是否成功启动
    systemctl daemon-reload
    systemctl start tomcat
    ss -ntap |grep 8080
    或
    systemctl status tomcat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    浏览器访问Tomcat的默认主页 http://192.168.67.102:8080
    
    • 1

    在这里插入图片描述

    3. Tomcat的端口及配置文件

    3.1 Tomcat常用端口

    8080: 默认接收 http 请求的端口

    8005: 安全端口,可以关闭tomcat

    8009: apache 和 tomcat 联动 AJP 协议

    8443:负责处理https请求连接

    3.2 主要目录、文件及其功能

    目录名功能
    bin存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh
    conf存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
    lib存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包
    logs存放 Tomcat 日志
    temp存放 Tomcat 运行时产生的文件
    webapps存放项目资源的目录
    workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到
    文件名说明
    server.xml主配置文件
    web.xml每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为
    context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
    tomcat-users.xml用户认证的账号和密码文件
    catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略
    catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
    logging.propertiesTomcat日志系统相关的配置,可以修改日志级别和日志路径等

    注意:配置文件对于大小写很敏感

    4. 虚拟主机

    4.1 作用

    1. 分离多个网站:通过配置虚拟主机,可以将不同的网站分开,并为每个网站指定独立的文档根目录、日志文件、访问日志等,以避免网站之间的资源冲突和混乱。
    2. 实现多个域名指向不同的网站:通过虚拟主机,可以将多个域名指向同一台服务器的不同网站,实现一个服务器对应多个域名,提高服务器的利用率和灵活性。
    3. 隔离与保护:每个虚拟主机都是独立的,网站之间不会相互干扰,如果一个网站出现问题,不会影响其他网站的正常运行。
    4. 提供定制化配置:通过虚拟主机配置,可以为每个网站提供独立的配置选项,如SSL证书、访问权限、反向代理等,以满足不同网站的需求。
    5. 简化管理和维护:通过虚拟主机,可以利用Tomcat提供的管理工具(如Tomcat Manager)对每个虚拟主机进行独立的管理和监控,方便统一管理多个网站

    4.2 配置虚拟主机(基于域名)

    新增两个域名 www.scj.com 和 www.shan.com,希望通过这两个域名访问到不同的项目内容。

    4.2.1 创建 scj 和 shan 项目目录和文件

    #创建 scj 和 shan 项目目录与文件
    cd /usr/local/tomcat/webapps
    mkdir scj  shan
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    #自定义主页内容
    echo "this is scj web" > scj/index.html
    echo "this is shan web" > shan/index.html
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    4.2.2 修改 Tomcat 主配置文件

    #修改主配置文件
    vim /usr/local/tomcat/conf/server.xml 
    约164行位置插入
    -----------------------------------------------------
     
            <Host name="www.scj.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"
                  xmlValidation="false" xmlNamespaceAware="false">
                  <Context docBase="/usr/local/tomcat/webapps/scj"
                    path="" reloadable="true" />
         </Host>
            <Host name="www.shan.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"
                  xmlValidation="false" xmlNamespaceAware="false">
                  <Context docBase="/usr/local/tomcat/webapps/shan"
                    path="" reloadable="true" />
        </Host>
    
    
    ###################释义#########
    Host name :主机名
    
    appBase :Tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webapps
    
    unpackWARs :是否解压war包
    
    autoDeploy :指示Tomcat运行时,如有新的WEB应用是否允许自动部署
    
    xmlValidation :是否验证xml文件执行有效性检验的标志
    
    xmlNamespaceAware :是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
    
    appBase :WEB应用的目录
    
    path :设置访问的URI为WEB应用的根目录
    
    reloadable :是否在程序有改动时重新载入
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    在这里插入图片描述

    4.2.3 重启并检测是否成功

    #服务机关闭防火墙并重启服务
    systemctl restart tomcat
    systemctl stop firewalld
    setenforce 0
    
    • 1
    • 2
    • 3
    • 4
    #前往客户机,更改/etc/hosts文件并关闭防火墙
    echo "192.168.67.102 www.scj.com www.shan.com" >> /etc/hosts
    systemctl stop firewalld
    setenforce 0
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    #在客户机中测试
    curl http://www.scj.com:8080
    curl http://www.shan.com:8080
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    5. tomcat 配置优化

    5.1 配置文件优化

    maxThreads(最大线程数/并发)
    processorCache(进程缓冲)
    acceptCount(等待队列数)  
    enableLookups(关闭DNS反向解析)  
    URIEncoding(网页字符集编码UTF-8) 
    maxKeepAliveRequests(长连接最大请求数)  
    connectionTimeout(连接超时时间)  
    compression(开启页面压缩)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.2 内核优化

    #/etc/security/limits.conf     
    nofile  nproc  memlock
    #/etc/sysctl.conf   
    net.ipv4.tcp_tw_reuse=1   
    net.ipv4.tcp_tw_recycle=1   
    net.ipv4.tcp_fin_timeout=30  
    net.ipv4.tcp_max_tw_buckets=5000    
    net.ipv4.ip_local_port_range=1024 65535 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.3 JVM优化

    #在 catalina.sh 中设置 JAVA_OPTS 参数
    
    JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=1024m -XX:MaxPermSize=1024m -Xmn768m"
    
    -server                                    #表示启用JDK的Server模式,实现在多核服务器性能更佳
    -Xms2048m -Xmx2048m                        #设置JVM堆内存初始值和最大最一样大,一般设置为物理内存的 1/2
    -XX:PermSize=1024m -XX:MaxPermSize=1024m   #设置永久代(非堆内存)初始值和最大最一样大,一般设置为物理内存的 1/4
    
    #初始值和最大最设置一样大的原因:可以减少GC次数和内存伸缩带来的频繁内存申请,从而减少一定的系统开销。
    
    -Xmn #设置JVM堆内存新生代的大小,一般设置为堆内存的 3/8
    
    -XX:ParallelGCThreads=2   #设置并行GC(垃圾回收)线程数,提高垃圾回收效率
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof  设#置进程发生OOM异常退出会进行DUMP备份
    -XX:+DisableExplicitGC  #禁止调用System.gc()方法,防止误调用系统gc方法导致系统的JVM堆内存大起大落而使系统响应效率严重降低
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    【C++私房菜】面向对象中的多重继承以及菱形继承
    SoC最小系统设计——以单片机为例
    百度测开面试题分享
    Java反射详解
    《SpringBoot篇》03.超详细属性配置介绍
    Android学习笔记 44. SP数据存储
    物联网智能互联创新开发平台
    win7系统c盘满了笔记
    Base64、Blob、File 三种类型的相互转换 最详细
    基于Java+SpringBoot+Vue前后端分离旅游管理系统设计和实现
  • 原文地址:https://blog.csdn.net/m0_74170357/article/details/132735194