前两天在新电脑上运行tomcat,安装完成启动不了,总是闪退。刚开始以为是我的jre不对(我的是jdk11,没有jre),后来想想我直接用的jdk启动不应该出问题呀。后来经过调试,原来是端口占用的问题。回想起来班里有人找我帮他弄tomcat的时候我总是会丢过去一句tomcat坏了重装吧,真是罪过。特此写这么一篇作为记录,以示忏悔。阿门。
错误排查
我们来打开看看tomcat根目录下startup.bat的源码
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 ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
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
set "EXECUTABLE=%CATALINA_HOME%\bin\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 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
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
:end
原来startup.bat只是来设置tomcat运行环境的,真正的启动是在%CATALINA_HOME%\bin\catalina.bat这个文件中。而tomcat环境设置失败会直接goto end,所以我们来看看我们的环境设置是否正确。
tomcat一旦出错,直接闪退,所以双击运行startup.bat是行不通的。所以我们在cmd里面运行一下。或者更改一下startup.bat的源码,加一行pause。
我在cmd下的运行截图:

这里我的环境设置都是正确的,所以会跳到catalina.bat文件里面去。如果你的环境配置是错误的,是会有提示的。哪个错了改哪个就好了。
再来运行一下catalina.bat试试:

它会提示你选择一个命令执行。这里我们选择run,想知道为什么请自己去看命令后面的说明。之后catalina.bat就会在当前命令窗口执行。如果tomcat启动过程中出现问题就会报错。将报错信息复制到百度里就可以找到解决方法了。
Tomcat常见错误
记录一下我自己遇见的,一些没有的之后会慢慢补上的
| 异常 | 错误说明 | 解决方案 |
|---|---|---|
| java.net.BindingException | 端口占用 | https://www.baeldung.com/tomcat-bind-exception |