资讯详情

资讯详情

Tomcat安装配置完全指南:从JDK环境变量到部署踩坑全解析

话说回来搞Java开发的人估计没有谁没跟Tomcat打过交道。哪怕你现在用的是Spring Boot内嵌的Tomcat或者公司生产环境早就换成了宝兰德、东方通这类国产中间件Tomcat仍然是很多人接触Java Web的第一站。它就是一个轻量级的Servlet容器你把写好的Web应用打个war包扔进去配个端口启动起来就能对外提供访问了。在我个人的认知里Tomcat的安装配置属于那种“看起来不难但一上手就容易翻车”的基础操作——你说它难吧无非就是解压一个压缩包运行一个启动脚本你说它简单吧环境变量没配好、JDK版本不匹配、端口被占这类问题能硬生生卡住一个新人一下午。这篇文章我就把Tomcat安装及配置从头到尾捋一遍包括JDK怎么选、环境变量怎么配、Tomcat怎么启动、server.xml里那些关键参数是干什么的、遇到404怎么排查。全程用我亲手操作过的路径来走该避的坑都给你标上看完你照着做一遍不说百分百顺利至少大多数常见错误都能自己解决。内容不挑操作系统Windows和Linux我都会讲到因为我自己就是两台机器来回折腾的那种人。1. 安装前先搞清楚这几件事能少走一半弯路很多教程上来就让你下载Tomcat解压然后点启动结果你照做了发现启动闪退或者浏览器打开404然后整个人就懵了。实际上Tomcat安装配置这一步真正需要你先想明白的是它运行在什么环境上、依赖什么组件、版本怎么选。这几件事没理清后面全是事。1.1 为什么每个Java Web项目都绕不开Tomcat先不急着装我们花两分钟说清楚Tomcat到底是干嘛的。你写好的Java代码不管是Servlet还是JSP本质上是不能直接被浏览器访问的。浏览器能认识的是HTTP协议你写的Java代码得有一个“翻译官”帮忙接收HTTP请求把请求里的参数解析出来调用你的Java逻辑再把结果包装成HTTP响应返回给浏览器。Tomcat干的就这活。它实现了Servlet规范和JSP规范所以你的Web项目打成war包之后扔到Tomcat的webapps目录下Tomcat就会自动加载帮你把项目跑起来。这也是为什么很多老项目、学校里的实训项目、企业内部管理系统都在用Tomcat——它不挑项目类型你只要按规范写Servlet、JSP它就能给你跑。至于现在流行的Spring Boot其实也是把Tomcat内嵌到应用里了原理还是一回事只是不用你手动装一个独立Tomcat去部署war包了。理解了这一点你就明白为什么安装Tomcat之前必须先装JDK。因为Tomcat本身是纯Java写的它要运行起来就必须依赖JVM——这个JVM就是JDK或者JRE自带的。没有JDKTomcat启动脚本会直接报错连个提示窗口都来不及弹出来。1.2 JDK版本怎么选Tomcat和JDK的搭配关系这是一个特别容易被忽略的点。很多人随便下载一个JDK版本再随便下载一个Tomcat版本结果启动的时候要么报UnsupportedClassVersionError要么干脆闪退原因就是版本不匹配。以我多年踩坑的经验现在的搭配逻辑是这样的Tomcat 9.x配JDK 8或者JDK 11都是可以的Tomcat 10.x开始对应Jakarta EE规范包名从javax.改成了jakarta.如果老项目用了javax.servlet之类的包在Tomcat 10上直接跑不起来。所以日常开发和学习我建议直接用Tomcat 9.x搭配JDK 8或JDK 11这个组合最稳。JDK版本也建议用LTS长期支持版比如JDK 8、JDK 11、JDK 17。如果你只是一个普通的学习者或者说公司项目不是那种非要用新特性不可的情况JDK 8现在依然是最常见的生产环境版本。不是说要追新而是“别人能用你也能用”这个逻辑在基础环境搭建里最重要。1.3 安装前要确认的三件事第一确认你的操作系统位数也就是64位还是32位。现在基本都是64位了但如果你跑在什么老旧虚拟机里可能还是32位下载JDK的时候要选对应版本装错位数会导致Tomcat启动没反应。第二确认系统里没有残留的旧版本JDK或者多版本JDK互相打架的情况。Windows环境变量里JAVA_HOME指向了哪个版本Tomcat就用哪个版本。经常有人装了JDK 8又装了JDK 17结果JAVA_HOME反复横跳Tomcat启动一下报这种错一下报那种错。第三确认你下载Tomcat的路径里不要有中文、不要有空格。我知道很多人习惯把软件装在D盘或者某个工具的安装目录下路径里带个中文文件夹名Tomcat启动脚本很容易因为路径解析出问题而闪退。最稳妥的办法就是放在D:\dev\apache-tomcat-9.0.x这种纯英文路径下。2. 先把JDK装明白环境变量配置的隐藏逻辑如果你已经装过JDK并且java -version能正常输出版本号那这一节可以快速扫一眼。这里既然标题是Tomcat安装配置我还是要完整讲一遍JDK和环境变量因为这也是Tomcat启动失败出现频率最高、最让人头疼的一个位置。2.1 JAVA_HOME到底有什么用不配行不行答案是不配Tomcat大概率跑不起来就算跑起来后续你用Maven、Gradle也一样会遇到问题。JAVA_HOME这个环境变量的作用就是告诉所有Java相关工具“JDK装在哪个位置”。Tomcat的启动脚本catalina.bat和catalina.sh会读取JAVA_HOME找到java命令之后再启动JVM。其实你直接把JDK的bin目录加到PATH里不做JAVA_HOME也是能启动Tomcat的因为Tomcat找java命令的时候会去PATH里找。但问题在于后续你会用Maven、Gradle、Jenkins这些工具它们很多都是优先认JAVA_HOME的你只配PATH不配JAVA_HOME后面会各种别扭。所以老老实实三个环境变量都配好JAVA_HOME、CLASSPATH、PATH。CLASSPATH在JDK 8之后其实不需要手动配了但国内很多教程还在让你配配了也没坏处就一行.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。它的作用是告诉JVM去哪里找类库虽然现在不手动配也不再是问题但留着不影响什么。2.2 Windows系统下JDK安装与环境变量配置实操第一步从Oracle官网或者你所在的开源镜像站下载JDK 8的Windows x64安装包。这里有人问Oracle官网下载要登录太麻烦有没有别的渠道有你直接搜索“Adoptium”或者“清华开源软件镜像站”这些地方都能下载OpenJDK发行版功能和Oracle JDK基本没差。作为个人开发和学习环境用OpenJDK没有任何问题。第二步一路默认安装安装路径记下来。比如你安装在C:\Program Files\Java\jdk1.8.0_202。这里我不建议改到自定义路径因为Windows对Program Files的处理有时会因空格带来一些奇怪的兼容问题虽然现在大多数工具都处理了空格路径但为了后续省心你可以装到D:\Java\jdk1.8.0_202这种纯英文无空格路径下。第三步配置环境变量。右键“此电脑” - “属性” - “高级系统设置” - “环境变量”。在“系统变量”区域点击“新建”变量名填JAVA_HOME变量值填你的JDK安装路径比如D:\Java\jdk1.8.0_202。注意变量值只写到JDK的主目录不要带bin。第四步修改PATH。在系统变量里找到PATH双击打开点击“新建”添加%JAVA_HOME%\bin。这里有个细节Windows会把两个PATH条目用分号分隔但如果你用的是Windows 10及以上系统编辑界面是列表形式的直接新增一行就行。一定要把%JAVA_HOME%\bin放到其他java相关路径的前面否则系统会优先执行别的目录下的java命令。第五步验证环境变量。打开一个新的命令行窗口输入java -version能看到版本号就说明JDK安装配置成功。为什么强调“新的命令行窗口”因为环境变量的读取是在命令行窗口打开时完成的你之前已经开着的窗口不会刷新试了半天还报找不到java命令就是这个原因。2.3 Linux服务器上JDK的安装与环境变量配置Linux下的安装方式就很直接了一般有两种思路。第一种是用系统的包管理器装比如CentOS上用yum install -y java-1.8.0-openjdkUbuntu上用apt install -y openjdk-8-jdk。这种方式的优点是快、好管理缺点是装完之后JDK的安装路径不固定不好确定JAVA_HOME。另一种方式是自己上传JDK的tar.gz包解压到指定目录然后手动配环境变量。这也是我推荐的方式因为路径完全可控后续配Maven、Jenkins都方便。操作步骤如下把下载好的jdk-8u202-linux-x64.tar.gz上传到/opt目录然后执行tar -zxvf jdk-8u202-linux-x64.tar.gz把解压出来的目录重命名一下比如mv jdk1.8.0_202 java8这样路径就是/opt/java8看着清爽。接着编辑环境变量配置文件vim /etc/profile在文件末尾追加这几行export JAVA_HOME/opt/java8 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar保存退出后执行source /etc/profile让它生效然后echo $JAVA_HOME看路径有没有输出再java -version确认版本。这里有一个Linux新手经常犯的错你把环境变量写到/etc/profile之后然后通过SSH工具连服务器随手敲java -version报错了第一反应是配置有问题。实际上你只需要重新登录一次SSH会话环境变量就加载了不是配置失误是会话没刷新。3. Tomcat下载、启动与验证从解压到看到那只猫JDK准备好了接下来正式进入Tomcat本身的安装配置。很多人觉得这一步是最简单的解压就完了但我要说怎么解压、解压到哪里、用哪个启动脚本、怎么判断启动成功这些细节处理不好后面一堆问题。3.1 下载Tomcat渠道和版本选择Tomcat官方下载地址就是Apache Tomcat的官网进入之后选择你要的版本然后点对应版本的“Download”目录在里面选择一个二进制发行版下载一般是tar.gzLinux或者zipWindows。这里我提醒一句页面里有源代码包Source Code Distributions新手别下错要下的是“Binary Distributions”下面的tar.gz或zip。如果官网下载速度慢可以用国内的镜像站清华源和阿里云源都有Tomcat的镜像直接在浏览器里搜索“清华镜像 tomcat”就行。版本和下载渠道这俩问题解决之后下载的就是一个压缩包不需要安装解压即用这也是Tomcat最方便的地方。版本我再次建议新手和学习环境用Tomcat 9.x。Tomcat 10虽然是最新大版本但它对原来的javax.servlet包名不兼容如果你只是学习Servlet开发找教程的时候几乎都是基于javax的版本不匹配会让你在写代码时反复纠结导包问题。3.2 解压、目录放置、启动命令Windows下把zip直接解压到比如D:\dev\apache-tomcat-9.0.80。解压完之后你会看到bin、conf、lib、webapps、logs这几个核心目录。先不用管太多直接进bin目录双击startup.bat会弹出一个命令行黑窗口滚动几行日志。如果窗口没有立即关闭说明启动已经成功了一大半。Linux下把tar.gz包上传到服务器解压到/usr/local或者/opt下命令是tar -zxvf apache-tomcat-9.0.80.tar.gz -C /opt然后进到/opt/apache-tomcat-9.0.80/bin执行./startup.sh输出一行Tomcat started就基本算是启动成功了。这里有一个最常见的坑Windows下双击startup.bat弹出黑窗口然后瞬间闪退原因八成是JAVA_HOME没配好或者路径不对。怎么排除在命令行窗口里手动执行一次catalina.bat run这样Tomcat会在前台运行报错信息会直接打在屏幕上而不是一闪而过你就能看到真正的错误原因。目录放好后启动前我建议先在conf目录下看一眼server.xml确认一下端口。Tomcat默认的HTTP端口是8080如果你本机已经装了别的服务占了8080可以先把端口改掉在conf目录下找到server.xml把Connector port8080里的8080改成你要的端口比如8081。这一步属于最基础也最容易被忽略的配置但它非常重要。3.3 验证Tomcat启动成功的三个层次第一层看启动日志。Tomcat的日志在logs目录下启动过程中会生成catalina.日期.log里面会打印Server startup相关的信息。如果看到类似Server startup in [xxx] milliseconds的输出说明Tomcat启动成功。还有一种情况是日志里一堆报错那就要具体信息具体分析。第二层打开浏览器访问http://localhost:8080出现一只猫的默认首页Tomcat 9是那只有名的猫Tomcat新版其实换成了更简洁的首页说明WEB访问正常。如果打不开先确认你改的端口生效了没再确认防火墙是否放行。第三层验证应用部署。在webapps目录下放一个最简单的war包或者项目文件夹浏览器访问对应路径看能不能正常渲染页面。只有到了这一层才是真正证明你的Tomcat已经可以作为Web应用服务器使用了。注意不要为了验证启动成功就去双击shutdown.bat又马上双击startup.bat频繁启停会导致端口处于TIME_WAIT状态偶尔会遇到端口暂时被占用的假象。4. 目录结构和配置文件Tomcat是怎么知道自己该干什么的装好Tomcat容易但配置才是核心。很多人的困惑是我知道conf/server.xml可以改端口但其他那些配置有什么用为什么有时候改了conf里的配置Tomcat起不来本节我带你把Tomcat的核心目录和配置文件逐个过一下重点说清楚里面那些关键参数你之后就敢自己动刀改了。4.1 核心目录结构解读bin、conf、logs、webapps、lib先看目录结构。bin目录里面放的是启动和关闭脚本Windows下是.batLinux下是.sh。除了最常用的startup和shutdown之外还有catalina脚本这个才是Tomcat的真正入口startup和shutdown只是调用了catalina而已。conf目录是核心配置目录里面的server.xml是主配置文件web.xml是Servlet规范配置context.xml是各个Context的默认配置tomcat-users.xml是管理用户权限的。logs目录Catalina日志、localhost日志、manager日志都在里面。你部署的应用如果在启动时抛异常多半能在logs里找到线索。webapps目录是放置Web应用的核心位置war包丢进去之后Tomcat会自动解压并部署。lib目录存放Tomcat自身依赖的jar包如果你要添加数据库驱动之类的依赖有时候会放到这里但一般推荐放到具体项目的WEB-INF/lib下。这里面有几个细节值得说一下。第一webapps目录默认自带ROOT、docs、examples、manager、host-manager这几个应用其中ROOT就是访问http://localhost:8080/时展示的默认首页。如果你自己部署了项目放在webapps下比如webapps\myapp那么访问路径就是http://localhost:8080/myapp。第二lib目录里的jar包是全局共享的不同应用如果用到不同版本的同一个库放进lib目录就会冲突所以一般不建议把业务自己的jar包往里塞。4.2 server.xml里的几个关键配置项改之前先弄懂server.xml是Tomcat最核心的配置文件。我在日常工作中会频繁修改的无非就几处端口、Host、Connector参数。先看最基础的端口配置把server.xml打开翻到这样一段Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /port是HTTP访问端口connectionTimeout是连接超时时间redirectPort是SSL重定向端口。如果你要跑HTTPS就会涉及8443这个端口。很多人在申请了SSL证书之后不知道怎么配置其实就是在server.xml里加一个带SSL配置的Connector稍后我会展开说。再往下看server.xml里还有一个Engine和Host的配置Engine nameCatalina defaultHostlocalhost Host namelocalhost appBasewebapps unpackWARstrue autoDeploytrue /Host /EngineappBase是应用基础目录默认指向webapps如果你改了这个路径Tomcat会去你指定的目录找webapp。unpackWARs表示是否自动解压war包autoDeploy表示是否自动部署。这两个参数在开发环境非常有用你只要往webapps里丢一个war包Tomcat会自动解压、自动部署连重启都不用。再往下看Tomcat管理后台的配置在tomcat-users.xml里。你需要在tomcat-users标签里添加一个用户并赋予manager-gui角色才能登录进去。这是开发环境常用的操作配置方式是这样的role rolenamemanager-gui/ user usernameadmin passwordadmin rolesmanager-gui/保存之后重启Tomcat访问http://localhost:8080/manager/html就能打开管理后台。不过我要提醒一句线上环境一定不要开这个管理后台也不要开manager-gui权限这是很多Tomcat被入侵的入口安全审计的时候第一个查的就是这个。4.3 HTTPS配置一次性把证书加到Tomcat里说一个小场景你有个项目已经在Tomcat上跑了现在要上HTTPS拿到证书之后怎么配。其实原理不复杂就是把证书文件放到一个位置然后在server.xml里加一个带SSLEnabled的Connector。最常见的操作是把证书转成PKCS12格式然后在server.xml里这样写Connector port8443 protocolorg.apache.coyote.http11.Http11NioProtocol maxThreads150 SSLEnabledtrue SSLHostConfig Certificate certificateKeystoreFileconf/keystore.p12 certificateKeystorePassword你的密码 typeRSA / /SSLHostConfig /Connector注意这个配置里证书路径是相对Tomcat的bin目录的所以conf/keystore.p12实际指向的是Tomcat安装目录/conf/keystore.p12。修改完server.xml之后Tomcat会自动重载配置不需要额外操作。4.4 修改端口后开发环境顺手要做的另外两件事先把端口改了之后如果你在本地开发调试强烈建议顺手做两件事第一把conf/web.xml里的listings参数改为true这样你打开目录时可以直接看到目录下的文件列表调试静态资源时方便得多。第二把conf/server.xml里那个默认的8080准确改成目标端口号同时确认redirectPort也改了避免HTTPS时跳到奇怪的端口。这里注意conf/web.xml是全局Servlet配置init-param里的listings参数会影响所有应用的目录浏览行为。生产环境建议保持默认false避免暴露目录结构。5. 常见问题速查启动闪退、404、乱码、端口占用这个部分我本来想放到最后简单列个表但写着写着发现这部分内容其实才是最有价值的实操经验。我见过太多人在Tomcat安装配置上卡住的场景了这里直接给你整理成“遇到什么问题 - 什么原因 - 怎么处理”的速查清单。5.1 启动闪退怎么排查闪退的黄金排查法就是我前面提过的那句——在命令行窗口里手动执行catalina.bat runLinux下是catalina.sh run让Tomcat前台运行这样错误信息就不会一闪而过。最常见的闪退原因我列几个JAVA_HOME没配置或者配置错误。检查环境变量值是不是JDK的主目录而不是bin目录。配置了JRE_HOME但在Windows下JRE_HOME指向了不存在的位置。老一点的Tomcat版本会优先找JRE_HOME新旧配置混淆容易出现这个问题。JDK位数和Tomcat位数不匹配。Tomcat的Windows发行版里面如果你下载的是32位的那么你的JDK也要是32位的混用会导致启动脚本无法识别。路径包含中文或空格。路径问题最烦人因为你不一定一眼能看出来我遇到过一次装在D:\软件安装\Tomcat下启动闪退的把文件夹名改成英文就好了。另外有人问Tomcat启动闪退是不是因为8080端口被占用。其实端口被占用的情况下Tomcat不会直接闪退它会在日志里输出Port already in use的报错但是窗口可能会因为异常卡住让你误以为没闪退。所以看到端口报错的时候第一反应应该是去查谁占了8080而不是反复重启Tomcat。5.2 端口被占用了怎么办Windows下查看端口占用的命令是netstat -ano | findstr 8080这个命令会输出所有包含8080端口的网络连接最后一列是PID进程号。拿到PID之后再执行tasklist | findstr PID就能看到是哪个进程占了这个端口。如果是Java进程占用的那可能是你自己之前启动的Tomcat没有关干净如果是其他程序占用的那就换个端口。Linux下的对应操作是lsof -i:8080 sudo netstat -tunlp | grep 8080然后根据输出的进程信息决定是kill掉还是换一个端口。5.3 浏览器访问404怎么排查Tomcat启动是正常的但是访问http://localhost:8080返回404。这件事要分情况讨论。第一种情况你访问根路径返回404那说明webapps目录下面没有可用的应用。默认情况下webapps下是有ROOT目录的如果你不小心把它删了或者重命名了根路径就会404。解决方案从Tomcat安装包里重新解压一份ROOT目录出来或者创建你自己的应用。第二种情况你部署了自己的项目访问http://localhost:8080/项目名返回404。这个问题我要多说几句。绝大多数情况是你的war包实际上没有部署成功。检查方法有两个先看webapps目录下有没有自动解压出来的项目文件夹如果war包没有解压出来说明Tomcat没有正确识别到war包再看logs目录下的localhost.日期.log里面会有应用加载失败的完整堆栈信息。还有一种可能就是war包本身没构建正确你本地工程打包时没有生成标准的WEB-INF目录结构。第三种情况访问根路径正常但访问某个具体页面404。这个通常是路由配置的问题或者是页面路径大小写不匹配的问题。Tomcat对大小写非常敏感Linux上尤其严格index.html和Index.html是两回事。5.4 日志和中文乱码问题处理Tomcat日志出现中文乱码这是Windows下特别常见的问题。原因很简单Tomcat日志默认用UTF-8编码输出而Windows命令行窗口默认用GBK编码解析两个编码对不上中文就变成了一堆乱码。解决方式有两种一是改Tomcat的日志编码。在conf/logging.properties里找到java.util.logging.ConsoleHandler.encoding把它改成GBKWindows命令行窗口就能正常显示了java.util.logging.ConsoleHandler.encoding GBK二是改命令行窗口的编码在启动Tomcat之前先执行chcp 65001把命令行窗口切换到UTF-8编码。这个方法的好处是不用改任何文件缺点是每次启动都要先执行一次。Linux下一般没有这个问题因为Linux终端默认就是UTF-8。如果你发现Linux下Tomcat日志中文输出乱码多半是系统的locale设置有问题执行一下locale -a看有没有UTF-8相关的locale没有的话装上就是了。5.5 Tomcat启动正常但访问非常慢怎么办这个问题案例不算多但遇到了很折磨人。症状是Tomcat启动日志里显示启动成功了但是浏览器访问首页要等十几秒甚至几十秒。常见的原因有两个。一个是反向解析DNS的问题。Tomcat在启动时会尝试对来访的IP做反向DNS解析如果你的服务器无法正确解析DNS就会导致一定的延迟。解决方案是在server.xml里把enableLookups设置为falseConnector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 enableLookupsfalse /另一个原因是随机数生成阻塞。Tomcat在启动时会用SecureRandom生成随机数在某些虚拟机上这个操作会因为没有足够熵源而阻塞。解决方案是在catalina.sh里添加JAVA_OPTS指定使用非阻塞方式生成随机数JAVA_OPTS-Djava.security.egdfile:/dev/./urandom这个我在虚拟机里实测有效加了之后启动速度和访问速度都有明显提升。5.6 内存溢出和处理方式Tomcat跑久了日志里冒出OutOfMemoryError这时候就要调整JVM内存参数。这个问题的本质是Tomcat在JVM里运行JVM默认的内存上限可能不够用尤其是你部署了多个应用、或者应用本身数据量大的时候。调整方法是修改catalina.shWindows下是catalina.bat找到JAVA_OPTS添加如下参数JAVA_OPTS-Xms512m -Xmx1024m -XX:MaxPermSize256m-Xms是JVM初始堆内存大小-Xmx是JVM最大堆内存大小。注意-Xmx的值不要超过服务器物理内存的50%左右不然JVM启动时反而会因为分配不了足够的堆空间而报错。还有JDK 8之后PermSize已经没用了改成MetaspaceSize但这一步对绝大多数开发者来说不需要动Tomcat默认配置已经能跑起来大多数应用。注意改的是JAVA_OPTS而不是CATALINA_OPTS。通常这两个都行但JAVA_OPTS还会影响Tomcat用来做监控之类的内部工具如果只涉及运行时JVM参数写CATALINA_OPTS更精准。6. 部署第一个Web项目的完整流程看着这里走一遍配置讲完了怎么把项目部署到Tomcat里这边我再说一遍完整流程。因为很多人问的其实是我有个项目怎么放到Tomcat上跑起来这个流程比前面那些配置更直观也更贴近实际开发场景。6.1 开发环境下的war包部署在IDE里把项目打成war包。以IDEA为例在项目结构里设置好Artifact类型为Web Application Archive然后Build - Build Artifacts - Build就会在输出目录下生成一个war包。把你生成的war包直接复制到Tomcat的webapps目录下比如叫myapp.war。Tomcat检测到war包之后会自动解压并部署。你可以看到webapps目录下多了一个myapp文件夹这就是Tomcat解压出来的应用目录。然后你用浏览器访问http://localhost:8080/myapp看到项目首页就说明部署成功了。如果是Spring Boot项目你用的是内嵌Tomcat那根本不需要这一步。你直接java -jar运行jar包就行。但有些老项目、或者公司的部署规范要求用独立Tomcat跑war包那就需要你先在pom.xml里把打包方式改成war然后排除Spring Boot内置Tomcat依赖。这里有个坑Spring Boot的war包部署到Tomcat之后访问路径下会多一层class名称还是什么这其实是因为没有配置好Spring Boot的启动类继承SpringBootServletInitializer但我见过太多人在这个环节纠结半天了所以提醒一句。6.2 生产环境下的部署和更新生产环境部署war包的本质和开发环境一样差别在于你可能要处理Tomcat服务的注册、开机自启、日志切割这些问题。Linux下把Tomcat注册为systemd服务这样Tomcat就能开机自启、崩溃自动重启并且可以用systemctl管理。在/etc/systemd/system/tomcat.service里写一个配置指向你的Tomcat启动脚本[Unit] DescriptionApache Tomcat Web Application Container Afternetwork.target [Service] Typeforking EnvironmentJAVA_HOME/opt/java8 EnvironmentCATALINA_HOME/opt/apache-tomcat-9.0.80 ExecStart/opt/apache-tomcat-9.0.80/bin/startup.sh ExecStop/opt/apache-tomcat-9.0.80/bin/shutdown.sh Usertomcat Grouptomcat [Install] WantedBymulti-user.target设置完执行systemctl daemon-reload然后systemctl enable tomcat和systemctl start tomcat就能用了。这种方式比手工执行startup.sh方便得多也符合现代Linux服务的标准管理方式。更新war包的时候建议先停掉Tomcat再更新不然你直接覆盖正在被读取的war包很可能出现解压到一半的情况。最稳妥的流程是停止Tomcat - 删除旧的应用目录包括旧war包和已解压的文件夹- 放入新的war包 - 启动Tomcat。6.3 部署到Tomcat后访问404、静态资源加载不出来这个我想放在这一节最后说因为确实有代表性和普遍性。第一个场景是部署war包成功但是404。前面讲过一部分了这里再补充一点你访问http://localhost:8080/myapp打开的是404但直接访问http://localhost:8080/myapp/就能正常打开这其实是Tomcat默认没有把根路径映射到你的应用首页需要在应用的web.xml里补一个welcome-file-list配置welcome-file-list welcome-fileindex.html/welcome-file welcome-fileindex.jsp/welcome-file /welcome-file-list第二个场景是页面能打开但css/js/图片全部加载不出来。这个在浏览器F12里看Network标签会看到大量404一堆静态资源请求失败。原因一般有两个要么是项目里静态资源路径写成了/css/app.css这种绝对根路径而Tomcat在访问项目时多了一层项目名路径就要改成/myapp/css/app.css要么是前端引用的路径写相对路径写错了层级。这种问题没有一劳永逸的办法只能逐条排查。7. 写在最后的几点实在话Tomcat安装配置这件事说穿了其实不复杂它就是一套固定的流程装JDK - 配环境变量 - 解压Tomcat - 起服务 - 部署应用。大多数人卡住不是因为哪一步有多难而是对每一步背后依赖什么、报错信息说明什么缺少了解。你只要耐心把报错日志看明白把环境变量理清楚九成问题都能自己解决。要说我个人的体会最想强调的就是两件事。第一别怕看日志Tomcat的logs目录里躺着的不是天书是它告诉你怎么修它自己的说明书学会看日志比学会背所有配置项重要得多。第二服务器上的Tomcat和本地开发用的Tomcat配置思路侧重点完全不同本地可以开管理后台、开自动部署线上必须关掉这些安全永远是第一优先级。如果你照着这篇把Tomcat装起来了接下来最值得做的事是去试试部署一个带数据库的Java Web项目因为到那一步你才会真正面对一个应用服务器日常要处理的所有问题——连接池、上下文路径、跨域、字符集。至少在我“折腾”了这么多台服务器之后回头看踏踏实实把Tomcat基础打牢后面学Spring Boot也好、学微服务也好都会顺很多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →