TOMCAT的安装与基本信息

一、TOMCAT简介

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

官网: Apache Tomcat® - Welcome!

官网文档: Apache Tomcat 8 (8.5.99) - Documentation Index

帮助文档:

Apache Tomcat Home - Apache Tomcat - Apache Software Foundation         

FAQ - Apache Tomcat - Apache Software Foundatio

二、TOMCAT安装

1.JDK介绍

JDK(Java Development Kit)是 Java 语言的软件开发工具包,它包含了编译、运行Java应用程序所需的全部组件。主要包括以下几个部分:

javacJava 编译器,用于将源代码(.java 文件)编译为字节码文件(.class 文件)。
javaJava 运行时环境,负责加载和执行字节码文件。
javadocJava 文档生成工具,用于从源代码注释中提取信息生成API文档。
jarJava 打包工具,可以将多个类文件打包成一个.jar文件。
jdbJava 调试器,用于调试Java程序。

jps, jinfo, jmap, jhat,

jstack, jstat 等

这些是用于监控和管理Java虚拟机(JVM)的实用工具。
jmod在较新版本的JDK中引入的一个模块化工具,用于处理Java模块化系统中的模块。
jshell自JDK 9起引入的交互式Java Shell工具,可进行快速原型设计和学习Java语法。

JDK在Linux中默认是安装的,但是安装的是openjdk

OpenJDK:

 1.是一个开源项目,遵循GPL v2许可协议(部分组件使用不同的兼容许可证),由全球的开发者社区共同维护和开发,包括但不限于Oracle和其他公司。
2.通常被视为Java官方参考实现的基础,任何Java版本的新特性首先会出现在OpenJDK中。
3.更新频率较快,由于社区驱动,新特性和错误修复的集成速度可能更快。
4.不包含一些商业特性,如Flight Recorder(但后来也开源了)、Mission Control等工具,以及某些性能优化或特定平台的支持。
5.多数Linux发行版默认提供的Java环境就是基于OpenJDK构建的。
Oracle JDK:

1.直到Java SE 11之前,Oracle JDK一直是Oracle公司发布的免费供个人使用的JDK版本,并为企业用户提供长期支持(LTS)版本。
2.包含了一些OpenJDK没有的额外商业特性和服务,比如上述提到的高级分析工具和可能存在的性能增强。
3.在授权方面,自Java SE 11起,Oracle JDK对商业用途开始实施订阅制收费模式,非商业用户仍然可以免费下载更新和安全补丁,但需要遵循Oracle的技术支持策略。
4.Oracle JDK曾经提供更稳定且及时的技术支持,尤其是对于付费的企业用户。
总结来说,在大多数情况下,OpenJDK与Oracle JDK在核心功能上差异较小,两者可以互换使用。然而,Oracle JDK针对企业级应用提供了更多的服务和支持,而OpenJDK则更适合那些寻求完全开源解决方案并愿意接受社区支持的开发者和组织。随着Java生态的发展,越来越多的第三方厂商也开始发布基于OpenJDK的长期支持版本,为用户提供与Oracle JDK相媲美的稳定性和技术

2.安装Oracle JDK

安装包下载官方链接:Java Downloads | Oracle

安装包下载需要登录,所以提前准备好安装包

ram安装

事先准备好rmp包,而后yum install  安装,或者使用日rpm  -ivh  安装包名称;进行安装

安装好之后,找到安装目录

在该目录下可以看到很多执行文件,就是一些需要用到的java工具

为了让系统能够识别并使用这个JDK版本作为默认Java环境,需要设置一个环境变量

写在开机自动检测的文件当中

对于全局生效(所有用户):编辑 /etc/profile 或 /etc/profile.d/*.sh文件。

对于仅当前用户生效:编辑 ~/.bashrc 或 ~/.bash_profile 文件。

export JAVA_HOME=/usr/java/default
#设置了JAVA_HOME环境变量,它指向Java开发工具包(JDK)的安装目录。
 
export PATH=$JAVA_HOME/bin:$PATH
#修改了系统PATH环境变量,在原有PATH值前添加了 $JAVA_HOME/bin。这样一来,在执行java等命令时
#系统会在指定的Java bin目录下查找并优先执行相应的命令。也就是先执行$JAVA_HOME里的Java命令
#找到相应的命令后,立即停止查找
 
export JRE_HOME=$JAVA_HOME/jre
#非必须项,但常见做法。设置了JRE_HOME环境变量,指向Java运行时环境(JRE)的安装目录
#通常位于JDK安装目录下的jre子目录。
 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
#非必须项。设置了CLASSPATH环境变量,用于Java应用程序加载类文件时搜索的路径列表。
#在早期Java版本中,需要通过CLASSPATH来指定自定义类库的位置。

3.安装TOMCAT

安装tomcat可以使用yum install,但是,yum源中的版本过于老旧,所以不推荐 

可以在官方网站下载好较新版本的安装包,而后进行二进制安装

官方网站与镜像下载站点

Apache Tomcat® - Apache Tomcat 8 Software Downloads

Index of /apache/tomcat

[root@localhost ~]#rpm -ivh jdk-8u201-linux-x64.rpm
#安装JDK包
警告:jdk-8u201-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:jdk1.8-2000:1.8.0_201-fcs        ################################# [100%]
[root@localhost ~]#cd /usr/java/jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]#ll
总用量 25980[root@localhost jdk1.8.0_201-amd64]#vim /etc/profile
#添加环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost jdk1.8.0_201-amd64]#source /etc/profile
#刷新配置文件
[root@localhost tomcat]#tar zxvf apache-tomcat-9.0.16.tar.gz 
[root@localhost tomcat]#cp -r apache-tomcat-9.0.16 /usr/local/tomcat
[root@localhost tomcat]#cd /usr/local/tomcat/
[root@localhost tomcat]#/usr/local/tomcat/bin/startup.sh
#启动tomcat  #catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_201-amd64
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh 
#关闭服务   #catalina.sh stop添加到
[root@localhost bin]#useradd -s /sbin/nologin tomcat
#新建用户
[root@localhost local]#chown tomcat:tomcat tomcat/ -R
#修改属主和属组[root@localhost ~]#cat > /usr/lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.targetEOF[root@localhost local]#systemctl daemon-reload
[root@localhost local]#systemctl start tomcat
[root@localhost local]#ss -ntap |grep 8080

三、配置文件介绍及核心组件

(一)配置文件

使用tree命令可以查看到在/usr/local/tomcat/目录下有好多文件

1.目录文件

bin存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件
conf存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。
lib存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务
logs存放 Tomcat 日志 catalina.out
temp存放 Tomcat 运行时产生的文件
webapps部署Web应用程序的地方。将WAR文件或解压后的目录放在这里,Tomcat会自动检测并部署这些应用
workTomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存)

2.bin下的启动文件

以.bat结尾的文件一般为windows环境下的相关文件

以.sh结尾的文件为Unix/Linux环境下的相关文件

其中最常用的三个文件为

catalina.sh:Unix/Linux平台下启动、停止和管理Tomcat服务器的主要脚本

startup.sh:启动Tomcat服务器的脚本。

shutdown.sh:关闭Tomcat服务器的脚本。

3.conf下的子配置文件

Catalina:这不是一个文件,而是指Tomcat服务器的核心容器。它负责处理所有的Web应用请求,并且通过加载conf目录下的配置文件来管理服务器的行为。

catalina.properties:这个文件包含了Catalina容器的一些全局属性设置,例如日志路径、临时工作目录、JMX设置等。

jaspic-providers.xml:Java Authentication and Authorization Service Provider Contract for Containers (JAAS) 的提供者配置文件,用于定义和配置安全认证与授权的服务提供商。

jaspic-providers.xsd:对应的XML模式定义文件(XSD),用来验证jaspic-providers.xml文件是否遵循正确的结构和内容规范。

logging.properties:Tomcat的日志系统配置文件,定义了各种日志级别、日志输出位置以及格式化样式。

server.xml:Tomcat服务器的主要配置文件,包括端口号设置、连接器配置(HTTP/HTTPS/AJP)、引擎、主机、上下文(Web应用程序)以及其他全局服务配置。

tomcat-users.xml:用户账号和权限信息的配置文件,定义了可以访问Tomcat Manager应用和其他受保护资源的用户名、密码以及角色分配。

tomcat-users.xsd:同样作为模式定义文件,用于验证tomcat-users.xml文件的格式正确性。

web.xml:位于conf/webapps/ROOT/WEB-INF或全局配置目录下,这是Servlet容器的默认部署描述符,定义了所有Web应用通用的初始化参数、Servlet映射、过滤器、监听器等配置。对于每个单独的应用,也会有各自的web.xml文件放置在各自的WEB-INF目录内。

4.日志文件与临时、缓存文件

(二)组件

Catalina Container Catalina是Tomcat的主要容器,它负责管理整个请求处理生命周期。Catalina遵循Servlet和JavaServer Pages (JSP) 规范,以处理HTTP请求并生成响应。Catalina内部有多个层次的容器结构,包括Engine、Host、Context和Wrapper。

       Engine:引擎,代表整个Catalina Servlet容器,它可以包含多个虚拟主机(Host)。

       Host:虚拟主机,对应一个或多个域名/IP地址,每个Host可以部署多个Web应用程序。

       Context:上下文,代表一个Web应用程序,通常对应于WAR文件解压后的目录结构。

       Wrapper:最底层容器,封装了一个具体的Servlet实例。

Connector Connector是Tomcat与客户端进行通信的关键组件,它监听指定端口上的HTTP请求,并将这些请求传递给相应的Container进行处理。例如,HTTP/1.1协议的Connector会监听8080端口(默认配置),AJP Connector则监听8009端口用于与前端代理服务器如Apache HTTP Server进行通信。

Jasper Jasper是Tomcat内置的JSP编译器和容器,负责将JSP页面转换为Java Servlet源代码,然后编译成字节码并加载到容器中执行。

Web Applications Manager (Manager App) Manager是一个Web应用程序,提供了通过浏览器界面管理Tomcat上部署的应用程序的功能,比如部署新的WAR文件、启动、停止及删除已部署的应用等。

Host Manager Host Manager也是Web应用程序,主要用于管理和配置Tomcat中的虚拟主机。

Libraries and Classloaders Tomcat包含一组库文件(位于lib目录下),它们包含了运行时所需的类库和Tomcat自身功能实现所需要的类。同时,Tomcat具有复杂的类加载机制,确保不同Web应用程序之间的类隔离和资源加载。

Security Manager 安全管理器可选地在Tomcat中启用,用于实施更细粒度的安全策略控制,限制Web应用程序访问系统资源的能力。

Logging System Tomcat自带日志系统,支持灵活的日志级别设置以及多种输出格式,通过conf/logging.properties配置文件进行定制。

Global JNDI Resources Tomcat提供对Java Naming and Directory Interface (JNDI)的支持,允许在全局范围内定义和查找资源,例如数据库连接池、邮件服务等。

1.组件分层和分类

2.核心组件

(三)TOMCAT请求过程

#接收请求
 
'当客户端(通常是Web浏览器)向Tomcat服务器发送一个HTTP请求时,请求首先被监听在
特定端口上的Connector组件接收。例如,对于默认配置,HTTP Connector通常监听8080端口'
 
#解析请求
'Connector接收到请求后,会根据HTTP协议规范对请求进行解析,提取出请求方法(GET、
POST等)、请求URI、HTTP头信息以及可能存在的请求体内容'
 
#路由请求到适当的Context:
'解析后的请求将被传递给Engine容器,Engine通过匹配请求的Host头或IP地址找到对应的虚拟
主机(Host)。
Host接着根据请求URI找到关联的Web应用程序Context,也就是WAR文件解压后部署的应用目录。'
 
#查找并执行Servlet
'Context容器负责查找请求URI映射到的Servlet,并实例化或重用该Servlet。
如果请求的URL与某个Servlet的URL映射规则相匹配,则调用Servlet的service()方法来处理请求'
 
#处理请求
'在Servlet内部,根据请求的方法和请求参数,调用相应的doGet()、doPost()等方法处理请求数
据,并生成响应结果。'
 
#创建响应
'Servlet处理完成后,返回一个HttpServletResponse对象,其中包含了状态码、响应头和响应
体内容(如HTML页面、JSON数据或其他格式的内容)。'
 
#写回响应
'Context将Servlet生成的响应传递给Host,再由Host传递给Engine,最终由Engine中的
Connector将响应数据封装成HTTP响应报文并通过网络发送回客户端。'
 
#清理资源:
'在整个处理过程中,Tomcat还负责管理连接、线程池以及其他系统资源,确保请求处理完毕后释放
相关资源以供后续请求使用'
 
#生命周期事件通知:
'Tomcat在应用启动、停止、上下文初始化、销毁等阶段还会触发相应的生命周期事件,以便开发者
能够插入自定义的初始化逻辑或资源清理操作。'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/268208.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust调用同级目录中的rs文件和调用下级目录中的rs文件

一、Rust调用同级目录中的rs文件 Rust新建工程demo02&#xff0c;src文件夹下面新建test.rs文件&#xff0c;这样main.rs文件与它属于同级目录中。 关键点&#xff1a;导入test文件和test文件中的Ellipse模块 mod test;//导入test模块&#xff08;文件&#xff09; use test…

MySQL-MHA搭建、故障测试

一、架构说明 MHA&#xff08;Master High Availability&#xff09;是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能&#xff0c;确保在主库发生故障时能够快速切换到备库&#xff0c;降低业务中断时…

Android 性能优化--APK加固(1)混淆

文章目录 为什么要开启混淆如何开启代码混淆如何开启资源压缩代码混淆配置代码混淆后&#xff0c;Crash 问题定位结尾 本文首发地址&#xff1a;https://h89.cn/archives/211.html 最新更新地址&#xff1a;https://gitee.com/chenjim/chenjimblog 为什么要开启混淆 先上一个 …

架构设计:生产消费模型

1. 引言 在现代软件系统中&#xff0c;处理大量数据和消息是一项重要的任务。生产消费模型作为一种经典的并发模式&#xff0c;在解决数据生产和消费之间的关系上发挥着关键作用。该模型通过有效地管理生产者和消费者之间的通信和数据流动&#xff0c;实现了系统组件之间的解耦…

LASSO算法

LASSO (Least Absolute Shrinkage and Selection Operator) 是一种回归分析的方法&#xff0c;它能够同时进行变量选择和正则化&#xff0c;以增强预测准确性和模型的解释性。LASSO通过在损失函数中加入一个L1惩罚项来实现这一点。该惩罚项对系数的绝对值进行约束。 基本概念 …

python中的类与对象(3)

目录 一. 类的多继承 二. 类的封装 三. 类的多态 四. 类与对象综合练习&#xff1a;校园管理系统 一. 类的多继承 在&#xff08;2&#xff09;第四节中我们介绍了什么是类的继承&#xff0c;在子类的括号里面写入要继承的父类名。上一节我们只在括号内写了一个父类名&…

【详识JAVA语言】面向对象程序三大特性之三:多态

多态 多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 多态实现条件 在java中要实现多态&#xff0c;必须要满足如下几个条件&#xff0c;缺一不可&#xf…

基于阿里云OSS上传图片实战案例

一、案例描述 基于Springboot框架实现一个上传图片到阿里云服务端保存的小案例。 二、准备工作 基于Springboot免费搭载轻量级阿里云OSS数据存储库&#xff08;将本地文本、照片、视频、音频等上传云服务保存&#xff09;-CSDN博客 三、代码 新建这两个类&#xff1a;一个…

【数据结构初阶】九、五种比较排序的讲解和实现(直接插入 \ 希尔 \ 直接选择 \ 堆 \ 冒泡 -- C语言)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】八、非线性表里的二叉树&#xff08;二叉树的实现 -- C语言链式结构&#xff09;-CSDN博客 排序 排序的概念 所谓排序&#xff0c;就是使一串记录&#xff0c;按照…

网络编程(IP、端口、协议、UDP、TCP)【详解】

目录 1.什么是网络编程&#xff1f; 2.基本的通信架构 3.网络通信三要素 4.UDP通信-快速入门 5.UDP通信-多发多收 6.TCP通信-快速入门 7.TCP通信-多发多收 8.TCP通信-同时接收多个客户端 9.TCP通信-综合案例 1.什么是网络编程&#xff1f; 网络编程是可以让设…

Web开发学习-HTML

第一天 固定结构 如何注释&#xff1a;vs code中使用ctrl/可以达到注释这一行的效果&#xff0c;同时再次按下ctrl/&#xff0c;可以取消注释。 HTML标签的结构 例如&#xff1a;<strong>字体加粗</strong>这个就是双标签&#xff0c;<br>换行标签&#xff…

[RoarCTF 2019]Easy Calc

这题考查的是: 字符串解析特性目录读取文件内容读取 字符串解析特性详解&#xff1a;PHP字符串解析特性 &#xff08;$GET/$POST参数绕过&#xff09;&#xff08;含例题 buuctf easycalc&#xff09;_参数解析 绕过-CSDN博客 ascii码查询表&#xff1a;ASCII 表 | 菜鸟工具 …

flurl升级之后没有FlurlNewtonsoftJsonSerializer

新建NewtonsoftJsonSerializer.cs /// <summary> /// ISerializer implementation based on Newtonsoft.Json. /// Default serializer used in calls to GetJsonAsync, PostJsonAsync, etc. /// </summary> public class NewtonsoftJsonSerializer : IJsonSerial…

【贪心算法】Leetcode 455.分发饼干 376. 摆动序列 53. 最大子数组和

【贪心算法】Leetcode 455 分发饼干 376. 摆动序列【规律很多】53. 最大子数组和 455 分发饼干局部最优推全局最优&#xff1a;尽量用大饼干去满足大胃口的小朋友 376. 摆动序列【规律很多】思想&#xff1a;注意考虑一个坡度留首尾两个点、平坡、首尾 53. 最大子数组和【好思想…

18个惊艳的可视化大屏(第12辑):智慧校园与教育方向

智慧校园可视化大屏通过数据可视化技术&#xff0c;将学校各个方面的数据信息进行展示&#xff0c;可以提高信息公开透明度、优化校园管理、提高学生教育质量和提高校内活动宣传效果等。 1提高信息公开透明度&#xff1a; 通过大屏幕展示校园各个方面的数据信息&#xff0c;可…

MyBatisPlus(SpringBoot版)的分页插件

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖&#xff0c;改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP&#xff08;mybatisplus&#xff09;的分页插件 二、使…

COMPOSER安装使用WIN下升级PHP-V

想用TP6使用phpspreadsheet但是说我PHP版本低&#xff0c;原来是PHP7.0 composer要求至少7.4 直接修改环境变量&#xff0c;把PHP目录切换到7.4 composer升级比较简单&#xff0c;在PHP目录下CMD然后官网的命令执行下即可 下面就可以在TP根目录下执行命令安装PHPSPREADSHEET…

Docker数据集与自定义镜像:构建高效容器的关键要素

目录 博客前言 一.数据卷 1.数据卷介绍 2.实战 宿主机和容器共享目录 容器和容器之间共享目录 二.自定义镜像 1.自定义镜像介绍 2.实战 2.1自定义centos&#xff0c;具备vim及ifconfig作用 构建镜像 通过镜像运行一个容器进行测试 2.2自定义tomact&#xff08;文件为…

【IO流系列】字符流练习(拷贝、文件加密、修改文件数据)

字符流练习 练习1&#xff1a;文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2&#xff1a;文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3&#xff1a;修改文件数据&#xff08;常规方法&#xff09;3.1 需求3.2 代码实现3.3 输出结果 练习4&#xff1a;修改文件数…

CSP-201712-2-游戏

CSP-201712-2-游戏 解题思路 初始化变量&#xff1a;定义整数变量n和k&#xff0c;分别用来存储小朋友的总数和淘汰的特定数字。然后定义了num&#xff08;用来记录当前报的数&#xff09;和peopleIndex&#xff08;用来记录当前报数的小朋友的索引&#xff09;。 初始化小朋…