起因 ¶
在 Windows 下运行 Tomcat 应用服务器,最简单的方式就是双击 startup.bat 了,或者是在命令行窗口中输入 startup.bat。
按照 Tomcat 的默认设置,最后 Tomcat 会运行在一个新建的命令行窗口中(和 startup.bat 不在同一个命令行窗口中)。这种方式有个很麻烦的问题,就是 一旦 Tomcat 遇到致命错误 (常见的有 -Xms 或 -Xmx 设置过大,或者 Tomcat 要使用的端口已经被其他应用程序抢占等), 该新建的命令行窗口就会直接关闭 。对于使用者来说,其感受就是 Tomcat 窗口一闪而过,难以看到具体错误信息是什么。
解决方法 ¶
其实解决方法也很简单,我们看看 {TOMCAT_HOME}/bin 目录下的 catalina.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?
注意这两行:
echo run Start Catalina in the current window echo start Start Catalina in a separate window
原来 run 就是在当前窗口中运行,而 start 就是在新窗口中运行。
然后我们再来看 startup.bat 文件,最后有一行:
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
果然是用了 start 参数。那么我们就把它改成 run :
call "%EXECUTABLE%" run %CMD_LINE_ARGS%
这样,Tomcat 就会运行在当前命令行窗口。以后再碰到任何致命错误,窗口也不会关闭了。使用者可以慢慢看咯。