Tomcat 需要配置环境变量吗?(startup.bat 闪退原因及解决办法)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43054397/article/details/91391122

Tomcat 需要配置环境变量吗?

tomcat 是一款轻量级web应用服务器,安装的时候我们都是直接解压zip包,然后在bin目录下双击 startup.bat 就可以启动了,但也相应的会遇到一些问题;

1. Tomcat启动会出现的两个问题:

  • JAVA_HOME 配置问题导致的闪退

    解决方案:
    • 配置jdk时以名字为JAVA_HOME的环境变量
      如果你在不是JAVA_HOME 而是 其他的 如:javahome ,随后你的classpath,path都跟着写javahome , 运行java ,javac命令都不会报错,但当你运行tomcat目录下的startup.bat时,就会闪退,这里主要都是因为在配置jdk时命名不规范。
    • 修改startup.bat,使其不依赖JAVA_HOM 和 CATALINA_HOME变量的方法:
      SET JAVA_HOME=jdk目录
      SET CATALINA_HOME=解压后Tomcat的目录
      例如:
      set JAVA_HOME=D:\Program Files\java\jdk1.8.0_181
      set CATALINA_HOME=D:\apache-tomcat-9.0.13
      
  • 没有在startup.bat目录下运行startup.bat导致的报错

    这里它运行在C盘,所以这里会报错; 这里可以通过配置环境变量解决;
    但也可以不配,因为只需要在 startup.bat 的目录下运行即可

2. 查看 startup.bat文件

文件解释:

setlocal

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%   
   //设置当前目录
if not "%CATALINA_HOME%" == "" gotogotHome   
   //如果设置了CATALINA_HOME环境变量 ,就直接到下面的gotHome处
set CATALINA_HOME=%CURRENT_DIR%   
  //如果没有设置CATALINA_HOME,就设置CATALINA_HOME为当前目录(其实这里她假设你进入tomcat的安装目录)
if exist "%CATALINA_HOME%\bin\catalina.bat" gotookHome   
  //判断一下catalina.bat是否找到了,找到了就直接到下面的gotHome处
cd ..    
   //这里他是假设你开始已经进入到了tomcat的bin目录,所以就退到上一级目录
set CATALINA_HOME=%cd%   
   //现在再设置CATALINA_HOME为tomcat的安装目录
cd %CURRENT_DIR%     
  //这里是进入dos的当前目录
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" gotookHome  
   //再次判断catalina.bat是否找到了,找到了就直接到下面的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%" gotookExec    
  //再次判断catalina.bat是否找到了,找到了就直接到下面的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""=="""" gotodoneSetArgs   
  //判断参数是否加入完成
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1  
  //将参数组成一行,接在后面
shift
gotosetArgs
:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS% 
  //执行catalina.bat

:end
  • setlocal 是启动批处理文件中环境变量的本地化,相当于设置临时环境变量; 此命令有效到出现endlocal命令或到达批处理文件结尾为止

  • rem 代表注释,看第一行注释,如果CATALINA_HOME未定义,就猜!

  • 文件意思大概为三点:

    • 判断CATALINA_HOME是否为空,为空则把当前目录设为CATALINA_HOME的值;
    • 再判断 catalina.bat 是否存在,不存在则回到上一级目录,再把当前目录设为CATALINA_HOME的值;
    • 再判断环境变量下的 catalina.bat 是否存在,存在则调用bin目录下的 “catalina.bat start” 命令

所以,tomcat启动的时候是会自己设置临时环境变量的,不必自己去配置

猜你喜欢

转载自blog.csdn.net/weixin_43054397/article/details/91391122