• Tomcat部署及优化



    前言

    Tomcat是JAVA语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成


    一、Tomcat服务器简介

    Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常作为一个Servlet和JSP容器,单独运行在后端。

    1.Servlet

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

    2.JSP

    JSP全程Java Servlet Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头,以%>结束。
    JSP是一种Java Servlet,主要用于实现Java Web应用程序的用户界面部分。
    JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态的创建网页。

    3.Tomcat核心组件

    通常意义上的Web服务器接受请求后,只是单纯地响应静态资源,如HTML文件,图片、文件等,不能在后端进行一定地处理操作。Tomcat是Apache下的一个子项目,它具备Web服务器地所有功能(Web容器嵌入Servlet→动态请求),不仅可以监听接收请求并响应静态资源,而且可以在后端运行特定规范地Java代码Servlet,同时将执行地结果以HTML代码地形式写回客户端。
    Tmocat是由一系列的组件构成,其中核心的组件有三个
    (1)Web容器:完成Web服务器的功能HTTP HTTPS请求的接收和响应
    描述:①接收、响应请求②展示动态页面

    (2)JSP容器:用以将index.jsp文件中的java代码翻译成Servlet代码。
    描述:index.jsp文件里面有静态展示的html语言,还有一些java类代码,但是文件中java代码无法直接被tomcat执行,所以需要先翻译为可以执行的代码方式,也就是翻译成Servlet代码格式

    (3)Servelet容器:由名称为Catalina的脚本来处理Servlet代码。
    描述:使用catalina进行处理JSP容器翻译过来的Servelet代码

    简介:
    Web容器:1.接受、响应请求2.展示动态页面
    JSP容器:翻译Java→servlet
    Servlet容器:借助于catalina来执行servlet代码(动态任务执行的标准格式)

    3.1Tomcat功能组件机构

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

    • Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
    • Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用Servlet 相关逻辑。
    • Service:对外提供的 Web 服务。主要包含 Connector 和 Container
      两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。

    3.2Container结构分析

    每个 Service 会包含一个 Container 容器,在 Container 内部包含了 4 个子容器
    4个子容器的作用分别是
    (1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
    (2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
    (3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;
    (4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

    • Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。
    • 容器由一个引擎可以管理多个虚拟主机。
    • 每个虚拟主机可以管理多个 Web 应用。
    • 每个 Web 应用会有多个 Servlet 封装器。

    3.3Tomcat请求过程

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

    二、Tomcat数据流向

    1.Tomcat数据流向

    在这里插入图片描述

    用户请求(访问80端口)——》
    
    发送请求发送给tomcat——》
    
    tomcat有一个端口在监听8080端口)
    
    从8080端口进入流量的会被在此端口的线程监听到
    
    给与我们的web容器进行处理(有index.html页面显示出来  从8080端口来时会有交互界面  会读取到index.jsp这种java代码)
    
    但是java代码无法直接使用——》
    
    需要利用到jsp容器
    
    将index.jsp中的java的servlet代码进行翻译
    
    servlet容器处理 通过catalina程序/脚本来处理从JSP容器这过来的servlet代码
    
    并不是直接对接mysql数据库
    
    而是直接对接用户的请求例如app中的某个功能模块
    
    比方说看个人信息  servlet容器与app接是api进行对接(具体的URL)
    
    数据流向最终会通过用户请求内容  去mysql数据库寻找相应的内容
    
    最后返回给用户
    
    • 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

    2.Nginx-Tomcat数据流向图

    在这里插入图片描述

    首先,客户请求nginx页面,就是访问80端口
    nginx进行反向代理,去请求连接Tomcat的8080端口
    Tomcat里面有一个负责接收和反馈外部请求的连接器 Connector
    Connector中有前端页面和协议会监听8080端口,从8080端口进入的请求会被监听到
    Tomcat接收到请求之后,然后把这个请求交给负责处理请求的容器Container中的Engine来处理
    Engine接收到请求之后,会匹配所有的虚拟主机Host
    Host相当于站点,就相当于我们正常去访问一个域名一样
    不同的需求会有不同的路径,这时候就让Context来确定访问路径
    找到访问路径之后,里面有一个index.jsp文件,它会把这个文件的Java代码提取出来
    然后交给sercvet来翻译这个代码,用Catalina来处理这个代码
    最后将执行结果一层一层原路返回

    三、Tomcat服务部署及安装

    在部署Tomcat之前必须安装好jdk,因为jdk是Tomcat’运行的必要环境

    1.关闭防火墙、关闭核心防护

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.将所需的安装包拖入到/opt目录下准备安装

    在这里插入图片描述

    3.安装JDK

    rpm -ivh jdk-8u201-linux-x64.rpm
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    4.设置JDK的环境变量

    vim /etc/profile.d/java.sh
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64    #输出指定java所需的类文件
    export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar        #可执行文件的位置
    export PATH=$JAVA_HOME/bin:$PATH
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    source /etc/profile.d/java.sh
    java -version
    
    • 1
    • 2

    在这里插入图片描述

    5.安装启动Tomcat

    将Tomcat包进行解压

    tar zxvf apache-tomcat-9.0.16.tar.gz
    
    • 1

    在这里插入图片描述

    mv apache-tomcat-9.0.16 /usr/local/tomcat    #将解压后的包剪切到/usr/local 目录中,并改名为tomcat
    
    • 1

    在这里插入图片描述
    查看tomcat文件及说明
    在这里插入图片描述

    我们如果要执行、持续运行一个java开发应用服务,在经过简单配置之后,可以直接将war包、jar包,放入到webapps中,来让tomcat运行。
    主要目录说明
    1、bin :存放启动和关闭Tomcat的脚本文件,比较常用的是:catalina.sh 、 startup.sh 、 shutdown.sh
    2、conf: 存放Tomcat服务器的各种配置文件,比较常用的是server.xml、context.xml、tomcat-users.xml、web.xml
    3、lib: 存放Tomcat服务器的jar包,一般不做任何改动,除非连接第三方服务,比如redis,那就需要添加对应的jar包。
    4、logs:存放Tomcat日志
    5、temp:存放Tomcat运行时产生的文件
    6、webapps:存放项目资源的目录
    7、work: Tomcat工作目录,一般清除Tomcat缓存的时候会使用到
    8、src: 存放Tomcat 的源代码
    9、doc: 存放Tomcat文档

    Tomcat配置文件详解
    1、catalina.policy :权限控制配置文件
    2、catalina.properties: Tomcat的属性配置文件
    3、context.xml : 上下文配置文件
    4、logging.properties:日志相关配置文件
    5、server.xml : 主配置文件,通过配置文件,可以修改tomcat的启动端口,网站目录,虚拟主机,开启https等功能
    6、tomacat-user.xml/.xsd: 管理用户配置文件
    7、web.xml: tomcal的servlet、servlet-mapping、filter、MIME等相关配置

    将启动脚本放入环境中方便启动

    后台启动
    /usr/local/tomcat/bin/startup.sh

    /usr/local/tomcat/bin/catalina.sh start
    前台启动(终端关闭,tomacat停止运行)
    /usr/local/tomcat/bin/catalina.sh run
    关闭
    /usr/local/tomcat/bin/shutdown.sh
    将启动关闭脚本放入到环境中
    ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
    ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin

    在这里插入图片描述
    启动tomcat
    在这里插入图片描述
    对8080端口进行访问
    在这里插入图片描述

    四、优化Tomcat启动速度

    第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。

    vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
    修改117行
    /dev/random和/dev/urandom都是伪终端,但是/dev/urandom提供的数据流更快
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    tomcat主配置文件

    #主配置文件/usr/local/tomcat/conf/server.xml
    #搜索8080(69行)
    connectionTimeout=“20000” #毫秒
    redirectPort=“8443” /> #SSL 重定向/映射443(https)

    在这里插入图片描述

    五、Tomcat虚拟主机配置

    很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat服务,这样会消耗太多的系统资源。此时,就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.ngs.com 和 www.sen.com,希望通过这两个域名访问到不同的项目内容。

    1.创建两个目录和文件

    添加地址映射

    [root@tomcat tomcat]# mkdir /usr/local/tomcat/webapps/ngs
    [root@tomcat tomcat]# mkdir /usr/local/tomcat/webapps/sen
    [root@tomcat tomcat]# echo "this is ngs" > /usr/local/tomcat/webapps/ngs/index.jsp
    [root@tomcat tomcat]# echo "this is sen" > /usr/local/tomcat/webapps/sen/index.jsp
    
    • 1
    • 2
    • 3
    • 4

    2.修改配置文件

    vim /usr/local/tomcat/conf/server.xml
    
    • 1
    <Host name="www.ngs.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
            <Context docBase="/usr/local/tomcat/webapps/ngs" path="" reloadable="true" />
    </Host>
    
            <Host name="www.sen.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
            <Context docBase="/usr/local/tomcat/webapps/sen" path="" reloadable="true" />
    </Host>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    Host name :主机名
    appBase :Tomcat程序工作目录,相对路径为webapps,绝对路径为/usr/local/tomcat/webapps
    unpackWARs :是否解压war包
    autoDeploy :指示Tomcat运行时,如有新的WEB应用是否允许自动部署
    xmlValidation :是否验证xml文件执行有效性检验的标志
    xmlNamespaceAware :是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
    docBase :WEB应用的目录
    path :设置访问的URI为WEB应用的根目录
    reloadable :是否在程序有改动时重新载入

    重启服务

    shutdown.sh     #关闭服务
    startuo.sh      #开启服务
    
    • 1
    • 2

    在这里插入图片描述

    3.验证

    访问www.ngs.com:8080
    在这里插入图片描述
    访问www.sen.com:8080
    在这里插入图片描述


    总结

    本文简要阐述了Tomcat的核心组件和功能组件的作用。分析了Tomcat的数据流向,以及Tomcat主机如何部署安装,如何优化。在安装 Tomcat 之前必须先安装JDK。server.xml为Tomcat 的主要配置文件,通过配置该文件,可以修改 Tomcat 的启动端口、网站目录、虚拟主机、开启https等重要功能。

  • 相关阅读:
    跨越边界:虚拟直播间席卷各行业领域,引爆下一代直播风暴
    uniapp android 原生插件开发-测试流程
    Android 通话常见错误码汇总
    RNA模型可以帮助发现疾病机制和候选药物
    物联网应用技术专业是属于什么类
    CodeForces Round #821 (div.2) A~C
    【网络篇】第十二篇——TCP协议通讯流程
    嵌入式养成计划-41----C++ auto--lambda表达式--C++中的数据类型转换--C++标准模板库(STL)--list--C++文件操作
    来自北大算法课的Leetcode题解:8. 字符串转换整数(atoi)
    STM TIM(二)输出比较
  • 原文地址:https://blog.csdn.net/S314118142/article/details/126693882