手把手教你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很有用,但是止步于本篇文章的场景,用不到。

相关推荐
郑梓妍2 小时前
最新版本TOMCAT+IntelliJ IDEA+MAVEN项目创建(JAVAWEB)
tomcat·maven·intellij-idea
lyrhhhhhhhh7 小时前
手写一个Tomcat
java·tomcat
中东大鹅1 天前
从0开始,手搓Tomcat
前端·tomcat·firefox
小布不吃竹1 天前
手写简易Tomcat核心实现:深入理解Servlet容器原理
java·servlet·tomcat
秋说1 天前
【Java开发指南 | 第三十五篇】Maven + Tomcat Web应用程序搭建
java·tomcat·maven
m0_748240022 天前
linux 设置tomcat开机启动
linux·运维·tomcat
A Runner for leave2 天前
Servlet理论和tomcat(2)http
http·servlet·tomcat
Alt.92 天前
JavaWeb基础一(Tomcat、Maven)
tomcat·maven·web
Warren982 天前
MySQL DDL数据定义语句
数据库·spring boot·笔记·mysql·oracle·tomcat·mybatis
千航@abc2 天前
tomcat单机多实例部署
java·服务器·tomcat