tomcat启动脚本分析

tomcat启动脚本分析一

2008-05-12 08:59

Tomcat是应用颇广的Servlet和JSP的容器,可以说几乎每个学习JSP的人都接触过它。在实际开发环境中,它还可以作为轻巧灵便的应用服务器用来调试和部署。在Tomcat上开发的Servlet和JSP程序,可以非常方便地部署到Weblogic及Websphere等生产服务器上去。有些情况下,它还可以和ApacheWeb Server配合使用,作为小型企业的Web Application Server。本文以Tomcat5.0.28为例,讨论一下Tomcat的启动过程及常见问题。大家都知道,Tomcat最普遍的启动方法就是在DOS命令行窗口中执行Tomcat的bin目录下的startup.bat文件(双击该文件即可启动)。 
1. startup.bat脚本解析下面我们首先来看看startup.bat脚本是如何启动Tomcat的。Startup脚本非常明了,它的主要任务就是先设置CATALINA_HOME的环境变量,让该环境变量指向Tomcat的安装目录;然后在安装目录的bin子目录下找catalina.bat文件,如果找不到,就打印出错误信息并退出,如果在bin目录下找到catalina.bat文件,就准备执行该文件。不过,在执行该文件之前,startup脚本还做了一件工作,那就是寻找参数。startup脚本可以带多个参数,在Java主类中,第一个参数为args[0],而在MS-DOS脚本中,第一个参数可以通过”%1”得到,如果您想要得到DOS脚本中得到第二个参数,调用”%2”。但是,在脚本参数数目未知的情况下,我们就只能通过goto循环调用shift命令来获得脚本的所有参数,下面这个简单的实验脚本有助于我们理解如何使用shift命令。 @echo off 
echo Print parameters by %%1 andshift loop 
:loopStart 
if""%1""=="""" goto loopEnd 
echo Paramter is %1 
shift 
goto loopStart 
:loopEnd 
如果把上面的脚本保存成test.bat并在DOS中执行该脚本,执行结果如下。 
下面就是Startup.bat脚本的详细注释,如果想要在DOS脚本中注释一行,前面加上rem即可,这相当于Java的双斜杠(//)注释,下面程序中,凡是以REM开头然后接着中文的行,都是笔者加上的注释,以帮助读者理解该脚本。@echo off 
if "%OS%" == "Windows_NT" setlocal 
rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server 
rem 
rem $Id: startup.bat,v 1.6 2004/05/27 18:25:11 yoavs Exp $ 
rem ---------------------------------------------------------------------------rem 首先定义一个变量CURRENT_DIR,然后把当前目录作为一个字符串赋给它 
rem Guess CATALINA_HOME if not defined 
set CURRENT_DIR=%cd% rem 如果CATALINA_HOME变量已经赋值,程序转到gotHome行继续 
if not "%CATALINA_HOME%" == "" goto gotHome rem 把当前目录的值作为字符串赋给CATALINA_HOME变量 
set CATALINA_HOME=%CURRENT_DIR% rem 如果当前目录的bin子目录下发现catalina.bat文件,程序转到okHome行继续 
rem 否则执行下一行“cd..”。 
Rem 因为缺省情况下当前目录就是bin目录,所以缺省情况下程序不转入okHome行 
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome rem 回上层目录 
cd .. rem 把当前目录的上层目录作为字符串赋给再次CATALINA_HOME变量,覆盖第一次的赋值 
set CATALINA_HOME=%cd% rem 重新回到当前目录 
cd %CURRENT_DIR% :gotHome rem 如果在当前目录的父目录的bin子文件夹下发现catalina.bat文件,程序转到okHome行继续 
rem 否则程序打印两行错误信息,然后退出 
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 rem 设置一个变量,存储catalina.bat的完整路径 
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat rem 再次检查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 检查脚本是否带参数,如果发现参数,把第一个参数赋值给 CMD_LINE_ARGS变量 
rem 如果脚本带有多个参数,程序设置了一个循环setArgs, 
rem 不断把所带的参数加到CMD_LINE_ARGS变量中 
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 执行catalina.bat脚本,该脚本的第一个参数为start,后面的参数是从本脚本中传入的 
call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end 那么读者也许要问,问什么要通过startup脚本来调用catalina脚本,直接一个脚本不更方便吗?细心的读者或许会发现,在缺省情况下,startup脚本只能放在两个位置,一是Tomcat的安装目录,一个就是Tomcat安装目录的bin子目录。这是什么意思呢?如果Tomcat安装目录是C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28,那么startup脚本只能放在C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\目录或者C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28\bin目录下才能运行,如果拷贝startup文件到其它目录,我们就会看到下面的错误(以Tomcat运行在C:\carl目录下为例): C:\carl>startup 
CATALINA_HOME C:\ 
The CATALINA_HOME environment variable is not defined correctly 
This environment variable is needed to run this program 
那么,如果我们想让Tomcat在桌面上能成功启动,那么该怎么办呢?当然,我们首先想到的是为startup创建一个快捷方式,然后拷贝该快捷方式到桌面,这是一种办法。另一种办法就是修改startup.bat文件,在startup.bat脚本的第八行处添上一句脚本,让 CATALINA_HOME变量指向用户Tomcat的安装路径,这样,startup.bat就可以拷贝到机器的任何目录执行。这个startup.bat脚本就是提供给使用者用来修改的,我们可以在其中设置JAVA_HOME,CATALINA_HOME等环境变量,但我们并不需要深入到较为复杂的catalina.bat脚本中,这正是startup.bat脚本的真正用意所在。我们知道,软件设计模式中有一个重要的原则就是开闭原则,即我们可以允许别人扩展我们的程序,但在程序发布后,我们拒绝任何修改,因为修改会产生新的Bug,使得我们已经Bug-free的程序又要重新测试。开闭原则是面向对象世界中的一个非常重要的原则,我们可以把这个原则从Java类扩展至源代码级别。startup脚本就是要求用户不要修改catalina.bat脚本,这是符合软件设计思想的。我们如果想要彻底贯彻这个重要的软件设计原则,可以写一个新脚本tomcat.bat,脚本内容大致如下: set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_09 
set CATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28 
call %CATALINA_HOME%\bin\startup.bat 这个tomcat.bat文件可以存放在任何目录并能执行,并且不需要修改tomcat自带的任何脚本及其它环境变量,这就彻底贯彻了开闭原则。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值