`

tomcat启动脚本分析

阅读更多
Tomcat是应用颇广的Servlet和JSP的容器,可以说几乎每个学习JSP的人都接触过它。在实际开发环境中,它还可以作为轻巧灵便的应用服务器用来调试和部署。在Tomcat上开发的Servlet和JSP程序,可以非常方便地部署到Weblogic及Websphere等生产服务器上去。有些情况下,它还可以和Apache Web 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 and shift 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自带的任何脚本及其它环境变量,这就彻底贯彻了开闭原则。


原文摘自http://blog.ccidnet.com/blog-htm-do-showone-uid-4092-itemid-246996-type-blog.html

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Tomcat启动分析以及如何启动

    Tomcat启动分析与配置详解 Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用程序规范。理解Tomcat的启动过程和配置对于优化服务器性能和管理Web应用至关重要。本文将深入解析Tomcat的组成...

    tomcat启动原理解析

    **Tomcat启动原理解析** Tomcat作为一款广泛使用的开源Java应用服务器,其启动过程涉及了众多关键步骤和组件的协同工作。理解Tomcat的启动原理对于开发者来说至关重要,不仅有助于提升性能优化的能力,还能在遇到...

    解析Tomcat的启动脚本–catalina.bat

    Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 catalina.bat 脚本. 至于 setclasspath.bat 这个脚本, 相信看完这一篇, 就可以...

    tomcat启动脚本

    标题“Tomcat启动脚本”涉及的是Apache Tomcat服务器的启动流程,这通常涉及到一系列的配置文件和命令行操作。Tomcat是Java Servlet和JavaServer Pages(JSP)的开源应用服务器,它提供了运行Web应用程序的环境。在...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    tomcat启动管理工具

    【标题】:Tomcat启动管理工具 在Java Web开发领域,Tomcat是一个广泛使用的开源应用服务器,主要用于部署和运行Servlet和JSP应用。Tomcat以其轻量级、易配置和高性能的特点深受开发者喜爱。"Tomcat启动管理工具"指...

    tomcat监控脚本

    2. **定义启动脚本**:设置启动Tomcat的shell脚本路径。 3. **定义监控逻辑**:定期检查Tomcat进程是否存在以及服务是否正常运行。 4. **页面响应检查**:通过发送HTTP请求来验证Tomcat服务的状态。 5. **日志记录**...

    loadrunner监控tomcat脚本

    4. **执行测试**:启动测试场景,模拟多个虚拟用户并发访问Tomcat服务器,同时监控服务器的各项性能指标。 5. **分析结果**:测试完成后,使用LoadRunner的分析器分析收集到的数据,找出性能瓶颈和异常情况。 描述...

    tomcat停起脚本.txt

    - **日志输出**:可以在脚本中加入日志记录功能,记录每次启动、停止或重启时的重要信息,便于后续分析。 - **健康检查**:可以通过发送HTTP请求检查Tomcat服务是否正常运行,并在脚本中实现自动重试机制。 #### ...

    tomcat 学习与分析总结资料

    1. **Tomcat启动脚本catalina** Tomcat的启动脚本`catalina.sh/bat`是服务器运行的关键。这个脚本负责配置环境变量、初始化Java选项,并启动或关闭Tomcat服务器。通过研究这个脚本,我们可以了解如何配置JVM参数,...

    tomcat源码分析图谱

    tomcat的基础脚本分析 tomcat的源码启动分析 tomcat的web应用启动分析 tomcat的socket分析 tomcat的cocket与容器对接时序分析

    Tomcat停止与启动shell

    标题 "Tomcat停止与启动shell" 指的是一个用于管理Tomcat服务器的脚本,通常这个`restart.sh`文件是用来自动化Tomcat服务的启动和停止操作的。Tomcat是Apache软件基金会的一个开源项目,是一个广泛使用的Java ...

    命令行启动关闭tomcat而不显示cmd界面

    综上,这篇博文可能会涵盖如何在Windows环境下通过服务安装、命令行参数以及批处理脚本来无窗口启动和关闭Tomcat,同时可能会涉及到源码分析和安全性的建议。通过这些方法,你可以更加高效地管理和维护你的Tomcat...

    自动安装JDK和Tomcat的脚本

    本文将深入分析一个用于自动安装JDK和Tomcat的脚本,帮助读者理解其工作原理及如何在实际环境中应用。 #### 核心功能 - **自动安装JDK和Tomcat** - **配置环境变量** - **设置Tomcat和Apache的开机自启动** - **...

    局点服务器自动升级tomcat下的应用脚本

    8. **日志记录**:在整个过程中,脚本应记录详细的操作日志,便于后期分析和问题排查。 标签“源码”表明可能涉及到具体的代码示例,而“工具”可能意味着这个脚本可以作为其他运维工作流程的一部分集成。 文件名`...

    tomcat启动闪退

    ### Tomcat启动闪退问题详解及解决方案 #### 一、问题背景 在使用Tomcat过程中,经常遇到的一个问题是“启动闪退”。所谓“启动闪退”,通常指的是在尝试启动Tomcat时,双击`startup.bat`后,启动窗口快速出现然后...

    启动tomcat version一闪而过解决方案

    - **修改启动脚本**:根据提供的脚本内容,可以尝试将`startup.bat`脚本中的`@echo off`改为`@echo on`,以便于查看执行过程中的命令行输出。 ##### 4. 检查系统资源 - **增加分配给Tomcat的内存**:通过修改`set ...

    Linux 配置 tomcat 开机启动.txt

    通过编写一个简单的 Bash 脚本,并将其设置为系统服务的方式,可以确保 Tomcat 服务器在系统启动时自动运行。 #### 目标 学习如何创建和配置一个自定义的 `init.d` 脚本来实现 Tomcat 的开机启动。了解脚本的工作...

    tomcat 源码分析系列文档

    9. "Tomcat启动源代码分析.pdf":深入到启动脚本和Java代码,解释了从启动脚本开始,如何初始化和启动Tomcat服务的全过程。 10. "tomcat类加载机制.pdf":再次聚焦于Tomcat的类加载机制,可能深入到更多细节和技巧...

    eclipse tomcat启动,内存溢出问题

    修改Tomcat启动脚本中的JVM参数 - 打开Tomcat安装目录下的`bin`文件夹,找到`catalina.bat`文件(Windows系统)或`catalina.sh`文件(Linux/Mac系统)。 - 在文件中添加或修改JVM参数以增加分配给JVM的内存大小。...

Global site tag (gtag.js) - Google Analytics