tomcat的启动流程

参考地址:https://blog.csdn.net/flyliuweisky547/article/details/22753383

一、结论

**执行startup.bat等同于catalina.bat start,而执行catalina.bat start等同于java Bootstrap start(附带-D、-classpath选项) Tomcat就是一个java程序**

二、过程

2.1 前言

catalina.bat中涉及一个新的bat语法:替换变量中的某个字符

获取系统变量:%JAVA_HOME%

获取系统变量%JAVA_HOME%,将%JAVA_HOME%中的a替换成CSDN:%JAVA_HOME:a=CSDN%

创建Test.bat

@echo off
echo %JAVA_HOME%
echo %JAVA_HOME:a=CSDN%

catalina.bat中的%CATALINA_HOME:;=%,是将%CATALINA_HOME%的;删除

catalina.bat中通过"%CATALINA_HOME%" == “%CATALINA_HOME:;=%”,检查CATALINA_HOME中是否包含;

true-不包含;false-包含

2.2 catalina.bat分析

.bat 文件叫批处理文件,顾名思义,就是把一堆的dos命令写在一个文件中进行批量处理执行。
下面我们来看看catalina.bat(代码就不贴了。。。)

@echo off-从本条命令开始开始,关闭回显,如果不关闭的话.bat 中的所有命令都会在控制台上打印一遍

if “%OS%” == “Windows_NT” setlocal-判断是否为Windows系统。是,则执行setlocal

以下这部分代码是删除临时文件(如果存在的话)

if not “”%1"" == ““run”” goto mainEntry
if “%TEMP%” == “” goto mainEntry
if exist “%TEMP%%~nx0.run” goto mainEntry
echo Y>"%TEMP%%~nx0.run"
if not exist “%TEMP%%~nx0.run” goto mainEntry
echo Y>"%TEMP%%~nx0.Y"
call “%~f0” %* <"%TEMP%%~nx0.Y"
rem Use provided errorlevel
set RETVAL=%ERRORLEVEL%
del /Q “%TEMP%%~nx0.Y” >NUL 2>&1
exit /B %RETVAL%
:mainEntry
del /Q “%TEMP%%~nx0.run” >NUL 2>&1
————————————————
catalina.ba执行流程图
在这里插入图片描述

在这里插入代码片

在这里插入图片描述
在catalina.bat的:end下方加入一行代码

echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

在这里插入图片描述
在这里插入图片描述

start "Tomcat" "D:\Program Files\Java\jdk1.7.0_17\bin\java"  -Djava.util.logging.config.file="D:\apache-tomcat-7.0.40\conf\logging.properties" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager   -Djava.endorsed.dirs="D:\apache-tomcat-7.0.40\endorsed" -classpath "D:\apache-tomcat-7.0.40\bin\bootstrap.jar;D:\apache-tomcat-7.0.40\bin\tomcat-juli.jar" -Dcatalina.base="D:\apache-tomcat-7.0.40" -Dcatalina.home="D:\apache-tomcat-7.0.40" -Djava.io.tmpdir="D:\apache-tomcat-7.0.40\temp" org.apache.catalina.startup.Bootstrap  start

可以看出:
start “Tomcat” 表示打开一个新的dos窗口并且标题为Tomcat
在这里插入图片描述

2.3 通过java调用开启tomcat

拿到上一步打印的启动tomcat的java命令,放在以下测试程序总的cmdStartTomcat 这个变量上执行

package com.esint.boot.catalina;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * User: maruis
 * Date: 2021/5/15  11:41
 * Description:
 */
public class Test {

	public static void main(String[] args) throws IOException {
		String cmdStartTomcat = "start \"Tomcat-maruis-8080\" \"D:\\Program Files\\Java\\jdk1.7.0_17\\bin\\java\"    -classpath \"D:\\apache-tomcat-7.0.40\\bin\\bootstrap.jar;D:\\apache-tomcat-7.0.40\\bin\\tomcat-juli.jar\"  -Dcatalina.home=\"D:\\apache-tomcat-7.0.40\"  org.apache.catalina.startup.Bootstrap  start";

		InputStream ins = null;
		// 注意两面两个参数cmd.ex he /c 一定要写
		String[] cmd = new String[] { "cmd.exe", "/C", cmdStartTomcat };  // 命令
		Process process = null;
		try {
			process = Runtime.getRuntime().exec(cmd);
			ins = process.getInputStream();  // 获取执行cmd命令后的信息
			BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
			String line = null;
			while ((line = reader.readLine()) != null) {
				System.out.println(line);  // 输出
			}
			int exitValue = process.waitFor();
			System.out.println("返回值:" + exitValue);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(process!=null){
				process.getOutputStream().close();  // 不要忘记了一定要关
				process  = null;
			}

		}
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值