tomcat 运行加载机制解析

news2025/1/9 0:57:42

 tomcat 运行加载机制

从tomcat jar包的加载顺序:

tomcat的具体运行加载 可以从 start、setclasspath、catalina文件中看出来:

start.bat执行 去找bin目录下的catalina.bat,catalina 或去找 bin\setenv.bat以获取标准环境变量,然后去找bin\setclasspath.bat以获取标准java环境变量,bin\setclasspath.bat 文件里去找环境变量: 

JRE_HOME 以及JAVA_HOME,找不到 bin\java.exe、javaw.exe、jdb.exe、javac.exe 都说 JAVA_HOME环境变量不正确。应该指向JDK或者JRE:

如果JRE_HOME没有给出,就默认为JAVE_HOME,JRE目录下 没有 java.exe、javaw.exe 就提示 JRE_HOME环境变量没有设置好。。。tomcat也运行不起来。

setclasspath.bat中指定运行的java.exe、 jdb.exe的路径。

当指定要运行的这个setclasspath文件不存在时也会报错 :找不到xxxx \bin\setclasspath.bat:

调用setclasspath异常,tomcat也启动不起来。

正常调用setclasspath之后就会根据情况添加额外的jar包到CLASSPATH这个环境变量上,并且过程中不使用逗号分隔,添加 bin\tomcat-juli.jar 以及 bin\tomcat-juli.jar到 CLASSPATH环境变量上:

设置完 CLASSPATH参数,将jar包加入之后,使用conf\logging.properties 的配置作为日志配置:

在这里出现了一个CATALINA_BASE环境变量。

CATALINA_BASE 与CATALINA_HOME的区别?

CATALINA_HOME:指向 tomcat的安装根目录,主要包括了Tomcat的二进制文件和脚本,CATALINA_HOME就指向这些目录。

CATALINA_BASE:指向tomcat实例的工作目录,一个安装目录可以运行多个tomcat实例,而不需要每个实例都安装一次或者复制多个副本。

Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录,通过将conf、logs、temp webapps、work 以及shared文件夹,放入某个目录,然后将CATALINA_BASE环境变量指向该目录,并设置实例端口与已经存在的端口不一样,从而实现创建新的tomcat实例。

%CATALINA_BASE%\conf\logging.properties 文件设定tomcat的四个日志类型的文件前缀: 

同时设定日志级别:


设定日志情况之后,就开始 使用配置好的CATALINA_BASE、CATALINA_HOME、JRE_HOME、JAVA_HOME以及CLASSPATH等变量,

之后 就设定 jpda服务

之后就是根据命令行输入 确定执行的情况:

以catalina.bat start命令为例子:

设置了tomcat实例的conf/catalina.policy路径,该策略文件内容如下:

分别给 JAVA_HOME下的lib目录的javac以全部权限、JAVA_HOME/jre/ib/ext 权限以分享系统扩展,以及 JAVA_HOME/jre/../lib javac在jre目录下的全部权限、JAVA_HOME/jre/lib/ext 目录全部的权限....

以及 tomcat 示例一系列的 文件读写权限设置:如jar包 的全部权限、文件权限、 日志配置文件 只读权限、日志的可读可写权限等等。。。

类的读权限、jar的所有权限

在 catalina.policy文件里有如下介绍:

可以在catalina.policy文件里 添加 grant 语句来为特定的程序添加额外权限,比如 因公程序代码库、应用的WEB-INF/classes目录或者lib目录中的jar包,同时还可以添加jdbc驱动的权限等等。

基本上能确认 加载顺序为:

tomcat的运行需要java 运行时环境,即常说的jdk \jre等,所以会优先加载

  1. 首先是$JAVA_HOME/jre/lib/ext/下的jar文件‌:这是Java运行时环境的扩展目录,Tomcat会首先加载此目录下的jar文件‌。
  2. 接着是TOMCAT_HOME/lib中的jar包‌:这是Tomcat自身的库文件,会被优先加载‌。
  3. 然后是WEB-INF/lib中的jar包‌:每个Web应用都有自己的WEB-INF/lib目录,Tomcat在加载Web应用时会加载此目录下的jar文件‌。
  4. 最后是WEB-INF/classes中的.class文件‌:这些是Web应用自己的类文件,会被最后加载‌。

注意,tomcat 后加载的类会覆盖前面加载的同名类‌。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

策略模式实战 - 鸭展

该示例出自著名的《HeadFirst》系列的《HeadFirst设计模式》图书的第一个设计模式。用一个鸭子展览的小应用,一步步揭示了如何引入和使用策略模式将示例改造的完美一些。 文章目录 红头鸭与绿头鸭橡皮鸭和诱饵鸭用接口代替继承组合关系与策略模式 红头鸭与绿头鸭 当…

B4X编程语言:设置B4J控件的上下文菜单(ContextMenu)

B4J控件的ContextMenu属性,也叫上下文菜单属性,用于在用户右键点击控件时显示一个自定义菜单(右键菜单)。在B4J中,设置右键菜单有两种方法:一种是直接用代码设置,一种是在设计器设置。 假设在B4XMainPage页面有…

计算机网络·考点知识点整理

根据华科历年计网题,整理了一些常考的知识点难点。 因特网五层协议的功能 层次名称协议功能描述典型协议举例(至少两种)协议分组名称应用层制定两个应用进程之间的通信规范HTTP、SMTP、FTP、Telnet、POP3、IMAP报文运输层实现进程与进程之间…

创建 React Native 项目

创建 React Native 项目 npx react-nativelatest init YourProject切换依赖源 切换好源之后,你需要进入 android 目录,然后运行 gradlew build 命令。 Android 依赖安装是使用 gradlew 进行管理的。 $ cd android $ ./gradlew build --refresh-depend…

【Vue3中Router使用】

Vue3中Router使用 1. 安装vue-router组件2. 建两个测试页面2.1 测试页面Home.vue2.2 测试页面Category.vue 3. 创建路由对象4. 在入口main.js中引入router把App.vue改成路由页面5. 测试5.1 关闭检查解决ESlint报错5.2 改文件名解决ESlint检查报错测试WebHashHistory 和WebHisto…

AD20 原理图库更新到原理图

一 点击工具,从库更新。快捷键TL 二 点击完成 三 执行变更,最后点击关闭

学习SqlSugar调用达梦数据库的存储过程的基本用法

将之前学习达梦数据库递归用法的SQL语句封装为存储过程,然后使用SqlSugar在C#程序中调用。   打开达梦管理工具,在SCHOOL数据库的存储过程文件夹新建存储过程,这里需注意,存储过程名称及参数名称都需要大写,且参数名…

如何让Google快速收录你的页面?

要让Google更快地收录你的网站内容,首先需要理解“爬虫”这个概念。Google的爬虫是帮助它发现和评估网站内容质量的工具,如果你的页面质量高且更新频率稳定,那么Google爬虫更可能频繁光顾。通常情况下,通过Google Search Console&…

思特奇政·企数智化产品服务平台正式发布,助力运营商政企数智能力跃迁

数字浪潮下,产业数字化进程加速发展,信息服务迎来更广阔的天地,同时也为运营商政企支撑系统提出了更高要求。12月4日,2024数字科技生态大会期间,思特奇正式发布政企数智化产品服务平台,融合应用大数据、AI等新质生产要素,构建集平台服务、精准营销、全周期运营支撑、智慧大脑于…

模型 AITDA(吸引、兴趣、信任、渴望、行动)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。吸引、兴趣、信任、渴望、行动 五步曲。 1 模型AITDA的应用 1.1 开源AI智能名片小程序的营销策略 一家企业开发了开源AI智能名片小程序,旨在通过S2B2C模式连接供应商和消费者。该企业采用…

工业—使用Flink处理Kafka中的数据_ProduceRecord1

1 、 使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入Redis 中, key 值为

OpenSSH和OpenSSL升级

需求 centos7.9升级SSH和SSL OpenSSH升级为openssh9.8 OpenSSL升级为openssl-3.4.0 下载openssh最新版本与openssl对应版本 openssh最新版本下载地址 wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gzOpenSSL下载地址 这里下载的是3.4.0 wg…

大语言模型(2)--GPT-1

GPT-1是由OpenAI在2018年推出的第一代生成式预训练模型(《Improving Language Understanding by Generative Pre-Training》),它采用了无监督预训练和有监督微调相结合的方法,以增强模型的通用任务求解能力。在此之前,…

IDEA 鼠标悬浮显示方法注释 javaDoc 及配置遇到的问题

方法详情: 鼠标悬浮时的效果: 设置方法: File -> Settings -> Editor -> Code Editing -> Quick Documentation,勾选红框中的选项 可能会遇到的问题: 如果不能选中,如下图 把下图的位置的选中项取消掉 选…

微信小程序实现图片拖拽调换位置效果 -- 开箱即用

在编写类似发布朋友圈功能的功能时,需要实现图片的拖拽排序,删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码,可以在威信中搜索:我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…

import是如何“占领满屏“

import是如何“占领满屏“的? 《拒绝使用模块重导(Re-export)》 模块重导是一种通用的技术。在腾讯、字节、阿里等各大厂的组件库中都有大量使用。 如:字节的arco-design组件库中的组件:github.com/arco-design… …

鸿蒙分享(二):引入zrouter路由跳转+封装

码仓库:https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 鸿蒙第三方库地址:OpenHarmony三方库中心仓 zrouter地址:OpenHarmony三方库中心仓 1.引入zrouter 1.打开终端界面:输入 ohpm install hzw/zrouter 2.在项目…

第七节(2)、T型加减速优化处理【51单片机-TB6600驱动器-步进电机教程】

摘要:本节介绍解决标准T型加减速过程中的两个缺陷,其一是使得初速度任意设置;其二是降低Cn递推计算量,提升速度上限 一. 加速减速过程计算 1.1计算不存在匀速过程 根据基本运动定理: w m a x w 0 a 0 ∗ t n 0 … …

MySQL--用户权限

1.使用root用户登录MySQL客户端,创建一个名为userl的用户,初始密码为123456;创建一个名为user2的用户,无初始密码。然后,分别使用uesr1、user2登录MySQL 客户端。 创建两个用户 使用user1登录 使用user2登录 2.使用root用户登录&a…

最新版Chrome谷歌加载ActiveX控件之金格iWebOffice2015控件

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…