欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

程序员文章站 2024-03-13 18:23:27
    用文本编辑工具打开用于启动tomcat的批处理文件startup.bat,仔细阅读。在这个文件中,首先判断catalina_home环...

    用文本编辑工具打开用于启动tomcat的批处理文件startup.bat,仔细阅读。在这个文件中,首先判断catalina_home环境变量是否为空,如果为空,就将当前目录设为catalina_home的值。接着判断当前目录下是否存在bin\catalina.bat,如果文件不存在,将当前目录的父目录设为catalina_home的值。根据笔者机器上tomcat安装目录的层次结构,最后catalina_home的值被设为tomcat的安装目录。如果环境变量catalina_home已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命令。通过这段分析,我们了解到两个信息,一是tomcat启动时,需要查找catalina_home这个环境变量,如果在tomcat的bin目录下调用startup.bat,tomcat会自动并正确设置catalina_home;二是执行startup.bat命令,实际上执行的是“catalina.bat start”命令。

如果我们不是在tomcat的bin目录作为当前目录时调用startup.bat,就会出现如下图所示的错误信息(在bin目录的父目录下调用除外)。

 Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

图    在其他目录下启动tomcat出错

如果要想在任意目录下都能启动tomcat,就需要设置catalina_home环境变量,你可以将catalina_home添加到windows xp系统的环境变量中,其值就是tomcat的安装目录。在笔者的机器上,tomcat的安装目录是d:\apache-tomcat-6.0.36-windows-x86\apache-tomcat-6.0.36。添加catalina_home环境变量的过程和前述添加java_home环境变量的过程是一样的。如果你不想在系统的环境变量中添加,也可以直接在startup.bat文件中进行设置。下面是在startup.bat文件中设置catalina_home后的文件片段:

rem $id: startup.bat 908749 2010-02-10 23:26:42z markt $
rem ---------------------------------------------------------------------------

set catalina_home=d:\apache-tomcat-6.0.36-windows-x86\apache-tomcat-6.0.36

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 ..

...

注意以粗体显示的这句代码的作用就是设置catalina_home环境变量,在它的下面是判断catalina_home是否为空的语句。如果找不准位置,干脆将设置catalina_home环境变量的这句代码放到文件的第一行。java_home环境变量也可以采用同样的方式进行设置。不过,如果要在其他目录下利用shutdown.bat来关闭tomcat服务器,则需要在shutdown.bat文件中设置catalina_home和java_home这两个环境变量,设置变量的位置和startup.bat文件一样,都是在判断catalina_home是否为空之前。当然,为了一劳永逸,避免重装tomcat后还要进行设置(需要是同一版本的tomcat安装在同一位置),我们最好还是将catalina_home和java_home这两个环境变量添加到windows xp系统的环境变量中。

有的读者可能会对tomcat安装目录的环境变量的名字是catalina_home而感到奇怪,按照其他环境变量的设置来看,java_home表示jdk的安装目录,那么应该用tomcat_home来表示tomcat的安装目录,可为什么要使用catalina_home呢?实际上,在tomcat 4以前,用的就是tomcat_home来表示tomcat的安装目录,在tomcat 4以后,采用了新的servlet容器catalina,所以环境变量的名字也改为了catalina_home。

在windows系统下环境变量的名字是与大小写无关的,也就是说,java_home和java_home是一样的。

了解了startup.bat文件以后,我们再来看看真正负责启动tomcat服务器的catalina.bat文件。通过分析catalina.bat文件,我们发现它还调用了一个文件setclasspath.bat。在setclasspath.bat文件中,它检查java_home环境变量是否存在,并通过java_home环境变量,找到java.exe,用于启动tomcat。在这个文件中,还设置了其他的一些变量,代表调用java的标准命令,有兴趣的读者可以自行分析一下这个文件。在执行完setclasspath.bat之后,catalina.bat剩下的部分就开始了tomcat服务器的启动进程。

直接执行catalina.bat时,需要带上命令行的参数。读者可以在命令提示符窗口下,执行catalina.bat,就会打印出catalina.bat命令的各种参数及其含义,如下图所示。

Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

(点击查看大图)图     catalina.bat的各参数信息

其中常用的参数是start、run和stop。参数start表示在一个单独的窗口中启动tomcat服务器,参数run表示在当前窗口中启动tomcat服务器;参数stop表示关闭tomcat服务器。我们执行startup.bat,实际上执行的就是“catalina.bat start”命令;执行shutdown.bat,实际上执行的是“catalina.bat stop”命令。“catalina.bat run”命令有时候是非常有用的,特别是当我们需要查看tomcat的出错信息时。

在开发jsp程序时,经常会碰到自己机器上的8080端口号被别的应用程序占用,或者在配置server.xml时出现错误,当通过startup.bat(相当于执行“catalina.bat start”)启动tomcat服务器时,如果启动过程中出现严重错误,由于是在单独的窗口中启动tomcat服务器,所以一旦启动失败,命令提示符窗口就自动关闭了,程序运行中输出的出错信息也随之消失,而且没有任何的日志信息,这就使得我们没有办法找出错误原因。当出现错误时,我们可以换成“catalina.bat run”命令再次启动,一旦启动失败,仅仅是tomcat服务器异常终止,但是在当前的命令提示符窗口下仍然保留了启动时的出错信息,这样我们就可以查找启动失败的原因了。

以上就对tomcat 启动分析做的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!