同学们可以私信我加入学习群!
@TOC
一、前言
以下所有内容仅适用于windows系统,linux系统脚本不同,但原理相通,请自行参考解决。
我们为什么需要绿色版的tomcat:
- 绿色版tomcat解压缩即可使用,不需要繁杂的配置
- 部署运维工作时,很容易出现一台服务器,多个项目、多人试用的情况,绿色版tomcat能最大限度减少服务器复杂环境带来的影响。
- 公司要求开发的部署运维工具,需要一个绿色版tomcat。
二、启动tomcat
2.1 命令行启动tomcat
先说结论:只需要修改catalina.bat。只需要维护jdk的地址:JAVA_HOME或者JRE_HOME。如果你分不清jdk和jre,那就只维护JAVA_HOME,新手可能不下载jre,但是一定会下载一个jdk。
划重点:简单运行,不需要任何其他的环境变量。
具体操作如下。
我们随意打开一个命令行窗口,首先设置JRE_HOME地址:
c
set JRE_HOME=F:\test\jdk1.8.0_202\jre
或者设置JAVA_HOME
c
set JAVA_HOME="F:\test\jdk1.8.0_202"
两者设置一个即可。
F:\test\jdk1.8.0_202\jre是我自己下载的一个jre环境。如果对java基础环境不熟悉,可以关注博主的工具软件,目前正在完善便捷管理环境的功能,设置后如图:
切记不要关闭这个窗口,因为这样设置的是临时变量,关闭窗口后就会失效。
然后在命令行窗口中输入startup.bat,回车: 发现又弹出一个tomcat窗口,黑窗口一直存在,则说明tomcat启动成功。如果windows环境下,想解决乱码问题,就找到tomcat根目录下conf------》logging.properties文件,修改如下代码:
c
java.util.logging.ConsoleHandler.encoding = UTF-8
修改为:
c
java.util.logging.ConsoleHandler.encoding = GBK
然后重新运行,发现打印中文字符:
如果重新启动报错,则很有可能是已经存在tomcat的进程,上次关闭未杀死。找到对应进程并结束任务即可:
如果你不知道怎么调出命令行列,那就把所有java进程杀死,放心,系统底层进程不可能是java。
注意不要去双击startup.bat,我们的变量是通过命令行维护在临时变量中,从文件夹中双击脚本,脚本找到不到正确的变量。
我们在浏览器输入地址:localhost:8080,出现tom猫:
说明通过上面的两行命令,tomcat成功启动。命令如下:
c
set JAVA_HOME="F:\test\jdk1.8.0_202"
设置完成后,在同一个命令行窗口输入:
startup.bat
至此,你已经学会了基本的tomcat启动功能。只是轻度使用tomcat部署个项目,看到这里就可以了。
2.2 了解tomcat的基本逻辑
先查看setclasspath.bat,里面有几行关键代码:
c
set "_RUNJAVA=%JRE_HOME%\bin\java.exe"
tomcat最终运行起来后,是一个java进程,这行代码就是在声明java的路径。至于前面那么多jre_home和java_home基本都是在处理当这两个变量其中一个不存在时,如何处理。
再查看startup.bat,大部分人都知道这个脚本是启动tomcat的脚本,但很少有人真的去查看其中的内容,如果打开脚本,我们可以看到关键的一行代码:
c
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
这行代码定义了运行startup脚本时,最终执行的是tomcat的catalina.bat。
接着查看catalina.bat脚本,会发现很多脚本的执行逻辑,基本都是基于一个关键变量:CATALINA_HOME
我们查阅这三个脚本,就可以辅助我们记忆tomcat运行的两个关键变量:JAVA_HOME(或JRE_HOME)和CATALINA_HOME
同学们可能已经发现,我提到了一个很关键的变量------CATALINA_HOME,网上大部分教程也都会让大家先去配置好这个环境变量。为什么我们没有配置它,也可以成功启动tomcat?
因为我们是在tomcat的bin目录下直接打开的cmd,也就是说tomcat在执行startup.bat脚本时,会先去找CATALINA_HOME变量,以希望加载tomcat对应的资源。当它找不到这个变量时,会在当前执行命令的环境找tomcat对应的资源。这是做软件一个很普遍的思想------设置缺省值。
2.3 为什么设置CATALINA_HOME
网上很多教程,不论是设置CATALINA_HOME,还是设置CATALINA_BASE,其实都是无效的,唯一用处就是多写个变量感动自己。
这个变量在什么场景下才有价值?
答案很明显:在命令行环境不是tomcat的bin目录下,因为如果随便一个目录下设置JAVA_HOME然后执行startup.bat,无法找到对应的tomcat资源。
可以看到提示是CATALINA_HOME没有正确定义。
如果我们手动给它设置好CATALINA_HOME,然后重启启动startup.bat:
发现tomcat可以启动了。
我这里启动了两次,算是个小反面教材,因为有个tomcat启动着,占用了默认的8080端口,所以第一次启动失败了。大家要记着,如果你的tomcat是个十分干净的,没有部署过任何项目,那么能让你启动失败的有且只有两个原因:
-
环境变量配置失败
-
端口被占用。
至此,大部分的服务器环境,你应该都可以简单应对了。
2.4 维护配置文件,快速启动tomcat
上文所有操作都是在命令行环境完成的,设置的变量属于临时变量,命令行关闭后,下次重新打开,还需要再维护一遍变量。所以有一种方案是维护环境变量。
我们可以知道有两种方式维护变量:
-
在环境变量中维护JAVA_HOME和CATALINA_HOME,优点是一劳永逸,缺点是各个tomcat配置耦合。
-
在命令行中设置JAVA_HOME和CATALINA_HOME,优点是解耦,缺点是每次都要设置,过于麻烦。
有没有兼顾两者优点的方案?答案肯定是有。
我们前面花了一段篇幅讲解catalina.bat等脚本,就是因为启动tomcat之所以需要维护几个变量,就是因为这几个脚本需要。
两个变量哪个更重要?当然是JAVA_HOME,因为JAVA_HOME是外部环境,CATALINA_HOME是tomcat的根目录。如果tomcat的脚本找不到CATALINA_HOME变量会自动查找当前的根目录,只维护JAVA_HOME可以应对大部分场景。
既然核心是让脚本找到两个变量,并且JAVA_HOME更重要,那么我们就在需要JAVA_HOME的配置文件里,手动维护好变量值即可。
用编辑器打开catalina.bat脚本,在@echo off后面维护变量:
c
@echo off
set "JAVA_HOME=F:\test\jdk1.8.0_202"
保存配置后,双击startup.bat脚本。发现tomcat正常启动。
至此,我们就可以实现一个tomcat软件一套配置,既不用每次通过命令行设置临时变量,也不用通过环境变量设置全局变量。大部分同学到这一步就能应对百分之99的场景了。
2.5注意事项
tomcat无法启动或者黑窗口一闪而过的原因很多,具体需要查看日志,如果完全按照本文部署tomcat,可能的原因有如下:
-
在初次运行tomcat成功前,不要在其中部署项目,先成功运行tomcat后再部署项目,项目配置错误,可能导致tomcat启动失败。
-
tomcat端口占用,或者有其他tomcat进程正在启动,打开任务管理器,搜索所有的java或javaw进程,统统删除,放心删,底层的系统进程不会是java。
-
JAVA_HOME和CATALINA_HOME变量配置错误,在同学们学会查看日志,学会各种调试手段之前,不要尝试太多可能性,包括不限于:变量值不要存在空格、不要存在汉字、不要修改路径中的斜线和反斜线等。在你还不太懂原理时,最有效的学习方式就是照葫芦画瓢。
总结
下一篇文章讲解如何为tomcat创建服务,如何通过tomcat9w.exe启动tomcat,以及tomcat日志查看简述。
这部分功能后续会维护到博主的pc工具中,欢迎各位大佬提前关注,获取资源,查看代码示例,或者联系我:
本文要点记录:
-
设置jdk地址:set JAVA_HOME="F:\test\jdk1.8.0_202"
-
解决命令行乱码:loggin.properties中修改java.util.logging.ConsoleHandler.encoding = GBK
-
catalina.bat脚本中设置JAVA_HOME
-
CATALINA_HOME很有用,但是止步于本篇文章的场景,用不到。