tomcat是一个开源的web应用服务器,区别于nginx,nginx主要处理静态页面,那么动态页面会由nginx交给tomcat处理
功能与优劣:
1.处理动态页面
2.处理后端请求
3.易部署,会自动识别配置文件,自动部署运行
4.轻量级服务软件,中小型架构可以满足,大型的交互需求不能满足,在容器化部署的项目架构中是不使用tomcat的,都是使用ar包直接运行
tomcat的核心组件:
1.web容器,完成web功能,处理请求也是nginx转发的http请求,处理动态页面,处理后端的请求(转发到数据库的请求)
2.servlte:catalina是整个tomcat处理的底层逻辑,处理web请求的动态页面,也处理后端请求
3.jsp:jsp会把动态翻译成serlvet代码。用编译后的规则,显示代码的静态页面
静态页面:html
动态页面:php index.php
jsp index.php ---Java格式写成的代码,靠jsp翻译,servlet执行编译后的代码然后展示结果
容器:通常指的是一种虚拟化的技术,允许在当前的操作系统当中,虚拟化的运行多个独立
的环境。独立运行的环境就是容器,彼此之间相互隔离,拥有自己的一套资源。
servlet容器:
用于开发web应用程序的关键组件。主要用于处理http请求,生成动态内容
与客户端之间的交互,生成动态内容与客户端之间的交互。用于处理http请求,生成动态页面的内容。
会话管理:
处理用户会话,跟踪用户在不同请求之间的状态,servlet可以在用户访问不同页面时,保持用户的状态信息,购物车同步,用户同步登录等等。
Jsp java server pages 动态网页的开发技术,使用jsp的标签在html的网页中插入Java代码
<% 开头 %>结尾
实现Java web 应用程序的访问界面,用户界面,或者访问数据库,生成页面内容
tomcat的核心功能:
功能部分由两个块组成:
接受和响应外部请求的连接器connector,默认端口8080
负责处理请求的 container
Engine引擎:管理多个虚拟主机,一个toncat只能有一个Engine
host:代表站点,也就是虚拟主机,一个engine可以有多个host
context:一个context指向一个web应用。
wrapper:最底层,编译代码,运行结果
JDK:java的开发工具包,包括编译器,调试器以及java的类库。开发者用来创建,编译,
运行java程序的重要组件。
JVM:java的虚拟机,辅助编译后的java字节码,变成本地的机器码。
JVM内存管理,垃圾回收机制,线程管理
wabapps:默认的应用部署目录
tomcat配置虚拟主机:
配置工作目录
在公司中会有分多个项目,一台部署tomcat太多会浪费资源,所以会在tomcat中配置多个主机
tomcat的优化:
默认配置并不适合生产环境,会频繁假死。
需要通过压测不断优化,提高稳定
1.配置文件优化
2.jvm优化
3.操作系统优化
vim server.xml
71行插入
maxThreads=”200” 可以创建的最大线程数,支持的最大并发连接数
minSpareThreads=”200” 最小空闲线程数,没人请求时,也要打开空闲的线程数
maxSpareThreads 最大备用线程数,创建的线程超过这个数,会关闭不需要的线程
connectionTimeout 网络连接超时,一般设置为20 000ms
enableLookups=”false” 是否反向解析域名,不解析,提高处理效率
disableUploadTime=”true” 上传时是否启用超时限制
connectionUpliadTimeout= 上传超时时间
acceptCount 如果所有的可以使用线程都被占用,可以传入的队列长度的最大值
compression=”on” 是否对响应的数据进行gzip压缩,压缩之后的页面大小可以减少1/3
noCompressionUserAgents=”gozilla chrom” 对指定访问的浏览器不进行压缩
jvm优化:
ajp-nio-8009
连接器当中的一种类型:ajp,协议名称就交ajp,nio:异步非阻塞通信
8009就是ajp协议的监听端口
ajp:将tomcat服务器和前端web服务器(APACHE nginx)进行连接,提供负载均衡和请求转发,可以提高并发处理能力。
http-nio-8080
用于处理http协议的网络请求