tomcat开放源代码web应用服务器。jave代码开发的。
tomcat就是处理动态请求和基于java代码的页面开发。
可以在html当中写入java代码,tomcat可以解析html页面当中的java,执行动态请求
动态页面。
机制有问题:不对tomcat进行优化,会出现在:假死、停机。小集群,小服务,小应用使用于tomcat,大并发的场景不适合。
1.免费。
2、开源,可以二次封装。
3、可配置型强,可以根据需要进行自定义配置,包括端口号,虚拟主机,等等。4、安全性: tomcat自带安全机制,可以配置用户认证、授权、加密传输。
5、部署应用非常快捷: tomcat会自动部署,自动运行。核心组件三个:
1、 web容器:完成web服务器的功能,web应用。web----------->http(s)-------访问页面---
.---------->文件index.jsp
web容器中,封装了一组文件,在这一组文件之中,进行集中化管理。web动态页面。
- servlet容器:名字: catalina,处理servlet代码就是处理web请求(http),以及生成动态内容的java类。处理http请求。
3、jsp: jsp动态页面防疫成servlet代码,用标准格式,展示jsp的静态页面。
servlet:
1、处理http请求
2、生产动态内容,为了和数据库交互-----》用户发起的;jsp当中的。
3、会话管理,跟用户在不同请求之间的状态,通过管理,可以在用户访问不同页面时保持用户的状态。
4、与数据库交互,servlet可以连接到数据库,执行查询和更新操作。这就是servlet能够生成动态内容的原因。jsp: java server pages。动态页面的开发技术。使用jsp标签index.jsp 在html页面中插入java代码。
jsp容器----》html页面当中的java代码翻译-------》执行-------------》展示结果。通常<%,开头
%>,结尾。
面向对象:编程范式。思想。客观存在的实体和他们之间的关系,映射到计算机程序当中。计算机程序被组织成这一组相互作用的对象,每个对象都有数据(属性)和行为(方法)。
类:定义一组属性和方法。创建对象。实例。
封装:对象的属性和方法捆绑在一块,提供一个接口,可以让其他对象使用。
继承:一个类,可以继承另一个类父类子类子类可以重用父类的代码,而且还在不修改代码的情况下,进行扩展。多态:不同类的对象对相同的消息,做出不同的响应。
功能组件:
connector:负载对外接受和响应请求,是tomcat与外界的交通枢纽。监听端口,也可以接受外界请求,交给container处理。container:负责对内处理业务逻辑。
Engine:引擎,管理虚拟机(service,一个service里面可以包含多个虚拟主机。)可以管理多个虚拟主机,一个service里面只能有一个Engine;
Host:代表一个虚拟机,也可以叫站点。context: web应用。包含多个servlet。
wrapper:封装器,最底层,每一个wrapper封装一个servlet,负责对象实例的创建,执行,销毁。父子关系,工作方式也是从上到下。
1、输入网址,请求发送,请求发送到8080端口,被监听的获得;
2、connector会把请求转发到container处理...engine(虚拟主机,你要访问哪一个虚拟主机) .......host(主机站点包含要请求页面的位置。webapps)------>从contex,就是index.jsp里面的内容。--
-------------->wrapper(servlet,响应解析处理请求)-------jsp翻译官
--页面展示。
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64指定jdk的安装路径。jdk解释器,类似于shell,各种工具。
export CLASSPATH=.:JAVA_HOME/lib/tools.jar:JAVA_HOME/lib/dt.jarclasspath:定义类的
export PATH=JAVA_HOME/bin:PATH
bin:存放的启动和关闭tomcat脚本文件
conf:主配置文件server.xml 主配置文件contex.html host的默认配置信息tomcat-user.xml :认证用户密码的配置文件web.xml:配置servlet servlet的规范标准。
lib: tomcat运行库的jar包,一般不动,除非连接第三方-----redis,数据库logs:日志文件
webapps: web应用部署的默认目录。
workctomcat的工作目录。存放jsp编译之后的class文件,清楚tomcat缓存,就是删work目录。
JVM:就是java的虚拟机,是java应用程序在计算上运行的核心组件,jvm负载将编译后的java字节码(.class文件)
JVM优化:
PS Eden Space :堆内存:存储新创建的对象。
Ps Old Gen:堆内存,存储长时间存活的对象。
PS old Gen:堆内存,存储长时间存活的对象。
Ps Ssurvivor Space:堆内存:存在创建之后,生命周期较短的对象。
Code Cache:非堆内存:存储已经编译的代码
compressed Class Space:非堆内存:存储已经压缩的类。
Metaspace:非堆内存,存储类的元数据。
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m-XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGc"
-server:第一个参数,指定内存池,一定放在第一个。
-Xms2048m:初始java堆的大小。分配JVM的最小内存,看cpu:cpu性能高,这个值
可以设高一点
-Xmx2048m: JAVA堆最大能多大,jvm的最大内存。和硬件内存挂钩。根据官方文档
起始值和最大值保持---致。XMS和XMX设为---样
的,内存可以设为物理内存的一般。
-Xmn768m:新生代的内存大小。官方推荐为了整个堆大小的3/8.
-XX:ParallelGCThreads=2: 配置并行收集器的线程数,同时可以有多少个线程进行垃圾回收。
-XX:PermSize:设置持久代内存的大小,默认是物理内存的1/4。
-XX:MaxPermSize=1024m:最大的非堆内存的大小,默认也是物理内存的1/4;-XX:PermSize=1024m -XX:MaxPermSize=1024m
非堆内存是不会被垃圾回收机制处理的,-X.PermSize持久代内存与最大非堆内存不能超出操作系统可用的内存。设置成一样大,可以减轻伸缩堆大小的压力。
-Djava.awt.headless=true:避免在linux环境下,web不能正常打开以正常显示图片。
-XX:+DisableExplicitGC":避免jvm空间大起大落,影响系统的响应时间。响应速度会很慢。
堆区当中:新生代中生代老年代
每一个新建的对象占用的空间,就是新生代。
java垃圾回收机制对堆区进行资源回收,新生代中没有被回收的资源,就是中生代。中生代没有被回收,就是老年代。
jvm大小:新生代+中生代+老年代+永久代。