查看tomcat启动文件都干点啥

作者&投稿:谭子 (若有异议请与网页底部的电邮联系)
~ 在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina.bat的命令call "%EXECUTABLE%" start %CMD_LINE_ARGS%,其中"%EXECUTABLE%"这个就是catalina.bat文件,这个命令至少向catalina.bat传递一个参数--start.

接下来看一下catalina.bat中的内容,内容很长:
View Code

在第1行,和第17行中的内容已经在前一章中做出说明,在此处不再敖述,我对于18-85行的这段注释比较感兴趣:
复制代码

1 rem ---------------------------------------------------------------------------
2 rem Start/Stop Script for the CATALINA Server
3 rem
4 rem Environment Variable Prerequisites
5 rem
6 rem CATALINA_HOME May point at your Catalina "build" directory.
7 rem
8 rem CATALINA_BASE (Optional) Base directory for resolving dynamic portions
9 rem of a Catalina installation. If not present, resolves to
10 rem the same directory that CATALINA_HOME points to.
11 rem
12 rem CATALINA_OPTS (Optional) Java runtime options used when the "start",
13 rem or "run" command is executed.
14 rem
15 rem CATALINA_TMPDIR (Optional) Directory path location of temporary directory
16 rem the JVM should use (java.io.tmpdir). Defaults to
17 rem %CATALINA_BASE%\temp.
18 rem
19 rem JAVA_HOME Must point at your Java Development Kit installation.
20 rem Required to run the with the "debug" argument.
21 rem
22 rem JRE_HOME Must point at your Java Runtime installation.
23 rem Defaults to JAVA_HOME if empty.
24 rem
25 rem JAVA_OPTS (Optional) Java runtime options used when the "start",
26 rem "stop", or "run" command is executed.
27 rem
28 rem JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
29 rem containing some jars in order to allow replacement of APIs
30 rem created outside of the JCP (i.e. DOM and SAX from W3C).
31 rem It can also be used to update the XML parser implementation.
32 rem Defaults to $CATALINA_HOME/endorsed.
33 rem
34 rem JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
35 rem command is executed. The default is "dt_socket".
36 rem
37 rem JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
38 rem command is executed. The default is 8000.
39 rem
40 rem JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
41 rem command is executed. Specifies whether JVM should suspend
42 rem execution immediately after startup. Default is "n".
43 rem
44 rem JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
45 rem command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
46 rem and JPDA_SUSPEND are ignored. Thus, all required jpda
47 rem options MUST be specified. The default is:
48 rem
49 rem -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
50 rem address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
51 rem
52 rem LOGGING_CONFIG (Optional) Override Tomcat's logging config file
53 rem Example (all one line)
54 rem set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
55 rem
56 rem LOGGING_MANAGER (Optional) Override Tomcat's logging manager
57 rem Example (all one line)
58 rem set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
59 rem
60 rem TITLE (Optional) Specify the title of Tomcat window. The default
61 rem TITLE is Tomcat if it's not specified.
62 rem Example (all one line)
63 rem set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
64 rem
65 rem
66 rem
67 rem $Id: catalina.bat 1040546 2010-11-30 14:47:34Z markt $
68 rem ---------------------------------------------------------------------------

复制代码

这段的内容就是说明一下在启动和停止CATALINA server时候需要的一下先决条件,CATALINA_HOME--看到这个大家可能会有点疑问,如果在操作系统上没有设置CATALINA_HOME变量的时候,那么这个变量应该是不存在的丫,是怎么回事呢?是不是?下面我们还是用测试来说明问题:我在F:\apache-tomcat-7.0.8\bin目录下创建一个test.bat文件,文件内容如下:    

@echo off
set CURRENT_DIR=%cd%
test2.bat

   意思很简单,只是将%cd%变量的值赋给CURRENT_DIR变量,然后调用test2.bat文件,test2.bat文件的内容如下:

echo %CURRENT_DIR%

   只是简单的输出%CURRENT_DIR%变量,让我们先运行test.bat文件,查看%CURRENT_DIR%变量是否能够正确输出:

  

结果正确显示了,但是如果我们直接运行test2.bat文件会有什么结果呢?

   

结果显示不正常,这个测试就说明由test.bat调用test2.bat文件时候,test.bat中定义的变量在test2.bat中可见,就是CURRENT_DIR变量的生命周期范围并不是仅限于本文件,也能加深对于setlocal方法的理解。回到catalina.bat本身,也许我们本身没有设置CATALINA_HOME环境变量的习惯,但是回想一下上一节,在startup.bat中说到,如果没有设置CATALINA_HOME变量,startup.bat内会给CATALINA_HOME变量赋值,然后在catalina.bat中依然能够访问此变量。

这段注释说完之后,看一下88行:     

if not ""%1"" == ""run"" goto mainEntry

  如果接收到的第一个参数是run那么到:mainEntry节点,事实是我们从startup.bat调用的时候传递的第一个参数无疑是start,所以应该顺序执行到第89行,这里可能有人会有疑问,那什么时候第一个参数才是run呢?事情是这样的,因为并不是所有人都是跟我们一样直接使用startup.bat文件启动,因为startup.bat文件也只不过就是找到catalina.bat文件,然后照样传递参数,其实有经验的人大可直接使用catalina.bat文件来启动tomcat。这就是第一个参数为run的产生情况。接下来我们顺序执行到第89行。

看一下89行的内容:

if ""%TEMP%"" == """" goto mainEntry

  如果TEMP变量为空,那么到mainEntry节点,这个时候我们就需要看看我们到底有没有这个TEMP变量,同样弄个小测试,写一个小的测试test.bat文件,文件内容如下:  

@echo off
echo %TEMP%

  查看执行结果:

记得在上一节中说过%TEMP%这个变量是从环境变量中读取的,所以也可以去环境变量中查看是不是有此值,来确定TEMP变量是不是存在,一问在startup.bat和catalina.bat并没有设置TEMP变量。查看环境变量:

  

因为TEMP存在,所以程序还需要顺序执行到90行,第90行的内容如下:  

if exist "%TEMP%\%~nx0.run" goto mainEntry

  这句话至少看起来有点蒙圈,尤其是\%~nx0.run这个东西,反正我第一次看见的时候我就想问问,这是毛啊,~nx0,下面看一下网上对于%~nx0的解释:

%~nx0 contains the name of the running batch file (without the path)

  意思就是代表执行命令的文件的名字,我们来用实验证明一下,同样还是修改那个test.bat文件吧。;-)  

@echo off
echo "%TEMP%\%~nx0.run"

  如果按照上面的解释,那么输出的信息应该是C:\Users\Think\AppData\Local\Temp\test.bat.run,下面看一下运行结果:

  

  咦事实证明说法正确,但是这个文件是不是存在呢,我们去TEMP目录下看一下,遗憾的是在C:\Users\Think\AppData\Local\Temp目录没有找到这个文件,所以还得顺序执行到第91行,91行的内容是:  

echo Y>"%TEMP%\%~nx0.run"

  这个看起来很简单,既然不存在这个文件,那么我就自己创建一个,同时写入Y。也许你不信,所以我还是拿出个例子吧,还是test.bat呦:

@echo off
echo Y>"%TEMP%\%~nx0.run"

  在C:\Users\Think\AppData\Local\Temp目录下生成了test.bat.run文件,文件的内容果然为Y。至于生成的文件有何意义,以后再说。到现在位置我突然感慨,我很喜欢TOMCAT,它做了什么我都能知道,在接下来的一段时间内,我想把我看TOMCAT源代码的感受也下下来。也跟大家讨论一下TOMCAT的工作原理。有点远,扯回来,下面看一下92行的内容:

if not exist "%TEMP%\%~nx0.run" goto mainEntry

  这个一眼就看明白了,再次判断%~nx0.run文件是否存在,如果还是不存在,那么直接到mainEntry节点,由于我们此时此文件已经创建成功,那么顺序执行到第93行。

  93行的内容为:  

echo Y>"%TEMP%\%~nx0.Y"

  这个同91行命令,不再强调。顺序执行到92行。

  92行的内容为:  

  call "%~f0" %* <"%TEMP%\%~nx0.Y"

  看到之后感觉依然是蒙圈,这里面有两个点需要大家掌握:%~f0, %* 知道这两组符号是什么意思,就解决了。

  %~f0:表示运行的文件的全路径,假如我在test.bat中如此写:  

@echo off
@echo %%~f0 is %~f0

  那么执行结果为:

  

OK。

  %*:在batch file中,每一个命令的参数都以%1,%2,%3 .....的形式展现,我们也可以使用%来代替所有的参数,下面看修改万能测试文件test.bat中的内容如下:  
复制代码

@echo off
echo First argument: [%1]
echo Second argument: [%2]
echo Third argument: [%3]
echo Fourth argument: [%4]
echo Fifth argument: [%4]
echo Entire command line: [%*]

复制代码

  查看运行结果:

  

  意思就是将在catalina.bat文件中自己调用自己,传递参数Y,下面看一下测试,将test.bat中的内容改为:  

@echo off
call "%~f0" %* <"%TEMP%\%~nx0.Y"

  查看运行结果,在程序运行了一段时间以后,得出如下结论:

  

  很奇怪,奇怪亮点,为什么运行的时候会有停顿,第二,为什么会产生这个结果。下面解决这两个困惑,我觉得程序在运行的时候肯定是在后台运行什么操作了,所以我将test.bat中的内容改了一下:     

call "%~f0" %* <"%TEMP%\%~nx0.Y"

  然后再次运行,得到结果:

  

  原来程序在输出最终结果之前一直到在调用自己,所以会有一个停顿的感觉。

  第二:为什么会产生这个结果:

    

  下面看第96行的内容:  

  set RETVAL=%ERRORLEVEL%

  在前面的的内容中可能给大家一种误解,所以在看到这句话的时候,不知道是不是也有人跟我似的直接去环境变量中找ERRORLEVEL的值,找不到之后觉得我在忽悠大家,下面我跟大家说说这个ERRORLEVEL。不知道大家是不是了解在Linux中的$?这个结果返回值,其实ERRORLEVEL和$?差不多,都是用来表示上次执行结果的,如果返回0说明执行正确,如果不是0说明执行失败。例如在test.bat中的内容:  

call %ERRORLEVEL%

  执行结果:

  

  下面看97行的内容:  

del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1

  这里面有/Q, >NUL, 2>&1需要跟大家解释一下:

  /Q: 跟在del后面表示不需要交互式的删除。安静模式的意思。如在test.bat中的内容如下:  

del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1

  然后运行结果为:

  

  此时文件系统中的文件确实已经被删除,只是在删除的过程中没有显示删除的过程,下面我们重新创建此文件,然后把/Q标记去掉以后在尝试一次:

  >NUL 就是将输出输出到NUL中,这样有错误的情况下你什么都拿不到。

  2>&1:2是值错误输出,&1是标准输出,意思就是将错误输出重定向到标准输出中

   >NUL 2>&1的意思就是将错误输出重定向到标准输出,最后在重定向到NUL中,这样出现错误,你从表面上不会看出来。如果将test.bat中的删除操作执行多次,  

@echo off
del /Q "%TEMP%\%~nx0.Y" >NUL 2>&1

  看结果:

  

  也不会显示异常,如果将>NUL 2>&1删除以后,再次执行:

@echo off
del /Q "%TEMP%\%~nx0.Y"

  结果就会显示出异常:

  

  下面看第98行的内容:  

exit /B %RETVAL%

  下面的mainEntry和gotHome节点的信息同前一节刚开始的内容一样,所有就不再说明,如果对此有什么疑问,请查看查看tomcat启动文件都干点啥一节。在接下来的部分中我想把115-137行的内容放在一起说明,因为他们分为两部分,分别引入setenv.bat和setclasspath.bat并执行,
复制代码

:okHome

rem Ensure that any user defined CLASSPATH variables are not used on startup,
rem but allow them to be specified in setenv.bat, in rare case when it is needed.
set CLASSPATH=

rem Get standard environment variables
if "%CATALINA_BASE%" == "" goto gotSetenvHome
if exist "%CATALINA_BASE%\bin\setenv.bat" call "%CATALINA_BASE%\bin\setenv.bat"
goto gotSetenvBase
:gotSetenvHome
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
:gotSetenvBase

rem Get standard Java environment variables
if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
echo This file is needed to run this program
goto end
:okSetclasspath
set "BASEDIR=%CATALINA_HOME%"
call "%CATALINA_HOME%\bin\setclasspath.bat" %1
if errorlevel 1 goto end

复制代码

  这部分的操作就是设置环境变量,由于在tomcat7.0.8版本中不存在setenv.bat所以就不说了,setclasspath.bat这个脚本很重要,浏览一下其中的内容:  
View Code

  其中就是关于JAVA环境的一些校验和变量的设置,重要性不言而喻,所以如果执行本步操作失败的情况下,程序将退出执行。


linux查看tomcat是否启动
linux怎么查看tomcat是否启动?我们一起来了解一下吧。1、打开linux系统,在linux的桌面的空白处右击。2、在弹出的下拉选项里,点击打开终端。3、输入ps-ef|grepjava,如果显示非常多的内容,表明正在运行,反之表示其以关闭。

如果检测 Tomcat 是否启动完成?
①如果使用的是解压版的tomcat,成功启动之后,一般控制台会输出一些信息,根据这个信息就可以判断是否成功启动。②如果使用的是安装版的tomcat,要么去logs文件夹下面看日志信息,要么直接在浏览器访问:http:\/\/localhost:8080\/ 即可知道tomcat是否成功启动。③还有tomcat启动之后,进程名称是javaw.exe ...

怎么查看tomcat 是否启动成功
程序提示:The service 'Tomcat5(或者你修改一后的SERVICE_NAME)' has been installed 说明服务Tomcat已经被安装成功。顺便说一下,运行service.bat remove可以移除服务。3、到这里,服务添加成功,运行services.msc,可以看到添加的服务,默认状态下该服务是手动运行的,在他的属性中,将启动类型更改为“...

怎么查看eclipse中tomcat启动情况
1、首先确认eclipse是jee版或者安装了相应的插件 2、打开window---preferences---server---runtime environments中添加tomcat 3、打开Java EE的工作界面,在eclipse右上角处点击带有加号图标可以切换 4,、在下面的选项卡中切换到servers,右键就可以启动tomcat ps:这时候如果你部署了项目就可以访问了,但是...

linux查看tomcat是否启动
ps -ef |grep tomcat 如果有一大长长长串的东西出现,说明tomcat是启动了,第一个是启动该进程的用户,第二个是该进程的id,第三个 是占用CPU的百分比,第四个是占用内存的百分比

Linux下如何查看tomcat是否启动。
启动linux进入到tomcat安装目录 \/apache-tomcat-6.0.26\/bin下运行 #.\/startup.sh start 停止tomcat时运行命令: #.\/shutdown.sh start 远程查看tomcat的控制台 进入tomcat\/logs\/文件夹下 键入指令:tail -f catalina.out 就可以查看控制台了 ...

怎么在Unix\/Linux 中查看tomcat 的启动\/查询状态?
netstat -plantu | grep 8080 | grep -v "grep" or ps -ef |grep tomcat or lsof -n -i:8080,出现8080这条语句表明Tomcat己经启动并处于监听状态。拓展:1、Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日(这是第一次正式向...

linux怎么查看tomcat是否启动
jps 命令查看本机运行的java进程,看看有没有tomcat ps命令 #ps aux | grep tomcat 查看系统中的运行进程里有没有tomcat进程 端口查看,如果你的tomcat没有修改默认的端口(8080)可以使用端口检查命令 netstat -anop | grep 8080

查看tomcat启动文件都干点啥
在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina.bat的命令call "%EXECUTABLE%" start %CMD_LINE_ARGS%,其中"%EXECUTABLE%"这个就是catalina.bat文件,这个命令至少向catalina.bat传递一个参数--start. 接下来...

查看tomcat启动文件都干点啥
主要是查看当前命令所在目录。看是否在tomcat\\或tomcat\\bin\\目录下。以及查看将调用该命令的参数传递给catalina.bat。最后调用catalina.bat start命令。与tomcat书中说startup.bat与catalina.bat start功能一样,相吻合。即startup.bat的主要作用是调用catalina.bat start命令。

兰西县19348531663: 查看tomcat启动文件都干点啥 -
琦贷清火:在上一次查看tomcat启动文件都干点啥一文中,我们总结出,startup.bat文件的作用就是找到catalina.bat文件,然后把参数传递给它,在startup.bat中,调用catalina.bat的命令call "%...

兰西县19348531663: 查看tomcat启动文件都干点啥 -
琦贷清火: 说来tomcat的脚本确实不难,启动脚本更是没有几行,以下是我解释的tomcat startup.bat脚本.rem Guess CATALINA_HOME if not defined 确定该命令(脚本)是否在tomcat目录里 set CURRENT_DIR=%cd% 设定 CURRENT_DIR 为当前目录 ...

兰西县19348531663: Tomcat 启动的时候会加载哪些内容 -
琦贷清火: Tomcat启动时classloader加载顺序Tomcat的class加载的优先顺序一览1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件.2.环境变量CLASSPATH中的jar和class文件.3.$CATALINA_HOME/common/classes下的class文件.4.$CATALINA_...

兰西县19348531663: linux怎么查看tomcat启动信息 -
琦贷清火: 在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin使用Tomcat关闭命令 ./shutdown.sh查看Tomcat是否以关闭 ps -ef|grep java如果显示以下相似信息,说明Tomcat还没有关闭

兰西县19348531663: linux怎么查看tomcat是否启动 -
琦贷清火: tomcat启动的进程是java.exe.如果要看当前启动的tomcat是哪一个,可以执行echoCATALINA_HOME命令查看,比如我的电脑结果如下:CATALINA_HOME=D:\tomcat6.0.18\

兰西县19348531663: SSH做的项目tomcat启动的时候都做了什么?回答的越详细越好,谢谢. -
琦贷清火: 创建容器,整合struts和spring

兰西县19348531663: tomcat和jvm的关系是怎样的?tomcat在启动时都做了一些什么事情 -
琦贷清火: JVM相当于中间件, 一种编程解决方案 Tomcat是实现了Web服务的容器,也是中间件,但是更偏向应用一层,他是由Java编写的,运行于JVM中.Tomcat启动时就是他的bootstrap.jar启动时做的事情, 请查看更详尽的相关资料

兰西县19348531663: linux查看tomcat是否启动 -
琦贷清火: ps -ef |grep tomcat如果有一大长长长串的东西出现,说明tomcat是启动了,第一个是启动该进程的用户,第二个是该进程的id,第三个 是占用CPU的百分比, 第四个是占用内存的百分比

兰西县19348531663: 用putty连linux服务器,进到bin目录下用./startup.sh启动tomcat,用什么命令查看tomcat的后台信息? -
琦贷清火: 这个是windows终端可以看到. Linux 下的tomcat,可以到tomcat所在的目录 logs 中看到这些信息,启动信息都写到日志文件中了.一般是这个文件 tomcat/logs/catalina.out

兰西县19348531663: linux如何查看tomcat有没有启动 -
琦贷清火: ps -ef |grep tomcat端口 上面看看tomcat端口有没有占用,如果占用说明tomcat已经启动了!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网