目录
Tomcat概述
Tomcat三大组件
Tomcat 功能组件结构
Container 结构分析
Tomcat 请求过程
什么是 servletServlet
什么是 JSP
Tomcat 服务部署
1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
2.安装JDK
3.设置JDK环境变量
4.测试jdk是否安装成功
5.安装启动Tomcat
优化tomcat启动速度
Tomcat 虚拟主机配置
1.创建 kgc 和 benet 项目目录和文件
2.修改 Tomcat 主配置文件 server.xml
3.客户端浏览器访问验证
Tomcat多实例部署
1.安装好 jdk
2.安装 tomcat
3.配置 tomcat 环境变量
4.修改 tomcat1 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号
5.修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
6.启动各 tomcat 中的 /bin/startup.sh
7.浏览器访问测试
Tomcat是一个开源的Web服务器和Servlet容器,它是一个轻量级且高性能的服务器,常用于部署Java Web应用。
Tomcat的主要功能是处理来自客户端的HTTP请求,并将这些请求传递给相应的Servlet来处理。它支持Servlet和JavaServer Pages(JSP)规范,可用于开发和运行Java Web应用程序。
Tomcat的架构基于模块化设计,它由多个组件组成,如连接器、容器、Engine和Host。连接器负责处理与客户端的通信,容器负责管理Servlet的生命周期和请求处理,Engine和Host用于管理多个虚拟主机和Web应用。
Tomcat还提供了许多特性和功能,如连接池、安全认证、会话管理、负载均衡和日志记录等。这些功能使得Tomcat成为一个功能强大且灵活的Web服务器,适用于各种规模的应用和需求。
Tomcat是一个可靠、稳定且易于使用的Java Web服务器,被广泛应用于Java Web开发和部署。
(1)Web 容器:完成 Web 服务器的功能。
(2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
(3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。
1、Web容器:(1)接受、响应请求
(2)展示动态页面
入口 出口
2、JSP容器:翻译java--> servlet
index.html --> nginx可以直接展示index.php
index.jsp --> java环境-->和数据库怎么进行交互,怎么连接到后端???
index.jsp-->java类代码-->就是执行对接后端的执行代码,所以我们需要在进行与用户交互时,将用户发出的请求、数据、传输到后端
但是index.jsp中的一些java代码无法直接执行对接或者调用,需要先翻译魏可以可直接执行的代码方式-->格式serverlst 代码格式
3、serverlet容器:serverlet代码格式就是用JSP容器来处理
简介:
web容器:1、接受、响应请求 2 、 展示动态页面
JSP容器:翻译java--->servlet
Serverlet容器:借助于catalina来执行servelet代码(动态任务执行的标准格式)
因此 Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。
(1)Web 容器:完成 Web 服务器的功能。
web
tomcat web应用服务
web -->可以通过http(s)来访问的一个页面-->文件
web容器-->封装了一组文件
集中化管理-->一组组员的对象
web动态页面
(2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
(3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。
只是用于安装定影的规则,格式来显示静态页面
index.php--->php用的
index.jsp---> tomcat
nginx --->html
动态页面:可以让用户进行交互的一种web的页面
后端进行交互 怎么打开交互页面展示
index.jsp---> tomcat 用的 java 环境 --->和数据交互
Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。
其中连接器和容器相辅相成,一起构成了基本的web服务。每个Tomcat服务器可以管理多个service。
Connector:负责对外接受和响应请求。它是Tomcat与外界的交通枢纽,监听端口接受外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
Container:负责对内处理业务逻辑。其内部由Engine、Host、Context和Wrapper四个容器组成,用于管理和调用servlet相关逻辑。
Service:对外提供的Web服务。主要包含Connector和Container两个核心组件,以及其他功能组件。Tomcat可以管理多个service,且各service之间相互独立。
每个Service会包含一个Container容器。在Container内部包含了4各子容器。
四个字容器的作用分别是:
(1)Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个Engine;
(2)Host:代表一个虚拟主机,也可以叫站点,通过配置Host就可以添加站点;
(3)Context:代表一个Web应用,包含多个Servlet封装器
(4)Wrapper:封装器,容器的最底层。每一个Wrapper封装这一个Servlet,负责对象实例里的创建、执行和销毁功能
Engine、Host、Context和Wrapper这四个容器之间属于父子关系。
容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个Web应用。每个Web应用会有多个Servlet封装器。
1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。
CLASSPATH:编译、运行Java程序时,JRE回去给变量指定的路径中搜索所需的类(.class)文件。
JDK:Java Development Kit(Java开发工具)
JRE:Java Runtime Environment (Java运行时环境)
Jvm:Java Virtuak Machine (Java虚拟机),使java程序可以在多种平台上运行.class文件
profile中有for循环来遍历profile.d目录中的 .sh文件,所以写在profile中也可以以.sh结尾文件写在profile.d目录中。
两种管理tomcat方式:
方法一 :创建jdk.sh在profile.d:
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
方法二:在/usr/lib/systemd/system中创建.service
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_231-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl restart tomcat #启动
systemctl enable tomcat #配置自启
systemctl stop tomcat #停止服务
systemctl status tomcat #检测状态
后台启动tomcat:
./startup.sh
./catalina.sh start
前台启动tomcat
./catalina.sh run
ctrl+c 结束
Tomcat启动慢的原因是因为随机数产生遭到阻塞,遭到阻塞的原因是因为熵池大小。
/dev/random: 阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。
/dev/urandom:非阻塞型的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。 这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
随机数在security目录下的java.security 117行修改
是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
/etc/profile
CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
dt.jar:是关于运行环境的类库,主要是可视化的 swing 的包。
tools.jar:主要是一些jdk工具的类库,包括javac、java、javap(jdk自带的一个反编译工具)、javadoc等。
JDK :java development kit (java开发工具)
JRE :java runtime environment (java运行时环境)
JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。
首先使用文本工具编写java源代码,比如 Hello.java ;
在命令行中,输入命令:javac Hello.java,对源代码进行编译,生成 class 字节码文件;
编译完成后,如果没有报错信息,输入命令:java Hello,运行 class 字节码文件,由 JVM 对字节码进行解释和运行,打印 “Hello World”。
vim Hello.java
#类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
public class Hello {
public static void main(String[] args){
System.out.println("Hello world!");
}
}
javac Hello.java
java Hello
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 strat
#前台启动
/usr/local/tomcat/bin/catalina.sh run
netatst -natp | gerp 8080
浏览器访问Tomcat的默认主页 http://192.168.142.22:8080
第一次启动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。
----------------------------------------------------------------------------------------------------------
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
ll /usr/local/tomcat/
------主要目录说明----------------------------------------------------------------------------------------------
●bin:存放启动和关闭Tomcat的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh三个文件
●conf:存放Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
① server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主组件的相关配置信息;
② context.xml:所有host的默认配置信息;
③ tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息,Tomcat自带的manager默认情况下会用到此文件,在Tomcat中添加/删除用户,为用户指|定角色等将通过编辑此文件实现;
④ web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的web应用程序提供包括MIME映射等默认配置信息;
●lib:存放Tomcat运行需要的库文件的jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包
●logs:存放 Tomcat 执行时的日志
●temp:存放 Tomcat 运行时产生的文件
●webapps:存放 Tomcat 默认的 Web 应用部署目录
●work:Tomcat工作日录,存放jsp编译后产生的class文件,一般清除Tomcat缓存的时候会使用到
●src:存放Tomcat 的源代码
●doc:存放Tomcat文档
很多时候公司会有多个项目需要运行,一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。
例如现在新增两个域名 www.kgc.com 和 www.benet.com, 希望通过这两个域名访问到不同的项目内容。
mdkir /usr/local/tomcat/webapps/kgc
mdkir /usr/local/tomcat/webapps/benet
ehco "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
ehco "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
----------------------------------------------------------------------------------------------------------
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为 /usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true
xmlValidation:是否验证xml文件执行有效性检验的标志
xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验
docBase:相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;
path:相对于Web服务器根路径而言的URI;如果为空“”,则表示为此webapp的根路径 / ;
reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false
echo "192.168.142.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 请求过程:
(1)Connector 连接器监听的端口是 8080。由于请求的端口和监听的端口一致,连接器接受了该请求。
(2)因为引擎的默认虚拟主机是 www.kgc.com,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。
(3)访问的路径为根路径,URI 为空,即空是 Web 程序的应用名,也就是 context。此时请求找到 /usr/local/tomcat/webapps/kgc 目录,解析 index.jsp 并返回。
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
cp -a /usr/local/tomcat /usr/local/tomcat1
vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat
export CATALINA_BASE1=/usr/local/tomcat
export TOMCAT_HOME1=/usr/local/tomcat
#tomcat2
export CATALINA_HOME2=/usr/local/tomcat1
export CATALINA_BASE2=/usr/local/tomcat1
export TOMCAT_HOME2=/usr/local/tomcat1
source /etc/profile.d/tomcat.sh
vim /usr/local/tomcat2/conf/server.xml
#22行,修改Server prot,默认为8005 -> 修改为8006
修改为8081
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
----------------------------------------------------------------------------------------------------------
第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。
vim /usr/local/tomcat/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1
vim /usr/local/tomcat1/bin/startup.sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
vim /usr/local/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2
/usr/local/tomcat/bin/startup.sh
/usr/local/tomcat1/bin/startup.sh
netstat -antp | grep java
http://192.168.142.22:8080
http://192.168.142.22:8081