tomcat

1. Tomcat介绍与部署

1.1 Tomcat简介

tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。

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通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

1.2 Tomcat 功能组件结构:

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

1.3 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封装器

1.4 Tomcat请求过程

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

2. tomcat项目部署

2.1 java环境安装

//安装jdk环境
[root@node5 ~]# yum -y install java-17-openjdk*
.....安装过程略

//查看安装的版本
[root@node5 ~]# java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing)

2.2 tomcat部署

tomcat官网 下载tomcat

//下载tomcat
[root@node5 ~]# cd /usr/src/
[root@node5 src]# ls
debug  kernels
[root@node5 src]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz

//解压部署
[root@node5 src]# ls
apache-tomcat-9.0.65.tar.gz  debug  kernels
[root@node5 src]# tar xf apache-tomcat-9.0.65.tar.gz  -C  /usr/local/
[root@node5 src]# cd /usr/local/
[root@node5 local]# ln -s apache-tomcat-9.0.65/ tomcat 
[root@node5 local]# ll
total 0
drwxr-xr-x. 9 root root 220 Aug 17 15:15 apache-tomcat-9.0.65
drwxr-xr-x. 2 root root   6 May 19  2020 bin
drwxr-xr-x. 2 root root   6 May 19  2020 etc
drwxr-xr-x. 2 root root   6 May 19  2020 games
drwxr-xr-x. 2 root root   6 May 19  2020 include
drwxr-xr-x. 2 root root   6 May 19  2020 lib
drwxr-xr-x. 3 root root  17 Aug  3 15:24 lib64
drwxr-xr-x. 2 root root   6 May 19  2020 libexec
drwxr-xr-x. 2 root root   6 May 19  2020 sbin
drwxr-xr-x. 5 root root  49 Aug  3 15:24 share
drwxr-xr-x. 2 root root   6 May 19  2020 src
lrwxrwxrwx. 1 root root  21 Aug 17 15:16 tomcat -> apache-tomcat-9.0.65/



//写一个hello world的java页面
[root@node5 local]# cd tomcat/
[root@node5 tomcat]# ls
bin           CONTRIBUTING.md  logs       RELEASE-NOTES  webapps
BUILDING.txt  lib              NOTICE     RUNNING.txt    work
conf          LICENSE          README.md  temp
[root@node5 tomcat]# cd webapps/
[root@node5 webapps]# mkdir test 
[root@node5 webapps]# ls
docs  examples  host-manager  manager  ROOT  test
[root@node5 webapps]# cd test/
[root@node5 test]# vim index.jsp
[root@node5 test]# cat index.jsp 
<html>
<head>
        <title>test page</title>
</head>
<body>
        <%
            out.println("Hellow World");
        %>
</body>
</html>
[root@node5 test]# ll
total 4
-rw-r--r--. 1 root root 141 Aug 17 15:22 index.jsp





//配置环境变量启动tomcat
[root@node5 test]# echo 'export PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh 
[root@node5 test]# source  /etc/profile.d/tomcat.sh
[root@node5 test]# catalina.sh  start 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
[root@node5 test]# ss -antl 
State   Recv-Q  Send-Q         Local Address:Port     Peer Address:Port  Process  
LISTEN  0       128                  0.0.0.0:22            0.0.0.0:*              
LISTEN  0       128                     [::]:22               [::]:*              
LISTEN  0       1         [::ffff:127.0.0.1]:8005                *:*              
LISTEN  0       100                        *:8080                *:* 
  • 在浏览器上浏览网页
    在这里插入图片描述
    在这里插入图片描述

3 Tomcat主要目录及其文件说明

[root@node5 ~]# cd /usr/local/
[root@node5 local]# ll
total 0
drwxr-xr-x. 9 root root 220 Aug 17 15:15 apache-tomcat-9.0.65
drwxr-xr-x. 2 root root   6 May 19  2020 bin
drwxr-xr-x. 2 root root   6 May 19  2020 etc
drwxr-xr-x. 2 root root   6 May 19  2020 games
drwxr-xr-x. 2 root root   6 May 19  2020 include
drwxr-xr-x. 2 root root   6 May 19  2020 lib
drwxr-xr-x. 3 root root  17 Aug  3 15:24 lib64
drwxr-xr-x. 2 root root   6 May 19  2020 libexec
drwxr-xr-x. 2 root root   6 May 19  2020 sbin
drwxr-xr-x. 5 root root  49 Aug  3 15:24 share
drwxr-xr-x. 2 root root   6 May 19  2020 src
lrwxrwxrwx. 1 root root  21 Aug 17 15:16 tomcat -> apache-tomcat-9.0.65/
[root@node5 local]# ll tomcat/
total 128
drwxr-x---. 2 root root  4096 Aug 17 15:15 bin     //bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh startup.sh、shutdown.sh
-rw-r-----. 1 root root 19992 Jul 14 20:28 BUILDING.txt
drwx------. 3 root root   254 Aug 17 15:27 conf     //conf:存放Tomcat服务器的各种配置文件,如主配置文件 server.xml和应用默认的部署描述文件 web.xml
-rw-r-----. 1 root root  6210 Jul 14 20:28 CONTRIBUTING.md
drwxr-x---. 2 root root  4096 Aug 17 15:15 lib     //lib : 存放Tomcat运行需要的库文件的jar包,一般不作任何改动
-rw-r-----. 1 root root 57092 Jul 14 20:28 LICENSE
drwxr-x---. 2 root root   197 Aug 17 15:27 logs    //logs : 存放Tomcat执行时的日志
-rw-r-----. 1 root root  2333 Jul 14 20:28 NOTICE
-rw-r-----. 1 root root  3398 Jul 14 20:28 README.md
-rw-r-----. 1 root root  6901 Jul 14 20:28 RELEASE-NOTES
-rw-r-----. 1 root root 16505 Jul 14 20:28 RUNNING.txt
drwxr-x---. 2 root root    30 Aug 17 15:15 temp     //temp : 存放Tomcat运行时产生的文件 会定期自动删除
drwxr-x---. 8 root root    93 Aug 17 15:21 webapps     //webapps:存放Tomcat默认的web应用部署目录
drwxr-x---. 3 root root    22 Aug 17 15:27 work        //work:存放web应用代码生成和编译文件的临时目录
[root@node5 local]# cd tomcat/
[root@node5 tomcat]# ll bin/
total 892
-rw-r-----. 1 root root  34700 Jul 14 20:28 bootstrap.jar
-rw-r-----. 1 root root  16840 Jul 14 20:28 catalina.bat        
-rwxr-x---. 1 root root  25294 Jul 14 20:28 catalina.sh      //linux端启动脚本
-rw-r-----. 1 root root   1664 Jul 14 20:28 catalina-tasks.xml
-rw-r-----. 1 root root   2123 Jul 14 20:28 ciphers.bat
-rwxr-x---. 1 root root   1997 Jul 14 20:28 ciphers.sh
-rw-r-----. 1 root root  25410 Jul 14 20:28 commons-daemon.jar    
-rw-r-----. 1 root root 211777 Jul 14 20:28 commons-daemon-native.tar.gz
-rw-r-----. 1 root root   2040 Jul 14 20:28 configtest.bat    
-rwxr-x---. 1 root root   1922 Jul 14 20:28 configtest.sh    //检查配置文件
-rwxr-x---. 1 root root   9100 Jul 14 20:28 daemon.sh
-rw-r-----. 1 root root   2091 Jul 14 20:28 digest.bat
-rwxr-x---. 1 root root   1965 Jul 14 20:28 digest.sh
-rw-r-----. 1 root root   3606 Jul 14 20:28 makebase.bat
-rwxr-x---. 1 root root   3382 Jul 14 20:28 makebase.sh
-rw-r-----. 1 root root   3460 Jul 14 20:28 setclasspath.bat
-rwxr-x---. 1 root root   3708 Jul 14 20:28 setclasspath.sh
-rw-r-----. 1 root root   2020 Jul 14 20:28 shutdown.bat
-rwxr-x---. 1 root root   1902 Jul 14 20:28 shutdown.sh        //关闭服务脚本
-rw-r-----. 1 root root   2022 Jul 14 20:28 startup.bat
-rwxr-x---. 1 root root   1904 Jul 14 20:28 startup.sh        //启动服务脚本
-rw-r-----. 1 root root  47050 Jul 14 20:28 tomcat-juli.jar
-rw-r-----. 1 root root 436593 Jul 14 20:28 tomcat-native.tar.gz
-rw-r-----. 1 root root   4574 Jul 14 20:28 tool-wrapper.bat
-rwxr-x---. 1 root root   5540 Jul 14 20:28 tool-wrapper.sh
-rw-r-----. 1 root root   2026 Jul 14 20:28 version.bat
-rwxr-x---. 1 root root   1908 Jul 14 20:28 version.sh       //查看版本脚本

4. tomcat 界面进一步配置

  • 配置 server status 等图形化界面
    在这里插入图片描述
# 添加图形化角色
[root@node5 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml  
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>  //添加此3行
#重启服务
[root@node5 ~]# catalina.sh stop  
[root@node5 ~]# catalina.sh start

#配置context.xml文件
[root@node5 ~]# cd /usr/local/tomcat/webapps/manager/META-INF/
[root@node5 META-INF]# ls
context.xml
[root@node5 META-INF]# vim context.xml 
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="192\.168\.177\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />  //添加192.168.177.\d+  

[root@node5 META-INF]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml        
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="192\.168\.177\.\d+|:127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />  //添加192.168.177.\d+

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

5. 通过tomcat发布jenkins

jenkins官网

jenkins简介

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

jenkins工作原理

在这里插入图片描述

jenkins部署

  • 基本部署环境
    1.jdk环境,Jenkins是java语言开发的,因需要jdk环境(已经拥有)。
    2.git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。
    3.maven客户端,因一般java程序是由maven工程,需要maven打包,当然也有其他打包方式,如:gradle
  • 安装步骤

下载安装包

[图片]

[root@node5 ~]# cd /usr/local/tomcat/webapps/
[root@node5 webapps]# mv * /opt/
[root@node5 webapps]# ls
[root@node5 webapps]# wget https://get.jenkins.io/war-stable/2.346.3/jenkins.war
[root@node5 webapps]# ls
jenkins  jenkins.war  //Tomcat已自动生成目录 

#重启服务
[root@node5 webapps]# catalina.sh  stop 
[root@node5 webapps]# catalina.sh  start

进入浏览器访问jenkins 网址: http://localhost:8080/jenkins,(少许等待)

在这里插入图片描述

根据提示路径找到初始密码,激活系统

在这里插入图片描述

[root@node5 webapps]# cat /root/.jenkins/secrets/initialAdminPassword 
1c6d836e77324f6daa6ac0ebeb688b6b

进入插件安装选择 :推荐安装的插件保证基本常用的功能可以使用

在这里插入图片描述

选择后,进入插件安装页面(自动安装,等待即可)

在这里插入图片描述

安装完成后,创建初始账户密码

![在这里插入图片描述](https://img-blog.csdnimg.cn/d5323cd4aa2e4762908c3d80b700c416.png

进入系统,安装完成

在这里插入图片描述
请添加图片描述
请添加图片描述

请添加图片描述

  • 新建用户
    请添加图片描述
    请添加图片描述

使用jenkins部署项目

基本软件ip
tomcat+jenkins192.168.177.137
tomcat192.168.177.138

需求:通过192.168.177.137主机 部署jenkins 将项目打包传输的192.168.177.138主机 并可以通过浏览器访问到项目网页

  • 创建项目

请添加图片描述

  • 设置任务名称和类型
    请添加图片描述

  • 拉取代码
    请添加图片描述

  • 生成拉取代码的脚本
    请添加图片描述

  • 编写流水线脚本

pipeline {
    agent any 
    stages {
        stage("pull code"){
            steps {
                git 'https://github.com/chendao2015/tomcat-java-demo.git'
            }
            
        }  
    }
}
  • 编写完成后测试
    请添加图片描述

  • 开始构建
    请添加图片描述

  • 构建完成后 可以查看logs

请添加图片描述

  • 这里是下载后项目保存的路径
    请添加图片描述
  • 命令行内查看
[root@node5 ~]# cd .jenkins/workspace/test
[root@node5 test]# ls
db  Dockerfile  LICENSE  pom.xml  README.md  src  
  • 打包
#安装打包工具
yum install maven -y
#编写打包脚本
pipeline {
    agent any 
    stages {
        stage("pull code"){
            steps {
                git 'https://github.com/chendao2015/tomcat-java-demo.git'
            }
        }    
        stage("make pkg"){
            steps {
                sh """
                    mvn clean package -Dmaven.test.skip=true
                """
            }
        }  
    }
}
#命令行查看项目test目录
[root@node5 test]# cd target/   //target为打包后生成的目录
[root@node5 target]# ls
classes            ly-simple-tomcat-0.0.1-SNAPSHOT      maven-archiver
generated-sources  ly-simple-tomcat-0.0.1-SNAPSHOT.war  maven-status

  • 部署
    需要在192.168.177.137主机部署tomcat 详细过程请查看上面的tomcat部署
#配置免密登陆
[root@node5 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ILexF+o4ascaGiaXqsJ4gx+KbvUjWp+x8ZMfEtzeS2k root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|    . + .        |
|     o.*..       |
|      +oS.       |
|   o o .o . .    |
|=o*o+o...o E     |
|BO==++*o. + .    |
|@*=+.+..o. .     |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.177.137
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.177.137 (192.168.177.137)' can't be established.
ECDSA key fingerprint is SHA256:qoJI5joraUlKD9iXhfj+GRVHvegeRitHHDZexhWLOLs.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.177.137's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.177.137"
and check to make sure that only the key(s) you wanted were added.

# 登陆验证
[root@localhost ~]# ssh root@192.168.177.137
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Thu Aug 18 14:12:17 2022 from 192.168.220.1
[root@node5 ~]# ip addr show ens33 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:8c:8e:d5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.177.137/24 brd 192.168.220.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe8c:8ed5/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
#编写输出脚本 
pipeline {
    agent any 
    stages {
        stage("pull code"){
            steps {
                git 'https://github.com/chendao2015/tomcat-java-demo.git'
            }
        }    
        stage("make pkg"){
            steps {
                sh """
                    mvn clean package -Dmaven.test.skip=true
                """
            }
        } 
        stage("publish"){
            steps {
                sh """
                    cd /root/.jenkins/workspace/test/target/
                   scp ly-simple-tomcat-0.0.1-SNAPSHOT.war   root@192.168.177.137:/usr/local/tomcat/webapps/
                   ssh root@192.168.177.137 '/usr/local/tomcat/bin/catalina.sh stop && /usr//local/tomcat/bin/catalina.sh start'
                   """
            }
        }
    }
}


  • 启动构建
    请添加图片描述

  • 192.168.177.137主机查看

[root@node5 ~]# cd /usr/local/tomcat/webapps/
[root@node5 webapps]# ls
docs  examples  host-manager  ly-simple-tomcat-0.0.1-SNAPSHOT  ly-simple-tomcat-0.0.1-SNAPSHOT.war  manager  ROOT

#关闭防火墙和selinux
[root@localhost webapps]# systemctl disable --now firewall
[root@localhost webapps]# setenforce 0


  • 网页访问
    请添加图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值