Tomcat 部署优化

news2024/10/7 19:19:50

目录

一.Tomcat介绍

二.了解Tomcat里面里面是放什么的

三. Tomcat:是一个特殊的服务   有两个领域

 四.tomcat概述

五.再加上那个扩展java虚拟机(JVM) 调优  

tomcat 优化分两种

六.Tomcat核心组件

​编辑 容器:什么是容器

web容器:完成web服务的功能

Serviet容器:

JSP 容器: 

七.tomcat核心组件

八. Tomcat处理请求(内部数据流向图)

8.1Tomcat的功能组件结构

九.Tomcat 请求过程

一.实战部署

1.Tomcat 服务部署

二.安装启动Tomcat

三.优化tomcat启动速度 

四.Tomcat 虚拟主机配置

1.创建 kgc 和 benet 项目目录和文件

五.客户端浏览器访问验证 


一.Tomcat介绍

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

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器

二.了解Tomcat里面里面是放什么的

 Tomcat:是以 java代码运行的平台 ,里面放置着我们正常用的的也软件app如 支付宝、健康码。小程序、抖音自媒体、拼多多等  这些就是用java代码写的

三. Tomcat:是一个特殊的服务   有两个领域

开发、研发领域 

共同点

共同维护

 四.tomcat概述

1.Tomcat核心组件

  1.1tomcat 由那些系列的组件机构

  1.2tomcat 核心组件如何进行交互

  1.3tomcat 功能组件机构

    1.3.1  container 结果  (分析)

2.tomcat 处理请求  (内部数据流向)这是重点

3.tomcat 部署步骤

4.tomcat 主要目录说明  这是重点

5.tomcat 虚拟机的配置

6.tomcat 优化 

7.tomcat 多实列部署

五.再加上那个扩展java虚拟机(JVM) 调优  

tomcat 优化分两种

1.tomcat 配置文件优化

2.tomcat 虚拟机 (JVM调优)

六.Tomcat核心组件

 容器:什么是容器

 举个例子 水杯就最普通的容器 水就是封装的对象

web容器:完成web服务的功能

tomcat web 应用服务  web--可以通过httpd(s)来访问的页面--》会指向文件

web容器--》就是封装了一组文件  集中化管理--》一组组员对象

说白点就是 web动态页面

Serviet容器:

就是catalina处理Servlet代码

JSP 容器: 

将JSP动态页面翻译成Servlet代码交给 Servlet 代码

index.php-->php  index.jsp--tomcat   hyml--> nginx

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

七.tomcat核心组件


1、Web容器 :①接受、响应请求
             ② 展示动态页面      
               入口  出口
2、JSP容器:翻译java--> servlet
index.html --》 nginx可以直接展示index.php

index.jsp --> java环境---》和数据库怎么进行交互,怎么连接到后端???

index.jsp---》java类代码---》就是执行对接后端的执行代码,所以我们需要在进行与用户交互时,将用户发出的请求、数据、传输到后端 
但是index.jsp中的一些java代码无法直接执行对接或者调用,需要先翻译魏可以可直接执行的代码方式---》格式serverlet 代码格式

3、serverlet容器:serverlet代码格式就是用JSP容器来处理
简介:
web容器:1、接受、响应请求  2 、 展示动态页面
JSP容器:翻译java--->servlet
Serverlet容器:借助于catalina来执行servelet代码(动态任务执行的标准格式)

八. Tomcat处理请求(内部数据流向图)

总:用户访问数据经过nginx发送到web容器用index.php类型页面接收Java代码再到JSP容器将前面的index.jsp的代码翻译为servlet代码后交给servlet容器处理通过api接口调用数据库中的信息后再次回给用户。

8.1Tomcat的功能组件结构


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

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

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

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

8.5Container 结构分析(包含了 4 个子容器)
每个 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 请求过程


Tomcat 请求过程图示

开发java——写代码——编译jar——打包(war 、jar)
运维放在tomcat并行放在/webapps 当启动tomcat时会自动把包解压,解压成项目目录

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

5.Tomcat 详细请求过程
假设来自客户的请求为: http://localhost:8080/blue/blue_index.jsp
(1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
(2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
(3) Engine获得请求localhost/blue/blue_index.jsp,匹配它所拥有的所有虚拟主机Host
(4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
(5) localhost Host获得请求/blue/blue_index.jsp,匹配它所拥有的所有Context
(6) Host匹配到路径为/blue的Context(如果匹配不到就把该请求交给路径名为"“的Context去处理)
(7) path=”/blue"的Context获得请求/blue_index.jsp,在它的mapping table中寻找对应的servlet
(8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
(9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
(10)Context把执行完了之后的HttpServletResponse对象返回给Host
(11)Host把HttpServletResponse对象返回给Engine
(12)Engine把HttpServletResponse对象返回给Connector
(13)Connector把HttpServletResponse对象返回给客户browser

6.Tomcat容器和功能组件
6.1结构图示

tomcat可以作为运行Java代码环境,只要把Java代码(.class可执行的类文件)或者war包或jar包放在/webapps中,那么在tomcat启动时,就可以解压并运行放在/webapps中的这些应用(只需要修改配置文件)

一.实战部署

1.Tomcat 服务部署

1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
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-8u371-linux-x64.rpm
rpm -ivh jdk-8u371-linux-x64.rpm 
java -version

 3.设置JDK环境变量

3.设置JDK环境变量
vim /etc/profile.d/java.sh
                                          
export JAVA_HOME=/usr/java/jdk1.8.0-x64                           #定义环境变量
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar #定义环境变量
export PATH=$JAVA_HOME/bin:$PATH                                  #定义环境变量


source /etc/profile.d/java.sh                   #刷新文件,使立即生效
java -version                                   #再次查看JDK版本                
   

3.1先在再开个终端 把7号 路径复制大1号机哪里的配置文件里

3.2 这边贴上路径

3.3  在再回到2号机这边在把  tools.jar 复制

3.4 贴在这边  配置文件就更改完成了

 4.写一个java代码测试java是否安装完成

vim Hello.java

public class Hello {			
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

javac Hello.java   #对源代码进行编译
java Hello         #执行
Hello WOrld!      #测试成功

 

二.安装启动Tomcat

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

1.解压apache到当前目录

cd /opt
tar xf apache-tomcat-8.5.16.tar.gz   #解压tomcat安装包

#将解压后的源码包目录拷贝至/usr/local/下并重命名为tomcat
mv apache-tomcat-8.5.16 /usr/local/tomcat

  2.##启动tomcat ##(去bin目录下

 ##启动tomcat ##(去bin目录下)
 #后台启动
 /usr/local/tomcat/bin/startup.sh
 或
 /usr/local/tomcat/bin/catalina.sh start
 ​
 #前台启动
 /usr/local/tomcat/bin/catalina.sh run
 ​
 netstat -natp | grep 8080

 3. #浏览器访问测试

 浏览器访问Tomcat的默认主页192.168.158.22:8080  端口号为8080

三.优化tomcat启动速度 

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

 vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
 --117行--修改这一行
 securerandom.source= file:/dev/urandom  #修改成伪随机数生成器,优化启动速度

四.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

修改 Tomcat 主配置文件 server.xml
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>   

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

 /usr/local/tomcat/bin/shutdown.sh     关闭 
/usr/local/tomcat/bin/startup.sh      启动

五.客户端浏览器访问验证 


echo "192.168.158.22 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://www.kgc.com:8080/   页面显示This is kgc page\! 

HTTP 请求过程:
(1)Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
(2)因为引擎的默认虚拟主机是 www.kgc.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
(3)访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/kgc 目录,解析 index.jsp 并返回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dart语法01-变量、内置类型、操作符、方法与异常

Dart基础 文章目录 Dart基础变量final与const 内置的类型Numbers&#xff08;数值&#xff09;Strings&#xff08;字符串&#xff09;Booleans&#xff08;布尔值&#xff09;Lists&#xff08;列表&#xff09;Maps&#xff08;映射集合&#xff09;Runes&#xff08;用于在字…

用八叉树检测点云是否发生变化

检测点云数据集之间的空间变化有以下几个用处&#xff1a; 目标跟踪与物体识别&#xff1a;空间变化检测可以用于实时更新点云数据中的物体位置、姿态、形状等信息。这对于目标跟踪和物体识别非常重要&#xff0c;可以帮助我们在动态场景中准确地识别和跟踪物体&#xff0c;从而…

Maven下载安装及其配置

Maven下载安装及其配置 文章目录 Maven下载安装及其配置1、Maven介绍2、Maven下载安装2.1、最新2.2、旧版3.8 3、Maven环境配置3.1、配置3.2、验证3.3、 配置本地仓库 4、Maven使用4.1、Maven常用命令4.2、IDEA中的使用 1、Maven介绍 Maven 是一个流行的构建工具和依赖管理工具…

使用Excel和PowerPoint设计24小时甘特图

1.前期调研 可以使用Project软件、在线甘特图MindsUP等来设计&#xff0c;可是我的需求是记录周边几个单位每天的开闭馆时间&#xff0c;而不是按照天、月等来记录项目周期。因此&#xff0c;这些软件不符合我的需求&#xff0c;必须用excel来设计。 2.excel录入数据 &#xf…

云时代已至,新一代数据分析平台是如何实现的?

2023 年 5 月&#xff0c;由 Stackoverflow 发起的 2023 年度开发者调查数据显示&#xff0c;PostgreSQL 已经超越 MySQL 位居第一&#xff0c;成为开发人员首选。PostgreSQL 在国内的热度也越来越高。6 月 17 日&#xff0c;PostgreSQL 数据库技术峰会在成都顺利召开。本次大会…

深入理解 Golang: 锁

本文通过对 Go 中源码层面的加锁、解锁实现细则来介绍锁的操作&#xff0c;包括 Mutex 互斥锁、RWMutex 读写锁&#xff0c;以及它们底层依赖的 sema 信号锁。 atomic 原子操作 正常情况下&#xff0c;多个协程同时操作 num 时&#xff0c;不能保证 num 值得最终一致性&#x…

锈湖新作地铁繁花试玩版正式上线啦

地铁繁花是锈湖厂商新作点击式解谜冒险解谜游戏&#xff0c;英文名称为“Underground Blossom”&#xff0c;在游戏中你将深入锈湖的地下&#xff0c;扮演并追溯Laura Vanderboom的人生和记忆吧&#xff01;从一个车站到另一个车站&#xff0c;每个地铁站都象征着劳拉的一段过去…

语音芯片WT2003H-B003,集成压力传感与语音提示的按摩器创新方案

​在如今追求健康、舒适生活方式的时代&#xff0c;压力传感技术与语音提示功能的结合正引领着按摩器行业的创新浪潮。WT2003H-B003语音芯片IC作为一款独具价值的语音芯片&#xff0c;以其集成了先进的压力传感算法和语音提示功能&#xff0c;为按摩器压感方案带来了全新的体验…

Selenium修改HTTP请求头三种方式

目录 什么是HTTP请求头 需要更改HTTP请求请求头 Selenium修改请求头 Java HTTP请求框架 代码实战 使用反向代理 使用 Firefox 扩展 下载火狐浏览器扩展 加载火狐扩展 设置扩展首选项 设置所需的功能 完整自动化用例 总结&#xff1a; 什么是HTTP请求头 HTTP请求头…

科普 | 什么是5G消息平台功能完备性认证,怎么才能获得5G消息平台功能完备性证书

5G消息平台功能完备性测试是由中国信息通信研究院同中国通信企业协会在5G消息工作组共同发起&#xff0c;旨在提升CSP的5G消息平台质量&#xff0c;促进5G消息业务发展。 测试针对5G消息平台的Chatbot下行消息交互、Chatbot接收消息、消息平台业务配置管理、消息平台业务统计管…

智能故障诊断的深度学习模型复杂度指标计算(MACs、Params)

引言: 对于智能故障诊断任务而言,受限于现场工业设备设施的算力,模型在轻量化上具有典型需求。因此,在保证模型精准性的同时尽量降低模型的复杂度是必要的,本博客对模型的复杂度概念进行了剖析,并在pytorch框架下对相关热门轻量级模型的复杂度评估进行了分析。 深度学习…

容智信息荣获2023第三届中国RPA+AI开发者大赛多项大奖

近日&#xff0c;历时数月的「2023第三届中国RPAAI开发者大赛」在苏州圆满收官。本次大赛由RPA中国联合全球人工智能产品应用博览会主办&#xff0c;容智信息作为顶级联合主办单位&#xff0c;主旨挖掘人才&#xff0c;促进RPA和AI技术在社会各领域的融合性应用。 这次大赛的主…

计算机网络————应用层

文章目录 概述域名系统DNS域名结构域名服务器解析过程常见的DNS记录DNS报文格式基础结构部分问题部分资源记录(RR, Resource Record)部分 万维网WWWURLHTTPHTTP发展HTTP报文结构请求报文响应报文 cookie 内容分发网络CDN 概述 应用层的具体内容就是规定应用进程在通信时所遵循的…

JS中常用内置对象

真正原创的东西很少&#xff0c;能抄明白就很不容易了 文章目录 数组常用方法❗push 数据增加到尾部并返回unshift 数据增加到头部并返回pop 删除最后一个数据并返回shift 删除第一个数据并返回sort 数组排序reverse 数组逆序concat 合并多个数组的数据并返回join 数据连接成字…

SpringBoot Thymeleaf企业级真实应用:使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(四) 表格中断问题

接上一篇 SpringBoot Thymeleaf企业级真实应用&#xff1a;使用Flying Saucer结合iText5将HTML界面数据转换为PDF输出(三) 给pdf加水印、页眉页脚、页眉logo 设置表格的css样式 table {/*分页时表格换行, 可不用, 使用表格行换行即可*//*page-break-before: always;*/border-…

QT简易加法计算器项目实现

完整代码见GitHub&#xff1a;点击进入 在该项目中&#xff0c;使用了三个文件&#xff0c;分别是CalculatorDialog.h, CalculatorDialog.cpp, main.cpp CalculatorDialog.h&#xff1a;在该头文件里定义了一些成员变量和槽函数&#xff0c;用于实现计算器基本功能。Calculator…

Springboot的自动装配解读

目录 1.Springboot的自动装配 1.1 组件装配 1.1.1 组件 1.2 Spring Framework 的模块装配 1.2.1 Import注解 1.2.2 BeanDefinition 1.3 Spring Framework 的条件装配 1.3.1 Profile 1.3.2 Conditional 1.3.3 MetaData元数据接口&#xff08;补充&#xff09; Annot…

4、离线数仓数据同步策略(全量表数据同步、增量表数据同步、首日同步、采集通道脚本)

1、离线数仓同步数据 1.1 用户行为数据同步 1.1.1 数据通道 用户行为数据由Flume从Kafka直接同步到HDFS&#xff0c;由于离线数仓采用Hive的分区表按天统计&#xff0c;所以目标路径要包含一层日期。具体数据流向如下图所示。 1.1.2 日志消费Flume配置概述 按照规划&…

【选择排序】手撕八大排序之直接选择排序和堆排序

目录 一.选择排序 1.直接选择排序 2.堆排序 一.选择排序 1.直接选择排序 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的基本思想是每次遍历找到最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放置在已排序序列的末尾。在…

实操接口自动化测试项目之项分层设计

本文以笔者当前使用的自动化测试项目为例&#xff0c;浅谈分层设计的思路&#xff0c;不涉及到具体的代码细节和某个框架的实现原理&#xff0c;重点关注在分层前后的使用对比&#xff0c;可能会以一些伪代码为例来说明举例。 接口测试三要素&#xff1a; 参数构造发起请求&a…