那么startup.bat(// TODO startup.sh暂缓)启动后发生了什么呢?

 @echo off
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. if "%OS%" == "Windows_NT" setlocal
rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem --------------------------------------------------------------------------- rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end

  line1  @echo off  @关闭本命令回显,echo off命令是关闭输出所执行的批处理操作

  line17  if "%OS%" == "Windows_NT"  setlocal  如果有OS这个环境变量且值为Windows_NT,开始设置本地环境变量。其中setlocal命令的解释是:Starts localization of environment variables in a batch file. Localization continues until a matching endlocal command is encountered or the end of the batch file is reached. 即在批处理文件中开始设置本地化环境变量,这些变量在遇到与之(setlocal)对应的endlocal命令或者bat文件结束前一直有效。刚才发现电脑上另一个版本的tomcat(7.0.67)中已经取消了OS变量的判断而直接setlocal。

  line23-35  Guess CATALINA_HOME if not defined,找CATALINA_HOME这个变量,判断catalina.bat是否存在。

rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

  line23  set "CURRENT_DIR=%cd%"  CURRENT_DIR就是启动后第一个临时环境变量,这个环境变量的值是%cd%,"%cd%" 获取的是bat文件执行的当前目录,cd = current_dir的缩写,即C:\tool\apache-tomcat-7.0.67\bin。

  line24  if not "%CATALINA_HOME%" == "" goto gotHome  如果设置了CATALINA_HOME环境变量,goto gotHome节点,但我估计开发很少有设置这个环境变量的(反正我从不);没有这个变量的话继续。

  line25  set "CATALINA_HOME=%CURRENT_DIR%"  设置CATALINA_HOME(算是又一个临时环境变量)为当前bat文件执行目录, 即C:\tool\apache-tomcat-7.0.67\bin。

  line 26  if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome  如果%CATALINA_HOME%E\bin\下的catalina.bat存在的话,goto okHome节点。默认安装的tomcat里catalina.bat和startup.bat都在%CATALINA_HOME%E\bin\下。

  line27  cd ..  如果在%CATALINA_HOME%E\bin\没有catalina.bat文件,回到父目录即C:\tool\apache-tomcat-7.0.67。

  line28  set "CATALINA_HOME=%cd%"  然后改变CATALINA_HOME=C:\tool\apache-tomcat-7.0.67。

  line29  cd "%CURRENT_DIR%"  回到C:\tool\apache-tomcat-7.0.67\bin。

  line31  if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome  再次判断catalina.bat是否存在,如果存在goto okHome节点;不存在执行line32-33的输出,然后goto end节点,本次批处理结束。

  line37  set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"  设置executable节点

  line39-44  再次判断%CATALINA_HOME%\bin\catalina.bat是否存在,如果存在goto okExec节点;不存在goto end节点,本次批处理结束。

  line46-53  设置CMD_LINE_ARGS 

set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

  line47-48  将: setArgs节点下的返回结果赋值给CMD_LINE_ARGS变量。

  line49-52  如果%1也就是第一个参数为空,goto doneSetArgs;否则循环所有的参数,将所有的参数加上一个空格后拼接在一起,赋值给CMD_LINE_ARGS变量,全部参数处理完后执行line56

shift命令    批处理文件中可引用的参数为%0~%9,%0是指批处理文件的本身,也可以说是一个外部命令: %1~%9是批处理参数,也称形参: 而替换形参的实参若超过了批处理文件中所规定数值(9个)且想在批处理文件中应用这些实参的话,shift命令可以帮你实现!它更改批处理文件中可替换参数的位置,shift [/n] n的取值是[0,8],且为整数;[/n]为可选参数,当赋予n某个值时,就意味着命令从第n个参数开始移位;当n赋予的值为0,1或不带有任何命令选项的shift时,则表示批处理文件中替换参数左移一个位置,后面的替换参数陆续填补上去,直至可替换参数为空。

shift命令

  line56  call "%EXECUTABLE%" start %CMD_LINE_ARGS%  调用EXECUTABLE参数为start和上边拼接CMD_LINE_ARGS(可能为空)。

  至此,startup.bat结束,可以看出它主要的目的是找到并启动catalina.bat。

  

(一)startup.bat的更多相关文章

  1. [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat

    概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...

  2. 免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动。

    免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...

  3. 直接双击启动tomcat中的startup.bat闪退原因及解决方法

    免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...

  4. tomcat启动startup.bat一闪而过 转

    遇到很多次运行startup.bat后,一个窗口一闪而过的问题,但是从来没去纠正怎样修改配置才是正确的,现在从网上查阅的资料整理如下:tomcat在启动时,会读取环境变量的信息,需要一个CATALIN ...

  5. Tomcat的startup.bat一闪而过问题的解决

    问题描述:点击Tomcat的startup.bat,一闪而过. 问题分析: 1.Tomcat的startup.bat--->catalina.bat--->setclasspath.bat ...

  6. startup.bat闪退---tomcat环境变量配置中遇到的问题

    常用的方法: 1.在已解压的tomcat的bin文件夹下找到startup.bat,右击->编辑.在文件头加入下面两行: SET JAVA_HOME=D:\Java\jdk1.6.0_10   ...

  7. 启动tomcat的 startup.bat屏幕一闪而过

    有时启动tomcat 时,屏幕一闪而过,看不到是那里有问题.要想让屏幕停下来,做法如下: 1.打开 startup.bat 文件,在文件最后加上最后加一行@pause 2.重新运行 startup.b ...

  8. 更改Tomcat startup.bat启动窗口名称

    通常在Tomcat bin目录下用startup.bat启动Tomcat ,启动窗口显示的Title是Tomcat 如果遇到一个服务器上多个Tomcat的话就会容易混淆.更改方法如下: 1 在bin目 ...

  9. 关于tomcat startup.bat启动后一闪而过的问题(转)

    1.如果双击startup.bat,窗口一闪而过,可以在命令行里面启动startup.bat:  2.如果命令行里面启动startup.bat情况还是这样,就可以在bat命令后面加上pause.这样就 ...

随机推荐

  1. 【SSM 8】spring集成Mybatis通用Mapper

    上篇博客中介绍了关于Mybatis底层封装的思路问题,那么这篇博客,就介绍一下怎么引入通用的mapper插件. 备注:本项目通过maven管理 关键版本说明: spring:4.1.3.RELEASE ...

  2. CSS 定位机制 position

    position属性W3School有详细介绍 1.(position:relative;)相对定位会按照元素的原始位置对该元素进行移动.relative 2.(position:absolute;) ...

  3. 官方提供的屏蔽百度转码Baidu Transcoder的方法no-transform

    首先,百度在官方的声明中说:[喝小酒的网摘]http://blog.hehehehehe.cn/a/17112.htm百度仅作为中立的转码工具及相关技术的提供方.在转码过程中,百度对第三方网站内容不做 ...

  4. Axure 资料搜集

    Axure官方核心训练(翻译) http://www.webppd.com/thread-9347-1-1.html 原文链接:http://www.axure.com/learn 下载链接:http ...

  5. 学习一下mef

    微软 http://msdn.microsoft.com/zh-cn/magazine/ee291628.aspx mef http://biancheng.dnbcw.info/net/370552 ...

  6. 安装sass并ruby更改淘宝镜像

    一.安装ruby 去官网下载ruby安装(注意:安装的时候选择第二项变量环境安装add ruby executables to your PATH) 二.安装完成后 在windows左下角打开所有应用 ...

  7. python包下载地址

    https://pypi.python.org/pypi http://www.lfd.uci.edu/~gohlke/pythonlibs/ 当在线安装安装不了时,需要将安装包下载到本地,进行本地p ...

  8. 实时消息平台NSQ的特性

    NSQ是GO语言开发的可用于大规模系统中的实时消息服务,但是和RabbitMQ等相比,它具有什么特色,什么场景下选择NSQ呢? NSQ的自身特色很明显,最主要的优势在如下三个方面: 1,性能.在多个著 ...

  9. MySQL效能监控工具mysqlreport安装和中文说明

    管理 mysql 最让人困扰的就是如何有效的掌握 MySQL 的健康状况,因为 MySQL 虽然有提供许多系统变量值供您参考,但这些零散的数据若要手动搜集与过滤将会是一件十分没有效率的事情(除非您写 ...

  10. select 一直返回0

    select设置超时时间后一直返回零,是因为每次select后监听的fd_set都被重置,解决方法就是每次重新设置