- 浏览: 77674 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
chenshuyi:
感谢分享! 学习DOS批处理很好的资料,感谢楼主,感谢博 ...
编写批处理文件 -
康跷_0613:
请问利用逆向工程怎么分析出类图,哪里有相关详细的介绍呢?
Tomat6的整体架构 -
康跷_0613:
图片看不到了..
Tomcat6.0源码学习--架构概述 -
cshuser:
中介者模式 用一个中介对象来封装一系列的对象交互。中介者使 ...
JMX在Tomcat中的应用(四) -
lh870003574:
1.1的示例中,针对你提出的对修改关闭的问题,没有找到你所说的 ...
JMX在Tomcat中的应用(二)
测试脚本如下:
rem 请将 JAVA_HOME 环境变量修改到您的 JDK 安装目录
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 请将 CATALINA_HOME 环境变量修改到您的 Tomcat 安装目录
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 开始调用 catalina.bat 文件
call %CATALINA_HOME%\bin\catalina.bat
我们把上面的脚本保存为 start_tomcat_nothing.bat 文件,然后在 MS-DOS 下执行,我们将看到如下的执行结果。
这个脚本并没有成功启动 Tomcat ,但是它给我们提供调用 catalina.bat 脚本的方法,请阅读上面窗口中的加亮部分。 Catalina.bat 的调用方法为 catalina 后面加上具体命令参数,这个命令参数有以下 9 种。
具体解释如下:
debug | 在调试器中启动 Tomcat |
debug -security | 带有安全管理器的调试器中,调用 catalina 脚本来启动 Tomcat |
jpda start | 调用 catalina 脚本,在 JPDA 调试器中启动 Tomcat |
run | 在当前窗口内调用 catalina 脚本来启动 Tomcat (不切换窗口) |
run -security | 带有安全管理的情况下,在当前窗口内调用 catalina 脚本来启动 Tomcat (不切换窗口) |
start | 开始一个新的 DOS 窗口,并在其中启动 Tomcat (切换至新窗口) |
start -security | 带有安全管理的情况下,在新的 DOS 窗口中启动 Tomcat (切换至新窗口) |
stop | catalina 脚本执行停止命令来关闭 Tomcat |
version | 您使用的 Tomcat 版本 |
看完上面的解释,我们对 Tomcat 的启动参数有所了解。好,咱们写一个最简单的脚本来测试一下,拷贝刚才 start_tomcat_nothing.bat 脚本,将它重新命名为 start_tomcat_version.bat ,该脚本的内容和 start_tomcat_nothing.bat 脚本几乎一致,只是最后一行多加了一个 version 命令, start_tomcat_version.bat 脚本全部内容如下:
rem 请将 JAVA_HOME 环境变量修改到您的 JDK 安装目录
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 请将 CATALINA_HOME 环境变量修改到您的 Tomcat 安装目录
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 开始调用 catalina.bat 文件
call %CATALINA_HOME%\bin\catalina.bat version
我们可以在 DOS 下观察该脚本的执行结果。
该脚本顺利执行,执行的结果告诉我们当前 Tomcat 的版本号为 5.0.28 。有兴趣的读者朋友可以试试其它的 8 个命令参数,这些命令参数有时对我们非常有用。举例来说,有时候我们正常启动 Tomcat 时, Tomcat 弹出一个 DOS 窗口,但是瞬间消失,我们看不出到底哪里出了问题,也无任何启动日志可看。在这种情况下,我们可以使用 run 命令在同一个窗口内启动 Tomcat ,不让 Tomcat 弹出新的 DOS 窗口,好让我们看看 Tomcat 到底为什么没有启动。测试这个问题的简单方法如下。
首先,请到 Tomcat 安装目录下的 bin 子目录,把 Tomcat 的启动 jar 文件 bootstrap.jar 重命名为 bootstrap_1.jar ,然后点击 startup.bat 文件启动,我们会看到一个小黑窗口闪了一下,但是 Tomcat 并没有正常启动,这是因为 startup.bat 执行的是 Tomcat 的缺省命令 start ,该命令将在开始一个新的 DOS 窗口,并在其中启动 Tomcat 。在这种情况下,我们就要借重于 run 命令了,我们改以下我们上面的 start_tomcat_version.bat 脚本,将 version 命令改为 run 命令,然后另存为 start_tomcat_run.bat ,该脚本全部内容如下:
rem 请将 JAVA_HOME 环境变量修改到您的 JDK 安装目录
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09
rem 请将 CATALINA_HOME 环境变量修改到您的 Tomcat 安装目录
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28
rem 开始调用 catalina.bat 文件
call %CATALINA_HOME%\bin\catalina.bat run
脚本的执行结果如下:
请观察上面窗口中的加亮部分,这部分向我们清楚地展示 Tomcat 的启动错误,没有找到 Tomcat 的启动主类 Bootstrap 。这是因为我们人为地把 Tomcat 的启动 jar 文件包从 bootstrap.jar 重命名为 bootstrap_1.jar ,这个 bootstrap.jar 文件既然不存在,那包含在这个文件的 Bootstrap.class 文件当然也就找不到了。
现在,我们再回过头看看这个 catalina.bat 脚本。为简单起见,我们假定该脚本带缺省命令行参数 start ,看看 catalina 脚本的执行流程。如果您对 catalina 的 security 命令有兴趣,请参考 Sun 公司的文档 http://java.sun.com/j2se/1.5.0/docs/guide/security/smPortGuide.html ;如果您对 jpda 命令有兴趣,不妨浏览一下 http://java.sun.com/javase/technologies/core/toolsapis/jpda/ 文档。让我们打开 catalina 脚本,首先请注意这个脚本第二行有一个 setlocal 的命令,这个命令表明 catalina 中的环境变量只在本脚本中起作用,对其它程序和命令不起作用,这就意味着这个脚本中的环境变量是局部变量,不是全局变量,不会影响其它脚本和操作系统环境。
然后我们会看到长达 34 行的注释,这是优秀程序员必须学会的基本功之一。这些注释写得非常简洁明了,详细说明了各个环境变量的意义和用途。紧接着,如果发现 CATALINA_HOME 变量没有定义,该脚本试图设置该变量,这和 startup.bat 的第一节完全类似,在此不再赘述。然后该脚本调用 setclasspath.bat 到 JAVA_HOME 的 bin 目录下寻找 java.exe 、 javaw.exe 、 jdb.exe 和 javac.exe 所在的路径,并把这些 exe 文件的文件名和路径赋值到相应的环境变量 _RUNJAVA 、 _RUNJAVAW 、 _RUNJDB 和 _RUNJAVAC 中。再接下来, catalina 脚本判断是否定义有环境变量 CATALINA_BASE , CATALINA_TMPDIR ,如果定义了它们,就执行相应的操作。因为我们在此并没有定义它们,所以执行不到这些操作。然后, catalina 脚本将在本窗口内打印出四个环境变量的值,这四个环境变量我们非常熟悉,一旦启动 Tomcat ,我们必定能看到 CATALINA_BASE , CATALINA_HOME , CATALINA_TMPDIR 和 JAVA_HOME 。然后 catalina 脚本根据其后跟的不同命令,拼凑出完整的 JAVA 命令行并执行。下面是该脚本的详细注释:
Rem 获得标准的环境变量,因为 setenv.bat 不存在,所以下面这两句不执行
rem Get standard environment variables
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
Rem 调用 setclasspath.bat 脚本,获得标准的环境变量
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
set BASEDIR=%CATALINA_HOME%
call "%CATALINA_HOME%\bin\setclasspath.bat"
rem 根据不同情况在 classpath 中加上不同的 jar 包
rem Add on extra jar files to CLASSPATH
if "%JSSE_HOME%" == "" goto noJsse
set CLASSPATH=%CLASSPATH%;%JSSE_HOME%\lib\jcert.jar;%JSSE_HOME%\lib\jnet.jar;%JSSE_HOME%\lib\jsse.jar
:noJsse
Rem 注意下面的这个 jar 文件是 tomcat 的启动包
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar
rem 我们没有定义 CATALINA_BASE ,下面这节不执行
if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%
:gotBase
rem 我们没有定义 CATALINA_ TMPDIR ,下面这节将忽略
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set CATALINA_TMPDIR=%CATALINA_BASE%\temp
:gotTmpdir
Rem 打印 4 个我们非常熟悉的环境变量
rem ----- Execute The Requested Command ---------------------------------------
echo Using CATALINA_BASE: %CATALINA_BASE%
echo Using CATALINA_HOME: %CATALINA_HOME%
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
echo Using JAVA_HOME: %JAVA_HOME%
rem 定义一些环境变量
set _EXECJAVA=%_RUNJAVA%
rem 这是 Tomcat 启动的主类
set MAINCLASS=org.apache.catalina.startup.Bootstrap
rem 这是 catalina 脚本的缺省命令 start
set ACTION=start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=
rem 我们的第一个参数命令是 start ,下面这节将忽略不执行
if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_shmem
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=jdbconn
:gotJpdaAddress
shift
:noJpda
rem 我们的第一个参数命令是 start ,所以程序将走到 doStart 标签处执行
if ""%1"" == ""debug"" goto doDebug
if ""%1"" == ""run"" goto doRun
if ""%1"" == ""start"" goto doStart
if ""%1"" == ""stop"" goto doStop
if ""%1"" == ""version"" goto doVersion
rem 如果 catalina 后跟的命令不是 debug, run, start, stop 或 version ,
rem 该脚本将打印出 catalina 的用法,然后结束。
Rem 详情请见我们前面的测试脚本 start_tomcat_nothing.bat 及相应的结果窗口
echo Usage: catalina ( commands ... )
echo commands:
echo debug Start Catalina in a debugger
echo debug -security Debug Catalina with a security manager
echo jpda start Start Catalina under JPDA debugger
echo run Start Catalina in the current window
echo run -security Start in the current window with security manager
echo start Start Catalina in a separate window
echo start -security Start in a separate window with security manager
echo stop Stop Catalina
echo version What version of tomcat are you running?
goto end
rem 执行 debug 命令,我们的第一个参数命令是 start ,下面这节将忽略不执行
:doDebug
shift
set _EXECJAVA=%_RUNJDB%
set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\jakarta-tomcat-catalina\catalina\src\share"
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd
:doRun
shift
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd
rem 执行 start 命令
:doStart
Rem 将参数列表指针指向下一个参数
shift
rem 设置 Tomcat 启动窗口的标题,缺省值为 Tomcat
if not "%OS%" == "Windows_NT" goto noTitle
set _EXECJAVA=start "Tomcat" %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
:gotTitle
Rem
检查第二个命令参数是否为
-security
,我们没有第二个命令参数,脚本将执行至
execCmd
标签处
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd
rem
执行
stop
命令,我们的第一个参数命令是
start
,下面这节将忽略不执行
:doStop
shift
set ACTION=stop
goto execCmd
rem
执行
version
命令,我们的第一个参数命令是
start
,下面这节将忽略不执行
:doVersion
%_EXECJAVA% -classpath "%CATALINA_HOME%\server\lib\catalina.jar" org.apache.catalina.util.ServerInfo
goto end
rem
执行命令,首先看看命令行参数是否不只一个,我们本例只有一个
start
参数,所以下面这节将不执行
:execCmd
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
Rem
执行
java
命令行
rem Execute Java with the applicable properties
rem
检测
JPDA
和
Security
变量,我们本例没有定义他们,下面两句将忽略
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
rem
程序将执行下面的
java
命令,在新窗口内启动
Tomcat
%_EXECJAVA%
%JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -classpath "%CLASSPATH%"
-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%"
-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS%
%ACTION%
Rem catalina
至此结束,下面代码我们将忽略。
goto end
:end
发表评论
-
Tomcat6.0源码学习--架构概述
2010-02-26 15:26 2681Tomcat6 是最新版本的 ... -
Tomcat5启动流程与配置详解
2009-11-06 17:26 1183How to config and run The Apac ... -
《How Tomcat Works》读书笔记(五):生命周期
2009-11-06 16:26 950第一次接触到“生命周期”这个词汇,是在软件工程的课程上,“软件 ... -
《How Tomcat Works》读书笔记(四):容器初探
2009-11-06 16:25 1332第四章:容器初探 接触JAVA EE以来,最初对“容 ... -
《How Tomcat Works》读书笔记(三):Tomcat default connector
2009-11-06 16:24 1450Chapter 4: Tomcat default conn ... -
《How Tomcat Works》读书笔记(一)
2009-11-06 16:23 1347看了这本书的头三章,写得非常好,可谓深入浅出将tomcat分析 ... -
《How Tomcat Works》读书笔记(二):Connector
2009-11-06 16:19 1275Chapter Three:Connector to ... -
编写批处理文件
2009-11-06 16:15 1192嘿嘿,批处理的介绍。不光可以提高自己动手能力还能学到很多知识, ... -
分析 Tomcat catalina.bat 脚本
2009-11-06 15:03 2176Catalina.bat是tomcat所有脚本中最重要的 ... -
JMX在Tomcat中的应用(四)
2009-11-06 14:52 1315四、 Tomcat 中最简单的 MBean 下面 ... -
JMX在Tomcat中的应用(三)
2009-11-06 14:37 2143三、 Tomcat 中的 JMX 通过上面 ... -
JMX在Tomcat中的应用(二)
2009-11-06 14:35 2086下面,我们举一个简单的例子,理解一下 JMX 中中的各个概 ... -
JMX在Tomcat中的应用(一)
2009-11-06 14:33 1843一、 JMX 简单介绍 Tomcat 从 5. ... -
Tomat6的整体架构
2009-11-06 14:28 1531在上篇文章中,我们已经成功将Tomcat6.0 的源代码导入 ... -
Tomat6架构探讨
2009-11-06 14:27 1654下面,我们重点针对 Ca ... -
Tomcat启动遇到的常见问题
2009-11-06 14:24 2489如果一切顺利,我们就可以看到非常熟悉的 Tomcat 窗口 ...
相关推荐
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本...这个脚本的代码有点多, 就单独弄了一篇展示 catalina.bat 脚本中的内容. 点击 [catalina.bat
本文主要给大家详细解析了关于Tomcat中catalina.bat原理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 tomcat 的真正启动是在 catalina.bat 设置并启动的。startup.bat 只是找到...
服务器应用,web服务器,windows下 tomcat8.0配置文件
本文主要对Tomcat的三个最重要的启动脚本之一--catalina.bat脚本做了详细分析,具有很好的参考价值,需要的朋友可以看下
针对linux环境上tomcat不断输出到catalina.out文件的问题,提供一个按天分割catalina.out的脚本,以及操作说明。绝对可用!
Tomcat输出catalina.out的大小控制
catalina.jar包
catalina.out日志查看工具,不过查找不太好用,有时间会有便宜,可以定位到大概的位置。大多数情况是可以查到的
Linux tomcat下catalina.out日志文件分割 前言: tomcat默认使用Java.util.logging记录日志,默认只记录tomcat的日志,不记录应用的日志。tomcat支持采用log4j进行日志记录,配置方法如下: 1.更新最新的tomcat_juli...
部署tomcat下的项目 监控的时候发现 日志中文乱码 ,tomcat 下catalina.out 日志乱码问题处理
org.apache.catalina.core.AprLifecycleListener myeclipse tomcat 無法啟動 用這個文件
catalina.bat
windows下tomcat的catalina.out按天自动分割,windows下tomcat日志按天自动分割
今天小编就为大家分享一篇关于Tomcat使用Log4j输出catalina.out日志,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke...
tomcat的catalina.out是tomcat的控制台输出⽂件,在tomcat持续运⾏的过程中,该⽂件会越来 越⼤,并且tomcat⾃身是没有带分割catalina.out的功能的。所有档如果某些需求需要导致我们查看 catalina.out⽂件的时候 ...
Tomcat日志catalina.out过大解决方案--使用logback的资源包,包括jar包,和使用文档,具体使用请参考我的同名博客。
catalina.out是tomcat把stdout和stderr重定向到文件后生成的日志文件,其生成是不受logging.properties 或 log4j.properties配置文件所影响的,需要另行安装工具(如cronolog或rotatelogs之类)进行处理。...
This temp directory is used by the JVM for temporary file storage. The JVM is configured to use this as its java.io.tmpdir in the catalina.sh and catalina.bat scripts.