Tomcat7源码分析学习系列之一-----tomcat的启动文件startup的注释

1. Windows系统,tomcat启动文件startup.bat

@echo off       rem 关闭回显,不显示下面的命令;
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements. See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License. You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem ---------------------------------------------------------------------------

setlocal                                   rem setlocal命令将启动批处理文件中环境变量的本地化。本地化将持续到出现匹配的 endlocal 命令或者到达批处理文件结尾为止

rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"                        rem 设置环境变量CURRENT_DIR为当前目录--G:\server\apache-tomcat-7.0.75-src\bin
if not "%CATALINA_HOME%" == "" goto gotHome              rem 如果设置了环境变量CATALINA_HOME,即CATALINA_HOME不为空,转到 :gotHome
set "CATALINA_HOME=%CURRENT_DIR%"                  rem 没有设置环境变量CATALINA_HOME,则设置CATALINA_HOME=CURRENT_DIR,即当前文件所在目录
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome       rem 如果"%CATALINA_HOME%\bin\catalina.bat"存在,则跳转到:okHome
cd ..                                   rem 如果"%CATALINA_HOME%\bin\catalina.bat"不存在,回到当前目录的上级目录
set "CATALINA_HOME=%cd%"                      rem 设置CATALINA_HOME为当前目录,即startup.bat文件所在目录的上级目录
cd "%CURRENT_DIR%"                          rem 进入到环境变量CURRENT_DIR指定的目录--G:\server\apache-tomcat-7.0.75-src\bin
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly  rem 如果"%CATALINA_HOME%\bin\catalina.bat"不存在,提示CATALINA_HOME没有正确定义,该环境变量是运行tomcat必须的
echo This environment variable is needed to run this program
goto end rem 跳转到 :end
:okHome

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"        rem 设置环境变量EXECUTABLE=执行程序%CATALINA_HOME%\bin\catalina.bat

rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec                   rem 如果EXECUTABLE存在,跳转到:okExec
echo Cannot find "%EXECUTABLE%"                  rem 如果EXECUTABLE即%CATALINA_HOME%\bin\catalina.bat不存在,则提示不能找到环境变                      rem 量%CATALINA_HOME%\bin\catalina.bat,
echo This file is needed to run this program               rem 这个文件是运行tomcat必须的
goto end
:okExec

rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=                          rem 设置命令行参数  
:setArgs
rem %[1-9]表示参数,参数是指在运行批处理文件时在文件名后面,以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
if ""%1""=="""" goto doneSetArgs                      rem 如果没有参数跳转到:doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1               rem 设置CMD_LINE_ARGS=当前命令行参数 加上第一个参数(%1)
shift                                    rem 把第二个参数移动到第一位,即变量%2移到1%
goto setArgs                                rem 循环把所有参数都添加到CMD_LINE_ARGS
:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS%               rem 启动EXECUTABLE即%CATALINA_HOME%\bin\catalina.bat ,参数为CMD_LINE_ARGS

:end

2.Linux/unix系统,tomcat启动文件startup.sh

#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------

# Better OS/400 detection: see Bugzilla 31132
os400=false                                    #os400 IBM的操作系统
case "`uname`" in                                #uname获取操作系统名称,如果获取到的操作系统名称,是以OS400开头,这说明是IBM操作系统
OS400*) os400=true;;
esac

# resolve links - $0 may be a softlink
PRG="$0"                                  #[[email protected] Desktop]$ echo PRG="$0" PRG=/bin/bash,脚本本身的名字:$0,

#变量赋值,变量后面紧跟赋值符号"=",不能加空格,tab键等

while [ -h "$PRG" ] ; do                            #判断变量$PRG是不是连接,是的话,循环直到找到文件地址
ls=`ls -ld "$PRG"`
link=`expr "$ls" : ‘.*-> \(.*\)$‘`
if expr "$link" : ‘/.*‘ > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
#上面循环语句的意思是保证文件路径不是一个连接,使用循环直至找到文件原地址
#遇到一时看不明白的shell,可以拆解后自己在linux反复运行验证,一点点拆解就会明白的,但是还是不是很明白
PRGDIR=`dirname "$PRG"`                              #$PRG相对路径--.
EXECUTABLE=catalina.sh                                    #赋值

# Check that target executable exists
if $os400; then
# -x will Only work on the os400 if the files are:
# 1. owned by the user
# 2. owned by the PRIMARY group of the user
# this will not work if the user belongs in secondary groups
eval
else
if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then                      #判断脚本catalina.sh是否存在并有可执行权限,没有执行权限就退出
echo "Cannot find $PRGDIR/$EXECUTABLE"
echo "The file is absent or does not have execute permission"
echo "This file is needed to run this program"
exit 1
fi
fi

exec "$PRGDIR"/"$EXECUTABLE" start "[email protected]"                          #./catalina.sh start +输入参数

#exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。
#exec命令可以很好的进行脚本之间过渡,并且结束掉前一个脚本这样不会对后面执行的脚本造成干扰。
#exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 也只有在对文件描述符进行操作的时候,exec 不会覆盖你当前的 shell 环境。
#exec 可以用于脚本执行完启动需要启动另一个脚本时使用,但须考虑到环境变量是否被继承

3.总结

startup.bat和startup.sh脚本实际上并没有做什么具体工作,主要功能是在从tomcat目录下找到正确的catalina.bat/catalina.sh,并调用catalina.bat /catalina.sh start命令 +命令行中的参数。

即startup.bat/startup.sh的主要作用是调用catalina.bat/catalina.sh start命令(即其与命令行中执行catalina.bat/cata.ina.sh start作用一样)。

时间: 2024-10-15 01:51:48

Tomcat7源码分析学习系列之一-----tomcat的启动文件startup的注释的相关文章

Tomcat7源码分析学习系列之一-----tomcat的真正的启动脚本catalina.bat解析

@echo off setlocal rem Suppress Terminate batch job on CTRL+C if not ""%1"" == ""run"" goto mainEntry  rem 命令后第一个参数if "%TEMP%" == "" goto mainEntry rem TEMP,系统环境变量,Windows操作系统安装后,系统会自动配置TMEP环境变量i

Spring Boot 启动源码解析系列六:执行启动方法一

1234567891011121314151617181920212223242526272829303132333435363738394041424344 public ConfigurableApplicationContext (String... args) { StopWatch stopWatch = new StopWatch(); // 开始执行,记录开始时间 stopWatch.start(); ConfigurableApplicationContext context =

Thinkphp源码分析系列(一)–入口文件

正如官方文档上所介绍的,thinkphp使用单一入口,所有的请求都从默认的index.php文件进入.当然不是说一定非得从index.php进入,这应该取决于你的服务器配置,一般服务器都会有默认的首页,比如index.php,index.html,所以一般访问域名都会先默认访问上述文件,你还可以创建多个应用,一个应用对应一个入口文件,所有的入口文件都引用一套thinkphp类库. 我们来看index.php都干了些什么.  index.php主要任务是定义应用名称和引用类库路径.当然也可以定义一

[tomcat7源码学习]初始化之catalina.home和catalina.base(转)

我们在代码中为了获取某个配置文件路径下的文件经常会这么写 String tomcatPath = System.getProperty("catalina.home") + "/webapps/axis2/WEB-INF/conf/"; tomcatPath = tomcatPath.replace("/", File.separator); //使用此方法是为了区分unix系统与windows, //File.separator UNIX中为/

死磕Tomcat7源码之二:web组件初始化

经过死磕Tomcat7源码之一:解析web.xml,已经知道webapp的配置信息是如何解析到内存中.接下来,就是如何将对应的组件对象初始化化.分析所有的组件初始化过程,根本不可能.本文重点针对阐明3个主要组件的初始化过程,分别是:servlet,listener,filter.通过本文,你可以掌握以下知识点 了解组件初始化调用序列 组件servlet,listener,filter组件的初始化顺序 listener的初始化过程 servlet的初始化过程 filter的初始化过程 1.组件初始

WorldWind源码剖析系列:星球球体的加载与渲染

WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()依次作以下几个事情: 1.  使用System.Version在内部,读取软件版本信息,并格式化输出.我们在外面配置软件版本,“关于”部分中版本自动更改. 获取格式化版本号 // Establish the version number string used for user display, // such as the Splash and 

mysql jdbc源码分析片段 和 Tomcat's JDBC Pool

32) Tomcat's JDBC Pool Tomcat jdbc pool的使用仅需2个jar包,分别为tomcat-jdbc.jar和tomcat-juli.jar,这两个jar包都可以在tomcat7中找到,tomcat-jdbc.jar在tomcat的lib目录下,tomcat-juli.jar在bin目录下. http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/ org.apache.tomcat.jdbc.pool

SpringMVC源码分析系列

说到java的mvc框架,struts2和springmvc想必大家都知道,struts2的设计基本上完全脱离了Servlet容器,而springmvc是依托着Servlet容器元素来设计的,同时springmvc基于Spring框架,Spring框架想必搞java的同学都很熟悉. 一进Spring的官网就发现了这样一排醒目的文字, spring可以让我们构造简单的.便携的.又快又易于扩展的基于jvm的系统和应用程序. 没错,基于Spring的MVC框架SpringMVC同样也可以构造具有这些特

Cordova Android源码分析系列一(项目总览和CordovaActivity分析)

PhoneGap/Cordova是一个专业的移动应用开发框架,是一个全面的WEB APP开发的框架,提供了以WEB形式来访问终端设备的API的功能.这对于采用WEB APP进行开发者来说是个福音,这可以避免了原生开发的某些功能.Cordova 只是个原生外壳,app的内核是一个完整的webapp,需要调用的原生功能将以原生插件的形式实现,以暴露js接口的方式调用. Cordova Android项目是Cordova Android原生部分的Java代码实现,提供了Android原生代码和上层We