1 Tomcat 基本知识
首先介绍一些 Tomcat 的基本知识,防止有纯小白看的云里雾里的。
下面这张图是一个下载好二进制版的的 Tomcat ,直接解压得到的,虽然版本是 9.x ,但是这个目录结构和 8.5 是一致的,不影响介绍。
bin : 主要用来存放一些脚本文件,一种格式是 sh 的是在 Linux 使用的脚本,另一种格式是 bat 的是在 Windows 中使用的脚本。
1、按下快捷键Windows+E键打开我的电脑,里找到tomcat的安装位置并双击进入:2、找到并双击进入bin文件夹,该文件下都是Tomcat的可执行程序,双击打开Tomcat7w的可执行程序,如果是Tomcat是8或者9,这里的数字会不一样,找到。
conf : 主要用来存放一些 Tomcat 的配置文件,有 xml 格式的也有 properties 格式的。
lib : 用来存放一些 Tomcat 运行时所需要的 jar 包。
1. 启动tomcat服务 方式一:直接启动 ./startup.sh 方式二:作为服务启动 nohup ./startup.sh & 方式三:控制台动态输出方式启动 ./catalina.sh run 动态地显示tomcat后台的控制台输出信息,Ctrl+C后退出并关闭服务 解释。
logs : 日志目录。
temp : 存放一些运行过程中产生的临时文件。
webapps : 这个应该很熟悉,主要用来存放应用程序,可以是 war 包或者是 jar 包。
work : 主要用来存放 Tomcat 在运行时的编译后文件。清空work目录,然后重启 Tomcat ,可以达到清除缓存的作用。
现在的 IDE(Integrated Development Environment) 工具可以直接将 Tomcat 配置在工具中,比如最常用的 Eclipse 和 IDEA ,启动 Tomcat 的时候只需要点一下按钮就可以启动,实际上这两个 IDE 工具只是帮我们调用了 Tomcat 的启动脚本。
Tomcat 的各种脚本都放在 bin 这个目录下,我们打开看一下:
可以轻易的找到两个启动脚本 startup.bat 和 startup.sh 。一个是 Windows 下的脚本,一个 Linux 下的。
同样,还可以看到两个停止脚本 shutdown.bat 和 shutdown.sh 。
这是在 Tomcat 的二进制包中,我们还可以看下源码包下是什么样的。
1、在开始菜单中选择所有程序,在所有程序中有一个ApacheTomcat的文件夹,单击展开。2、选择这个文件夹中的ConfigureTomcat程序、单击启动。3、在主界面中就可以看到一个Start的开始按钮了,单击等待一会就可以启动tomcat了。
可以看到,基本上该有的都有,最重要的启停脚本都还在。
既然我现在是在 Windows 环境下,那么启动就从 startup.bat 看起。
2 Tomcat 启动第一步:startup.bat
第一个打开 startup.bat 这个启动脚本,看下里面写了啥具体,这段脚本不长,我把里面的内容摘出来:
setlocalrem Guess CATALINA_HOME if not definedset &34;if not &34; == &34; goto gotHomeset &34;if exist &34; goto okHomecd ..set &34;cd &34;:gotHomeif exist &34; goto okHomeecho The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHomeset &34;rem Check that target executable existsif exist &34; goto okExececho Cannot find &34;echo This file is needed to run this programgoto end:okExecrem Get remaining unshifted command line arguments and save them in theset CMD_LINE_ARGS=:setArgsif &34;%1&34;==&34;&34; goto doneSetArgsset CMD_LINE_ARGS=%CMD_LINE_ARGS% %1shiftgoto setArgs:doneSetArgscall &34; start %CMD_LINE_ARGS%:end
最开始一大段的 rem 注释我没摘,只摘了最后一部分会执行的内容。
需要进行如下配置:1、新建文件夹,依次放入jre,tomcat与其他所需文件,其中tomcat中需要放入部署的war。2、进入bin目录开启tomcat服务,cd bin,启动命令:net start tomcat,停止命令:net stop tomcat,例如。
第一段是在设置当前的 CATALINA_HOME 的环境变量,如果没有设置的话,会将当前运行脚本的目录作为该环境变量的值,然后跳转到 :okHome 那里。
怎样启动tomcat服务器,接下来设置了 EXECUTABLE 的路径是 %CATALINA_HOME%\bin\catalina.bat 。
然后开始验证验证设置的 EXECUTABLE 中的 catalina.bat 这个文件存不存在,如果不存在的话直接结束,如果存在的话接着往下走。
接下来是将运行脚本前设置的其他参数保存到 CMD_LINE_ARGS 这个变量中,然后在最后执行了 catalina.bat 这个文件,跟了两个参数,第一个是 start ,第二个就是刚才保存的变量 CMD_LINE_ARGS 。
这种脚本代码建议放在编辑器里看,千万不要使用那个 Windows 自带的记事本,用那玩意看估计大多数人直接就看懵了。
我通常是放在 VSCode 中看,会自动对代码进行高亮展示,给大家看下上面这段脚本放在 VSCode 中的样子:
可以看到,正常注释变灰,关键字变蓝高亮,并且跳转语句直接变橙色,非常方便我们阅读。
3 Tomcat 启动第二步:catalina.bat
点击开始;2.找到运行,进入;3.输入cmd进入dos控制台;4.执行以下dos命令(输入命令后按回车键执行);d:cd Tomcat_oa\binservice install+服务名(可选,默认为tomcat5)5.至此tomcat加入windows服务成功。启动命令:net star。
这个脚本太长了,我就单纯的截取比较重要的进行介绍。
set &34;if not &34; == &34; goto gotHomeset &34;if exist &34; goto okHomecd ..set &34;cd &34;:gotHomeif exist &34; goto okHomeecho The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHome
在最开头的地方,校验 CATALINA_HOME 是否存在,如果不存在,则设置 CATALINA_HOME 为当前路径。
接着下面设置了一下 CATALINA_BASE 这个变量。
if not &34; == &34; goto gotBaseset &34;:gotBase
接下来到了一个重点内容,判断 setclasspath.bat 是否存在,如果存在的话就执行一下:
rem Get standard Java environment variablesif exist &34; goto okSetclasspathecho Cannot find &34;echo This file is needed to run this programgoto end:okSetclasspathcall &34; %1if errorlevel 1 goto end
这个文件实际上是校验是否设置了 JAVA_HOME 或者 JRE_HOME 的环境变量,如果没有设置则会在控制台打印对应的信息。
接下来是有关于 CLASSPATH 的设置和校验,然后是一堆变量的设置和校验,无需关注,接着使用 echo 打印了一些信息:
echo Using CATALINA_BASE: &34;echo Using CATALINA_HOME: &34;echo Using CATALINA_TMPDIR: &34;if &34;%1&34; == &34;debug&34; goto use_jdkecho Using JRE_HOME:&34;goto java_dir_displayed:use_jdkecho Using JAVA_HOME: &34;:java_dir_displayedecho Using CLASSPATH: &34;
各种比较重要的变量在这里进行了一些打印,接下来又设置了一些比较重要的变量:
这里的 _EXECJAVA 实际上是我们在 JAVA_HOME 或者是 JRE_HOME 中 bin 下面的 java.exe 。
而这个 MAINCLASS 的值是 org.apache.catalina.startup.Bootstrap ,这个是我们第一篇文章启动 Tomcat 时候的那个类,不知道各位还有印象不。
接下来设置了一个变量 ACTION 的动作时 start ,用屁股想想应该是启动的意思。
然后对参数进行了一次判断:
if &34;%1&34; == &34;debug&34; goto doDebugif &34;%1&34; == &34;run&34; goto doRunif &34;%1&34; == &34;start&34; goto doStartif &34;%1&34; == &34;stop&34; goto doStopif &34;%1&34; == &34;configtest&34; goto doConfigTestif &34;%1&34; == &34;version&34; goto doVersion
:doDebugshiftset _EXECJAVA=%_RUNJDB%set DEBUG_OPTS=-sourcepath &34;if not &34;%1&34; == &34;-security&34; goto execCmdshiftecho Using Security Managerset &34;goto execCmd:doRunshiftif not &34;%1&34; == &34;-security&34; goto execCmdshiftecho Using Security Managerset &34;goto execCmd:doStartshiftif &34; == &34; set TITLE=Tomcatset _EXECJAVA=start &34; %_RUNJAVA%if not &34;%1&34; == &34;-security&34; goto execCmdshiftecho Using Security Managerset &34;goto execCmd
接着往下看,基本上就已经到了这个脚本的最底部,这里执行了一句话,也是核心的一句话:
%_EXECJAVA% %CATALINA_LOGGING_CONFIG% %LOGGING_MANAGER% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -D%ENDORSED_PROP%=&34; -classpath &34; -Dcatalina.base=&34; -Dcatalina.home=&34; -Djava.io.tmpdir=&34; %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
1、打开电脑后在桌面上找到【我的电脑】并双击打开,如下图所示。2、在我的电脑里找到tomcat的安装位置并双击进入,如下图所示。3、在tomcat安装目录里直接找到bin文件夹,bin文件夹都是启动文件,双击进入,如下图所示。4。
_EXECJAVA 是我们刚才说的那个 java.exe ,然后是各种运行时参数和系统属性,最后面的 MAINCLASS ,也就是 org.apache.catalina.startup.Bootstrap ,接着是 CMD_LINE_ARGS ,这也是一个命令参数,就是 main 方法上的那个 args 参数,最后一个参数是 ACTION 也就是 start 。
最后归根结底就是一句话,执行 Bootstrap 里面的 main 方法,别看这些个脚本写了一大堆,主要工作就是在校验环境配置以及一些基础系统设置和一些运行时参数的设置。
4 小结
脚本整体来讲不难,而且每段脚本上面都已经有了简单的英文注释,简明扼要的写清楚了这一段脚本在做什么,稍微了解一些基础的 DOS 命令,都可以进行阅读。
至于其他的脚本可以大致浏览下,基本上兜兜转转最后还是会回到 catalina.bat 这个脚本,而在这个脚本中,最后肯定会执行 Bootstrap 里面的 main 方法。
在 Windows 系统中,使用的是 bat 脚本,在 Linux 系统中,就会使用 sh 脚本,这个本质上没有什么大的差别,整体原理都是一样的,有兴趣的同学可以自己研究下 sh 脚本,就当学 shell 语法了。