tomcat 开放源代码的web应用服务器。基于java代码开发的。
Tomcat介绍
tomcat就是处理动态请求和基于java代码的页面开发
可以在html当中写入java代码,tomcat可以解析html页面当中的java,执行动态请求,动态页面。
缺点是机制有问题:不对tomcat进行优化,会出现在:假死、停机。小集群,小服务,小应用适用于tomcat,大并发的场景不适合。
优点
1、免费
2、开源,可以二次封装。
3、可配置型强,可以根据需要进行自定义配置,包括端口号,虚拟主机,等等。
4、安全性: tommcat自带安全机制,可以配置用户认证、授权、加密传输
5、部署应用非常快捷: tocat会自动部署,自动运行.
webapps。
python node.js javase
核心组件三个:
1、web容器:完成web服务器的功能,web应用
web----->http(s)-------访问页面--------->文件index.jsp
web容器中,封装了一组文件,在这一组文件之中,进行集中化管理。
web动态页面。


2、servlet容器:名字:catalina,处理servlet代码
就是处理web请求(http),以及生成动态内容的java类。
处理http请求。
3、jsp:jsp动态界面翻译成servlet代码,用标准格式,展示jsp的静态页面。
写好一个包,就把它上传到webapps下,重启服务即可。部署方便

servlet补充:
1、处理http请求
2、生成动态内容,为了和数据库交互------>用户发起的:jsp当中的
3、会话管理,跟踪用户在不同请求之间的状态,通过管理,可以在用户访问不同页面时保持用户的状态。
session
4、与数据库交互,servlet可以连接到数据库,执行查询和更新操作。这就是servlet能够生成动态内容的原因。
jsp:java server pages。动态页面的开发技术。使用jsp标签 index.jsp 在html页面中插入java代码。
jsp容器------->html页面当中的java代码翻译------>执行-------------->展示结果。
通常以<%,开头
%>,结尾

java基本知识普及:
面向对象:编程范式。思想。客观存在的实体和他们之间的关系,映射到计算机程序当中。
计算机程序被组织成这一组相互作用的对象,每个对象都有数据(属性)和行为(方法)。
类:定义一组属性和方法
创建对象。实例。
封装:对象的属性和方法捆绑在一块,提供一个接口,可以让其他对象使用。
继承:一个类,可以继承另一个类 类 子类 子类可以重用父类的代码,而且还在不修改代码的情况下,进行扩展。
多态: 不同类的对象对相同的消息,做出不同的响应。
详解:
面向对象(Object-Oriented)是一种编程范式或思想,它在软件设计和开发中广泛应用。
面向对象编程(OOP)是一种将现实世界的实体(对象)和它们之间的关系映射到计算机程序中的方法。
在面向对象编程中,计算机程序被组织为一组相互作用的对象,每个对象都有数据(属性)和行为(方法)。
关键概念和特性包括:
类和对象(Objects and Classes):类是一个抽象的模板或蓝图,定义了一组属性和方法,
而对象是基于类创建的实例。类描述了对象应该有的属性和行为。
封装(Encapsulation):封装指的是将数据和方法(行为)捆绑在一起,隐藏了对象的内部细节,
只公开必要的接口供其他对象使用。这有助于实现信息隐藏和数据保护。
继承(Inheritance):继承是一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)
的属性和方法。子类可以重用父类的代码,并可以在不修改原始代码的情况下进行扩展或修改。
多态(Polymorphism):多态性允许不同类的对象对相同的消息作出不同的响应。
这使得在面向对象编程中可以创建通用的代码,能够处理多种类型的对象。


功能组件(结构):
connector:负载对外接受和响应请求,是tomcat与外界的交通枢纽,监听端口,也可以接受外界请求,交给container处理。
container:负责对内处理业务逻辑。
container里面有:
Engine:擎,管理虚拟机 (service,一个service里面可以包含多个虚拟主机。),可以管理多个虚拟主机,一个service里面只能有一个Engine;
Host: 代表一个虚拟机,也可以叫站点
Context: web应用。包含多个servlet。
wrapper:封装器,最底层,每一个wrapper封装一个servlet,负责对象实例的创建,执行,销毁。
父子关系,工作方式也是从上到下。
Tomcat处理请求的过程

Tomcat处理请求的具体过程:
1、输入网址,请求发送,请求发送到8080端口,被监听的获得;
2、connector会把请求转发到container处理-...->engine (虚拟主机,你要访问哪一个虚拟主机)
----->host(丰机站点包含要请求页面的位置。webapps)------>从contex,就是indexjsp里面的内容。------->wrapper(servlet,响应解析处理请求)-------jsp翻译官
--------------->页面展示。
Tomcat服务部署
在部署 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 -ivh jdk-8u201-linux-x64.rpm
java -version

3.设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
指定jdk的安装路径。jdk解释器,类似于shell,各种工具。
export CLASSPATH=.:JAVA_HOME/lib/tools.jar:JAVA_HOME/lib/dt.jar
classpath:定义类的环境变量,环境类的库。
export PATH=JAVA_HOME/bin:PATH
可执行文件。
source /etc/profile.d/java.sh
java -version 查看安装版本


使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,
打印 "Hello World"。
vim Hello.java
public class Hello {
public static void main(String[] args){
System.out.println("Hello world!");
}
}

javac Hello.java
java Hello


4.安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start
#前台启动
/usr/local/tomcat/bin/catalina.sh run
netstat -natp | grep 8080
浏览器访问Tomcat的默认主页 http://192.168.233.21:8080

主要目录详解:
bin: 存放的启动和关闭tomcat脚本文件
conf:主配置文件 serverxml 主配置文件 ontex htmhost的默认配置信息 tomat-userxml : 认证用户密码的置文件 web.xm:配置servlet servlet的规范标准。
lib: tomcat运行库的jar包,一般不动,除非连接第三方-----redis,数据库
logs:日志文件
webapps: web应用部署的默认目录。
work:tomcat的工作目录。存放jsp编译之后的class文件,清楚tomcat缓存,就是删work目录。

查看端口有没有起来,再到浏览器中访问


表示启动成功
5.优化tomcat启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
/dev/urandom是/dev/random的非阻塞版本,/dev/random的 random pool 依赖于系统中断,因此在系统的中断数不足时,
/dev/random 设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,
/dev/random设备可以保证数据的随机性。 /dev/urandom不依赖系统的中断,也就不会造成进程忙等待,
但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。




重启一下
