手把手教你tomcat全部知识点(1)——快速启动tomcat

同学们可以私信我加入学习群!


@TOC


一、前言

以下所有内容仅适用于windows系统,linux系统脚本不同,但原理相通,请自行参考解决。

我们为什么需要绿色版的tomcat:

  1. 绿色版tomcat解压缩即可使用,不需要繁杂的配置
  2. 部署运维工作时,很容易出现一台服务器,多个项目、多人试用的情况,绿色版tomcat能最大限度减少服务器复杂环境带来的影响。
  3. 公司要求开发的部署运维工具,需要一个绿色版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是个十分干净的,没有部署过任何项目,那么能让你启动失败的有且只有两个原因:

  1. 环境变量配置失败

  2. 端口被占用。

至此,大部分的服务器环境,你应该都可以简单应对了。

2.4 维护配置文件,快速启动tomcat

上文所有操作都是在命令行环境完成的,设置的变量属于临时变量,命令行关闭后,下次重新打开,还需要再维护一遍变量。所以有一种方案是维护环境变量。

我们可以知道有两种方式维护变量:

  1. 在环境变量中维护JAVA_HOME和CATALINA_HOME,优点是一劳永逸,缺点是各个tomcat配置耦合。

  2. 在命令行中设置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,可能的原因有如下:

  1. 在初次运行tomcat成功前,不要在其中部署项目,先成功运行tomcat后再部署项目,项目配置错误,可能导致tomcat启动失败。

  2. tomcat端口占用,或者有其他tomcat进程正在启动,打开任务管理器,搜索所有的java或javaw进程,统统删除,放心删,底层的系统进程不会是java。

  3. JAVA_HOME和CATALINA_HOME变量配置错误,在同学们学会查看日志,学会各种调试手段之前,不要尝试太多可能性,包括不限于:变量值不要存在空格、不要存在汉字、不要修改路径中的斜线和反斜线等。在你还不太懂原理时,最有效的学习方式就是照葫芦画瓢。


总结

下一篇文章讲解如何为tomcat创建服务,如何通过tomcat9w.exe启动tomcat,以及tomcat日志查看简述。

这部分功能后续会维护到博主的pc工具中,欢迎各位大佬提前关注,获取资源,查看代码示例,或者联系我:

中二少年学编程的个人主页

本文要点记录:

  1. 设置jdk地址:set JAVA_HOME="F:\test\jdk1.8.0_202"

  2. 解决命令行乱码:loggin.properties中修改java.util.logging.ConsoleHandler.encoding = GBK

  3. catalina.bat脚本中设置JAVA_HOME

  4. CATALINA_HOME很有用,但是止步于本篇文章的场景,用不到。

相关推荐
xxwl5855 天前
数据库后端接口测试报告
spring boot·mysql·tomcat
次次皮7 天前
Linux 下通过 XShell 手动更新 Tomcat 应用并重启
前端·tomcat·jar
Listen·Rain8 天前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
Full Stack Developme9 天前
SpringBoot 内嵌 Tomcat 的启动流程
spring boot·后端·tomcat
Full Stack Developme9 天前
Tomcat 如何处理HTTP请求
java·http·tomcat
Full Stack Developme10 天前
Tomcat 设计原理
java·tomcat
Full Stack Developme10 天前
Tomcat NIO连接器内部如何实现零拷贝 Session管理如何实现集群同步
java·tomcat·nio
BullSmall11 天前
Tomcat 部署 Jenkins → Docker Jenkins 完整迁移方案
docker·tomcat·jenkins
baozhengw12 天前
信创改造-SpringBootJar包改为WAR包部署Tomcat
java·tomcat
Java面试题总结17 天前
mybatis插件
java·tomcat·mybatis