tomcat 运行加载机制解析

tomcat 运行加载机制解析

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等,所以会优先加载

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

相关数据

热搜第一!国足,大事不妙…
beat365登录平台

热搜第一!国足,大事不妙…

⌛ 07-24 👁️ 2408
神州专车审核需要多久
365bet手机投注

神州专车审核需要多久

⌛ 07-19 👁️ 5629
原版镜像怎么用u盘安装?原版iso镜像U盘安装教程
beat365网页版登录官网

原版镜像怎么用u盘安装?原版iso镜像U盘安装教程

⌛ 08-25 👁️ 8877
线上兼职平台对比:哪些是真正可靠的?
beat365登录平台

线上兼职平台对比:哪些是真正可靠的?

⌛ 06-28 👁️ 2336
深入解析gap值的各个方面
365bet手机投注

深入解析gap值的各个方面

⌛ 10-25 👁️ 7659
2025年怎么推广自己的产品?5个高效方法助你打开市场
beat365网页版登录官网

2025年怎么推广自己的产品?5个高效方法助你打开市场

⌛ 09-01 👁️ 7918