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.target

EOF
          
[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在应用启动、停止、上下文初始化、销毁等阶段还会触发相应的生命周期事件,以便开发者
能够插入自定义的初始化逻辑或资源清理操作。'

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Jupyter-lab中使用RDKit画分子2D图

在Jupyter-lab中使用RDKit画分子2D图 在做完分子对接后&#xff0c;想看看筛选后的分子的结构。因此想利用Jupyter-lab来画分子的2D图。 1. 安装Jupyter-lab与RDKit 系统&#xff1a;Win11已安装conda RDKit 是一个功能强大、灵活易用的化学信息学工具包&#xff0c;广泛应…

【详识JAVA语言】面向对象程序三大特性之一:封装

封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说 就是套壳屏蔽细节。 比如&#xff1a;对于电脑这样一个复杂的设备&#xff0c;提供给用户的就只是&#xff1a;开关机、通…

JetCache源码解析——API实现(持续更新中……)

在JetCache中不仅可以通过在类和接口的函数上使用注解Cached、CacheUpdate和CacheInvalidate等实现缓存加载、更新和删除操作&#xff0c;也支持通过调用API接口的形式来实现缓存的加载、更新和删除操作。 缓存接口 缓存接口的定义如下&#xff1a; /*** 缓存接口&#xff0…

力扣周赛387

第一题 代码 package Competition.The387Competitioin;public class Demo1 {public static void main(String[] args) {}public int[] resultArray(int[] nums) {int ans[]new int[nums.length];int arr1[]new int[nums.length];int arr2[]new int[nums.length];if(nums.leng…

SUPER 4PCS配准

一、下载编译 1、下载 链接&#xff1a;STORM-IRIT/OpenGR: OpenGR: A C library for 3D Global Registration (github.com) 不过有部分代码不能成功下载&#xff0c;要到该文件夹再次下载&#xff0c;就是下面标黄的两个文件&#xff0c;下载之后首先解压OpenGR-master.zip&…

python笔记_程序流程控制

A&#xff0c;顺序控制 程序从上到下逐行执行 python定义变量时&#xff0c;会合法地向前引用 age 1 age2 age 1 age2 age 1 age 1 ——>错误&#xff0c;age应在age2之前 B&#xff0c;分支控制 1&#xff0c;单分支if 语法 if 条件表达式 &#xff1a; 代码块 说明…

matplotlib条形图

matplotlib条形图 假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b), 那么如何更加直观的展示该数据? from matplotlib import pyplot as plta ["Wolf Warrior 2", "Fast and Furious 8", "Kung Fu Yoga", "Jo…

【Godot4自学手册】第十九节敌人的血量显示及掉血特效

这一节&#xff0c;我主要学习敌人的血量显示、掉血显示和死亡效果。敌人的血量显示和主人公的血量显示有所不同&#xff0c;主要是在敌人头顶有个红色的血条&#xff0c;受到攻击敌人的血条会减少&#xff0c;并且有掉血数量的文字显示&#xff0c;效果如下&#xff1a; 一、…

写时复制简介

写时复制技术(Copy on Write)是比较常用的一种技术&#xff0c;它的主要目的是延迟减少以及延迟内存的分配&#xff0c;增加执行效率&#xff0c;只有在真正进行写操作的过程中才会真正分配物理资源。同时&#xff0c;也可以保护数据在系统崩溃时出现的丢失。比如&#xff0c;我…

2.2 mul、div、and、or乘除指令及所有寄存器英文名

汇编语言 1. mul乘指令 两个相乘的数&#xff0c;要么都是8位&#xff0c;要么都是16位 两个8位数相乘 一个默认放在al中&#xff0c;另一个放在8位reg或内存字节单元中8位乘法&#xff0c;结果默认放在ax中例如&#xff1a;计算100*10 100和10小于255&#xff0c;可以做8位…

勇敢尝鲜之Springboot3大坑-集成Mybatisplus报错:ddlApplicationRunner

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

AcWing 4726. 寻找数字

解题思路 在这个二插搜索树中寻找&#xff0c;4和7数量相等&#xff0c;并且大于n的最小数。 相关代码 import java.util.*;public class Main {static String s;static List<Integer> res new ArrayList<>();static long n;static long ansLong.MAX_VALUE;publ…

萌新学习RSA第二天(离线分解整数N)

1.yafu的使用&#xff08;离线环境分解N&#xff09;、 下载 打开 及使用 下载地址&#xff1a;https://sourceforge.net/projects/yafu/ 在下载好的并解压好的文件夹上鼠标右键打开终端 然后输入.\yafu-x64.exe并回车运行 .\yafu-x64.exe 来到这个页面就OK了 然后输入 fa…

如何使用ArcGIS Pro创建最低成本路径

虽然两点之间直线最短&#xff0c;但是在实际运用中&#xff0c;还需要考虑地形、植被和土地利用类型等多种因素&#xff0c;需要加权计算最低成本路径&#xff0c;这里为大家介绍一下计算方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…

Outlook邮箱IMAP密码怎么填写?账户设置?

Outlook邮箱IMAP密码是什么&#xff1f;Outlook如何设置IMAP&#xff1f; 许多用户会选择通过IMAP协议将邮箱与各种邮件客户端进行连接。而在设置过程中&#xff0c;填写IMAP密码是必不可少的一步。那么&#xff0c;Outlook邮箱的IMAP密码应该如何填写呢&#xff1f;接下来&am…

一定用得到数据预处理:去噪、滤波方法!限幅滤波、中值滤波、均值滤波、递推平均滤波,直接运行!

​适用平台&#xff1a;Matlab2020版本及以上 在实际应用中&#xff0c;滤波、去噪都是用于信号处理的工具&#xff0c;通常用于机器学习/深度学习技术前的数据预处理阶段&#xff0c;主要作用在于对信号进行平滑处理或者去除噪声&#xff0c;从而提取出信号中的有用信息或者改…

win8.1 关闭资源管理器上的classic shell的工具条

打开控制面板&#xff0c;鼠标移动到菜单栏右键&#xff0c;去掉Classic Explorer Bar的勾选&#xff0c;重新打开资源管理器发现已经没有classic shell的工具条。 classic shell工具条占用屏幕空间&#xff0c;有没有什么用处 参考连接 It seems I cant disable the toolbar…

Apache POI的简单介绍与应用

介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。PS&#xff1a; 一般情况下&#xff0c;POI 都是用于操作 Excel 文件&#xff0c;如图&#xff1a; Apache POI 的应用场景&…

源码视角,vue3为什么推荐用ref,而不是reactive

ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型&#xff0c;而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象&#xff0c;但 Vue3 官方文档更推荐使用 ref。 我的想法&#xff0c;ref就是比reactive好用&#xff0c;官方也…

C++进阶-- map和set

关联式容器 在前面&#xff0c;我们所学的vector、list、deque&#xff0c;这些都是序列容器&#xff0c;也就是底层为线性序列的数据结构。 而关联式容器是C标准库中的一种类别&#xff0c;用于存储键值对&#xff08;key-value pair&#xff09;&#xff0c;关联式容器中的元…