解决tomcat中startup.bat一闪而过的问题

在运行tomcat的startup.bat时常有遇到窗口一闪而过的问题,解决该问题的主要方法如下:
tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME 与JAVA_HOME的信息,CATALINA_HOME即tomcat的主目录,JAVA_HOME即Java安装的主目录,jdk的主目录。

首先

要在环境变量处,配置JAVA_HOME,注意变量值是jdk的主目录,不是bin目录,并且不要加分号
如果这样配置,startup.bat还是一闪而过,可以右键点击startup.bat,编辑,在文本的最后敲上PAUSE,保存后重新运行startup.bat,这时候窗口不会再一闪而过,而是停留在桌面上(调试成功,把pause去掉即可)。
这时候就可以根据框内内容找到错误信息所在了,下面是窗口提示的错误的解决方法:

1. Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

Tomcat的startup.bat调用了catalina.bat,而catalina.bat则调用了setclasspath.bat,只要在setclasspath.bat的开头声明环境变量就可以了,原因是后来较新版本安装完不会自动登记环境变量JAVA_HOME,JRE_HOME。
给setclasspath.bat的开头添加标记部分,如下:
rem —————————————————————————
rem Set CLASSPATH and Java options
rem
rem $Id: setclasspath.bat 505241 2007-02-09 10:22:58Z jfclere $
rem —————————————————————————

1
2
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_20
set JRE_HOME=C:\Program Files\Java\jre6

rem Make sure prerequisite environment variables are set
if not “%JAVA_HOME%” == “” goto gotJdkHome
if not “%JRE_HOME%” == “” goto gotJreHome
echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
echo At least one of these environment variable is needed to run this program
goto exit

这样在每次运行startup.bat时就自动注册了JAVA_HOME,JRE_HOME。
运行startup.bat,提示信息:Server startup in xxxxx ms” 完工

2.Cannot find “”d:\apache-tomcat-6.0.32”\bin\setclasspath.bat”

这个时候,可能是CATALINA_HOME的值在某个地方被写死了,某些绿色版tomcat在bin文件下多了一个setenv.bat的文件,打开一看果然是在这里面被写死了CATALINA_HOME的路径,这应该是为了某种原因被人后加上的设置文件,把这个文件删除之后,tomcat可以正常运行了。
这种情况,可以去看catalina.bat中的配置,可能配置死的内容就在这个文件里。

server.xml配置有错误

当用startup.bat启动tomcat时,如果server.xml配置有错误,那么startup.bat将闪一下就消失了,如果想让命令窗口停住,好方便查看错误信息,则用如下方法修改:修改catalina.bat,找到里面的:

1
2
3
4
5
6
7
8
9
10
11
12
13
:doStart
shift
if not "%OS%" == "Windows_NT" goto noTitle
set _EXECJAVA=start %_RUNJAVA%
goto gotTitle
:noTitle
set _EXECJAVA=start %_RUNJAVA%
:gotTitle
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy
goto execCmd

将上面set _EXECJAVA=start %_RUNJAVA% 中的start去掉,就可以让命令行出错后不消失。set _EXECJAVA=start %_RUNJAVA% 的意思是重新启动一个命令行窗口。去掉start后,则不会再重新启动窗口,就达到了使命令行停住的效果。要在命令行中启动startup.bat才能看到效果。