tomcat

Tomcat

|-----------------------------------------------------------------------------------------|
| 他是一个开源的web应用服务器,区别nginx,nginx主要处理静态页面,而动态请求(连接数据库,页面动态),并不是nginx处理的长处,动态请求会交给tomcat进行处理 |
| 通过nginx ----- 转发动态请求 -----tomcat |

Tomcat 的功能

|------------------|-----------------------------------------------------------------------------------------------------------------------|
| 1 (实际工作中主要使用的功能) | 处理动态页面 |
| 2 (实际工作中主要使用的功能) | 处理后端请求(调用数据库服务器) |
| 3 | 易部署,tomcat会自动识别配置文件,自动部署运行 |
| 4 | 轻量级的服务软件,一般来处理中小架构的网站可以满足,大型的交互需求就不是tomcat的长处了,有些公司会使用python,node.js,容器化来处理,在容器化部署的项目架构中是不使用tomcat的,都是用jar包直接运行,包括k8s |

Tomcat的核心组件

|---------|------------------------------------------------------------------------------------------|
| web容器 | 主要是完成web功能,处理请求也是nginx转发的http(https也有)请求,处理的是一个动态的页面(它是基于java代理编译的页面),处理后端的请求(转发到数据库的请求) |
| servlet | catalina是整个tomcat处理的底层逻辑,既处理web请求的动页面,也处理后端请求(数据库) |
| jsp | jsp会把动态翻译成servlet的代码,用编译后的规则,显示代码的静态页面 |

静态页面

html

动态页面

1.php inex.php

2.Jsp index.jsp ----java 格式写成的代码,靠jsp翻译,servlet执行编译的代码,最后展示结果

Servlet jsp 解释

容器是什么

|----|----------------------------------------------------------------------------------------------------------------|
| 容器 | 容器通常指的是一种虚拟化的技术,运行在当前的操作系统中虚拟化的运行多个独立的环境,独立运行的环境就是我们说的容器,彼此之间相互隔离,拥有自己的一套系统资源,宿主,容器寄生在宿主身上,实际使用的就是宿主的资源,docker |

Servlet容器

|-----------|---------------------------------------------------------------------------|
| servlet容器 | 用于开发web应用程序的关键组件,处理http请求,生产动态内容以及客户端之间的交互,前端交互,后端数据库服务器交互,和redis缓存交互 |
| 1 | 处理http请求 |
| 2 | 生成动态页面内容 |
| 3 | 会话管理,可以处理用户会话,跟踪用户在不同请求之间的状态,servlet可以在用户访问不同页面时,保持用户的状态信息,购物车同步,用户同步登录等等 |

类:java当中,用来调用各种方法,由开发人员自定义的

Jsp

|-------------------|------------------------------------------------|
| java server pages | 动态页面的开发技术,使用jsp的标签可以在HTML(html)的网页当中可以插入java代码 |
| 格式 | <%:开头 %>:结尾 |
| jsp | 可以实现java应用程序的访问界面(用户界面),或者访问数据库,生成页面内容 |

Tomcat的核心功能

功能部分由两个块组成

|----|------------------------|
| 1. | 接收和响应外部请求的连接器connector |
| 2. | 负责处理请求的container |

四个工作组件

|----------|--------------------------------|
| engine引擎 | 管理多个虚拟主机,一个tomcat里面只能有一个engine |
| host | 代表站点,也就是虚拟机,一个engine可以有多个host |
| context | 一个context执行一个web应用 |
| wrapper | 最底层,处理和变异代码,然后运行结果,最后层层返回上级到用户 |

JDK:开发工具包,开发java的应用程序,jdk包括:编译器,调试器,等等以及java的类库

开发者用来创建,编译运行java程序的重要组件

Jvm:java的虚拟机,主要负责编译后的java字节码,变成本地的机器码,运行java的代码

Jvm:内存管理,垃圾回收机制,线程管理,

Tomcat文件作用

|------------|----------------------------------------------|
| bin | 存放启动或关闭tomcat的脚本文件,如startup.sh , shutdown.sh |
| server.Xml | tomcat的主配置文件 |
| logs | catalina.out tomcat的日志文件 |
| webapps | tomcat默认的web应用的部署目录 |
| work | tomcat的工作目录,存放jsp里面代码编译之后产生的class文件,清缓存会用到 |

bash 复制代码
1.systemctl stop firewalld
2.setenforce 0
#关防火墙
3.cd /opt
4.rpm -ivh jdk-8u201-linux-x64.rpm
#安装
5.java -version
6.tar -xf apache-tomcat-9.0.16 /usr/local/tomcat
#解压到 /usr/local/tomcat
7.vim /etc/profile.d/java.sh
export JAVA HOME=/usr/java/jdk1.8.0 201-amd64
#设置java home的环境变量,指向Jdk,也就是java的工作目录
export CLASSPATH=.:$JAVA HOME/ b/tools.jar:$JAVA HOME/Lib/dt.jar
#java类的搜索路径
export PATH=$JAVA HOME/bin:$PATH
#把java的可执行命令添加到系统的环境变量当中。
8.cd /usr/local/tomcat/conf
9.cd /usr/local/tomcat/bin
10.netstat -antp | grep 8080
#端口没起
11../startup.sh
#启动

启动成功

Tomcat配置虚拟主机

  1. 配置工作目录
  2. 在公司当中会运行多个项目,一台部署tomcat太多会浪费资源,所以会在tomcat中配置多个主机,通过不同域名访问不同的内容
  3. 请求连接到连接器,连接的端口是8080,连接器接受请求
  4. www,kgc,com 引擎管理虚拟机----host----www,kgc,com------context---访问www,kgc,com该主机的工作目录----webapps/kgc--------index.jsp-----wrapper-----servletl来解析index.jsp内容
  5. 响应的内容返回到客户端
bash 复制代码
1.cd /usr/local/tomcat/webapps
2.mkdir kgc benet
3.vim usr/local/tomcat/webapps/kgc或benet/index.jsp
#分别进入kgc与benet目录编辑文件输入内容保存
4.echo "192.168.233.xx www.kgc.com www.benet.com"
#配置本地域名映射
5.cd /usr/local/tomcat/bin
6../shutdown.sh
7../startup.sh
#到虚拟机里打开浏览器输入:www.kgc或benet.com:8080

重点

Tomcat的优化

Tomcat不是很好用,默认配置并不适合生产环境,以默认环境运行会频繁出现假死。

需要通过压力测试不断优化,提高稳定。

优化有三个方面

  1. 配置文件优化
  2. Jvm优化
  3. 操作系统优化(内核优化)

Tomcat配置文件优化

    1. maxThreads="200" ,

tomcat 使用线程来处理接收的每个请求,可以创建的最大线程数,支持最大的并发连接数 200

minSpareThreads

#最小空闲线程数,tomcat启动时的初始化线程数,表示没人请求,也要打开这些空的线程等待请求10

maxSpareThreads

最大备用线程数,创建线程超过这个值,tomcat会关闭不再需要的线程,默认是-1(不做限制)

connnectiontimeout

#网络连接超时,一般设置为20000毫秒

enableLookups="fals"

#是否反查反向解析域名,一般不做解析,所以写成fals,提高效率

disableUploadTimeout="true"

#上传文件时,是否启用超时限制

connectionUploadTimeout="15000"

#上传比下载要耗时,根据需求自定义

accpetCount="100"

#所以得可以使用的线程都被占用,可以传入的队列长度的最大值,默认是100个等待数

compression="on" 或"off" 或"force" (所有的情况都进行压缩),

#是否对响应的数据进行gzip压缩,on压缩之后的页面大小可以减少1/3,

noCompressionUserAgents="gozilla chrom"

#对指定访问的浏览器,不进行压缩

jvm优化

Xmn768m:新生代内存的大小,光放推荐整个堆大小的3/8

新生代:java中每新建一个新的对象,占用的内存就是新生代

中生代:对象创建完毕之后,占用的内存就是中生代

老年代:java垃圾回收机制进行资源回收之后,中生代中剩余的部分,就是老年代

-XX:parallelGCThreads=2

#配置并行收集器的线程数,有多少个线程一起进行垃圾回收,官方推荐,与cpu数量相同

-XX:PermSize=1024m

#设置非堆内存的初始值,持久代内存的大小,一般设置为物理内存的1/4

-XX:MaxPermSize=1024m

#最大非非内存的大小,持久代内存的最大值,一般设置为物理内存的1/4

堆:存储新创建的对象

非堆:存储编译之后的代码,或者是压缩后的类,或者是类(调用的方法)的元数据

ajp-nio-8009

连接器当中的一种类型:ajp:协议名称就叫ajp.nio:一步非阻塞通信 8009是ajp协议的监听端口

Ajp:tomcat服务器和前端web服务器(apache nginx)进行连接,提供一个负载均衡,和请求转发,而且是高效的请求转发,提高并发的处理能力

http-nio-8080

用于处理http协议的网络请求端口号为8080

相关推荐
一只爱打拳的程序猿几秒前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧2 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck4 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
为将者,自当识天晓地。22 分钟前
c++多线程
java·开发语言
daqinzl30 分钟前
java获取机器ip、mac
java·mac·ip
激流丶1 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法