Tomcat的部署
作者:mmseoamin日期:2023-12-27

Tomcat

    • 一、Tomcat概述
        • Tomcat 的组件介绍
        • 二、Tomcat 功能组件结构:
            • Container 结构分析:
            • 三、Tomcat 请求过程
                • 客户端请求过程
                • 四、Tomcat 服务部署
                    • 关于jdk
                    • 1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
                    • 2.安装JDK
                    • 3.设置JDK环境变量
                    • 补充
                    • 4.安装启动Tomcat
                    • 五、Tomcat 虚拟主机配置
                        • 1.创建 kgc 和 benet 项目目录和文件
                        • 2.修改 Tomcat 主配置文件 server.xml
                        • Host
                        • 3.客户端浏览器访问验证
                        • HTTP 请求过程:
                        • 六、Tomcat多实例部署
                            • 1.安装好 jdk
                            • 2.安装 tomcat
                            • 3.配置 tomcat 环境变量
                            • 4.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
                            • 5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
                            • 6.启动各 tomcat 中的 /bin/startup.sh
                            • 7.浏览器访问测试

                              一、Tomcat概述

                              • Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
                              • Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
                              • 一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
                                Tomcat 的组件介绍

                                由一系列的组件构成,其中核心的组件有三个

                                (1)Web 容器:完成 Web 服务器的功能。

                                (2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。

                                (3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

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

                                • servlet

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

                                • JSP

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

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

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

                                  二、Tomcat 功能组件结构:

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

                                  在这里插入图片描述

                                  • Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。

                                  • Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。

                                  • Service:对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件Tomcat 可以管理多个 Service,且各个Service 之间相互独立。

                                    Container 结构分析:

                                    每个 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 封装器。

                                      三、Tomcat 请求过程

                                      在这里插入图片描述

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

                                        1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得

                                        2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应

                                        3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等

                                        4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给Connector,并通过 Connector 返回给客户端

                                        四、Tomcat 服务部署

                                        • 下载并安装JDK
                                        • 安装并启动Tomcat
                                        • 配置虚拟主机

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

                                          关于jdk

                                          ava 需要 jdk 环境

                                          jdk包通常会包含 JDK、JRE、JVM

                                          • JDK:java开发工具
                                          • JRE:java编译、运行时环境
                                          • JVM:java虚拟机,可使java程序在不同平台上运行
                                            1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
                                            jdk-8u201-linux-x64.rpm
                                            apache-tomcat-9.0.16.tar.gz
                                            systemctl stop firewalld
                                            systemctl disable firewalld
                                            setenforce 0
                                            

                                            在这里插入图片描述

                                            2.安装JDK
                                            cd /opt
                                            rpm -qpl jdk-8u201-linux-x64.rpm 
                                            rpm -ivh jdk-8u201-linux-x64.rpm 
                                            java -version
                                            
                                            3.设置JDK环境变量
                                            vim /etc/profile.d/java.sh
                                            export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
                                            export JRE_HOME=$JAVA_HOME/jre
                                            export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
                                            export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
                                            source /etc/profile.d/java.sh
                                            java -version
                                            

                                            在这里插入图片描述

                                            在这里插入图片描述

                                            补充
                                            • 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包。
                                              首先使用文本工具编写java源代码,比如 Hello.java ;
                                              在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
                                              编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。
                                              vim Hello.java
                                              #类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
                                              一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
                                              public class Hello {			
                                                public static void main(String[] args){
                                                  System.out.println("Hello world!");
                                                }
                                              }
                                              javac Hello.java
                                              java Hello
                                              

                                              在这里插入图片描述

                                              在这里插入图片描述

                                              4.安装启动Tomcat
                                              cd /opt
                                              tar zxvf apache-tomcat-9.0.16.tar.gz
                                              mv apache-tomcat-9.0.16 /usr/local/tomcat
                                              ##启动tomcat ##
                                              #后台启动
                                              /usr/local/tomcat/bin/startup.sh 
                                              或
                                              /usr/local/tomcat/bin/catalina.sh start	
                                              	
                                              #前台启动
                                              /usr/local/tomcat/bin/catalina.sh run		
                                              netstat -natp | grep 8080
                                              

                                              在这里插入图片描述

                                              在这里插入图片描述

                                              在这里插入图片描述

                                              vim /usr/lib/systemd/system/tomcat.service
                                              [Unit]
                                              Description=tomcat server
                                              Wants=network-online.target
                                              After=network.target
                                              [Service]
                                              Type=forking
                                              Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
                                              Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
                                              Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
                                              ExecStart=/usr/local/tomcat/bin/startup.sh
                                              ExecStop=/usr/local/tomcat/bin/shutdown.sh
                                              Restart=on-failure
                                              [Install]WantedBy=multi-user.target
                                              

                                              在这里插入图片描述

                                              浏览器访问Tomcat的默认主页 http://192.168.80.100:8080
                                              

                                              在这里插入图片描述

                                              五、Tomcat 虚拟主机配置

                                              很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。

                                              例如现在新增两个域名 www.kgc.com 和 www.benet.com, 希望通过这两个域名访问到不同的项目内容。

                                              1.创建 kgc 和 benet 项目目录和文件
                                              mkdir /usr/local/tomcat/webapps/kgc
                                              mkdir /usr/local/tomcat/webapps/benet
                                              echo "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
                                              echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp
                                              

                                              在这里插入图片描述

                                              2.修改 Tomcat 主配置文件 server.xml
                                              vim /usr/local/tomcat/conf/server.xml
                                              --165行前--插入
                                              
                                              	
                                              
                                              
                                              	
                                              
                                              

                                              在这里插入图片描述

                                              Host
                                              name:主机名
                                              appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
                                              unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
                                              autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
                                              xmlValidation:是否验证xml文件执行有效性检验的标志
                                              xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
                                              Context
                                              docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
                                              path:相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径 / ;
                                              reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
                                              
                                              /usr/local/tomcat/bin/shutdown.sh
                                              /usr/local/tomcat/bin/startup.sh
                                              
                                              3.客户端浏览器访问验证
                                              echo "192.168.80.100 www.kgc.com www.benet.com" >> /etc/hosts
                                              浏览器访问 http://www.kgc.com:8080/   页面显示This is kgc page\! 
                                              浏览器访问 http://www.benet.com:8080/   页面显示This is benet page\!
                                              

                                              在这里插入图片描述

                                              在这里插入图片描述

                                              HTTP 请求过程:
                                              • (1)Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。

                                              • (2)因为引擎的默认虚拟主机是 www.kgc.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。

                                              • (3)访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/kgc 目录,解析 index.jsp 并返回。

                                                六、Tomcat多实例部署

                                                1.安装好 jdk
                                                2.安装 tomcat
                                                cd /opt
                                                tar zxvf apache-tomcat-9.0.16.tar.gz
                                                mkdir /usr/local/tomcat
                                                mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
                                                cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
                                                

                                                在这里插入图片描述

                                                3.配置 tomcat 环境变量
                                                vim /etc/profile.d/tomcat.sh
                                                #tomcat1
                                                export CATALINA_HOME1=/usr/local/tomcat/tomcat1
                                                export CATALINA_BASE1=/usr/local/tomcat/tomcat1
                                                export TOMCAT_HOME1=/usr/local/tomcat/tomcat1
                                                #tomcat2
                                                export CATALINA_HOME2=/usr/local/tomcat/tomcat2
                                                export CATALINA_BASE2=/usr/local/tomcat/tomcat2
                                                export TOMCAT_HOME2=/usr/local/tomcat/tomcat2
                                                source /etc/profile.d/tomcat.sh
                                                

                                                在这里插入图片描述

                                                4.修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
                                                vim /usr/local/tomcat/tomcat2/conf/server.xml
                                                		#22行,修改Server prot,默认为8005 -> 修改为8006
                                                 修改为8081
                                                	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
                                                
                                                • 第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
                                                • 第二个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。
                                                  5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
                                                  vim /usr/local/tomcat/tomcat1/bin/startup.sh 
                                                  # Start Script for the CATALINA Server
                                                  ##添加以下内容
                                                  export CATALINA_BASE=$CATALINA_BASE1
                                                  export CATALINA_HOME=$CATALINA_HOME1
                                                  export TOMCAT_HOME=$TOMCAT_HOME1
                                                  

                                                  在这里插入图片描述

                                                  vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
                                                  # Stop script for the CATALINA Server
                                                  export CATALINA_BASE=$CATALINA_BASE1
                                                  export CATALINA_HOME=$CATALINA_HOME1
                                                  export TOMCAT_HOME=$TOMCAT_HOME1
                                                  

                                                  在这里插入图片描述

                                                  vim /usr/local/tomcat/tomcat2/bin/startup.sh 
                                                  # Start Script for the CATALINA Server
                                                  export CATALINA_BASE=$CATALINA_BASE2
                                                  export CATALINA_HOME=$CATALINA_HOME2
                                                  export TOMCAT_HOME=$TOMCAT_HOME2
                                                  

                                                  在这里插入图片描述

                                                  vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
                                                  # Stop script for the CATALINA Server
                                                  export CATALINA_BASE=$CATALINA_BASE2
                                                  export CATALINA_HOME=$CATALINA_HOME2
                                                  export TOMCAT_HOME=$TOMCAT_HOME2
                                                  

                                                  在这里插入图片描述

                                                  6.启动各 tomcat 中的 /bin/startup.sh

                                                  在这里插入图片描述

                                                  /usr/local/tomcat/tomcat1/bin/startup.sh 
                                                  /usr/local/tomcat/tomcat2/bin/startup.sh 
                                                  netstat -natp | grep java
                                                  
                                                  7.浏览器访问测试
                                                  http://192.168.57.20:8080
                                                  http://192.168.57.20:8081
                                                  

                                                  在这里插入图片描述

                                                  在这里插入图片描述