简介:apache-tomcat-9.0.55-windows-x64位官方版是Apache Tomcat 9系列面向64位Windows系统的官方发行包,主要供Java Web开发者在开发、测试及生产环境部署Servlet/JSP应用,也适合新手通过实际目录结构理解Tomcat运行机制。压缩包共641个文件,涵盖html静态页面、class与jar运行库、java源码、jsp示例、xml配置、bat/sh启停脚本及exe可执行文件等,整体大小12.25MB。9.0.55版本基于Java EE 8规范,支持Servlet 4.0、JSP 2.3等标准,并包含最新安全补丁。已有906人学习下载,资源包含完整Tomcat目录,如bin下的startup.bat/shutdown.bat脚本、conf下的server.xml与tomcat-users.xml安全配置、webapps示例应用以及日志与临时目录,可支撑从环境搭建、应用部署到端口与角色权限设置的全流程练习。适合想系统掌握Tomcat配置、部署和常见优化方法的Java学习者使用。 如果你手里正好有一份apache-tomcat-9.0.55-windows-x64压缩包,那你多半是准备在 Windows 上搭一套 Java Web 运行环境。作为一个从 Tomcat 6 时代一路折腾过来的老开发,我可以负责任地说:这个包看起来只是个 zip,但背后涉及的配置细节,足够让新手踩一整天坑。这篇文章我就把从解压到实战部署的全流程拆开讲一遍,端口怎么改、内存给多大、中文乱码怎么治、war 包怎么扔,一条线给你捋顺。
Tomcat 是什么、能做什么,一句话就能说明白:它是一个开源的 Servlet 容器,也是一个 HTTP 服务器。你写好的 Java Web 程序(Servlet、JSP、Spring Boot 打出来的 war),最终都要扔到它里面,由它监听端口、接收请求、调用你的代码,再把结果返回给浏览器。这个压缩包装的就是这么个东西。适合谁?刚学 JavaWeb 的学生、要接手维护老项目的新人、以及需要在 Windows 本地搭一套测试环境的开发者,都是它的目标用户。
1. 这个包到底是干嘛的:先搞清楚 Tomcat 的定位
1.1 为什么推荐 9.0.55 这个版本
Tomcat 版本很多,8.5、9.0、10.0、11.0 各有各的坑。9.0.55 属于 Tomcat 9 里一个比较稳的版本,官方支持 Servlet 4.0、JSP 2.3、EL 3.0、WebSocket 1.1 这些规范,对应 Java EE 8 的体系。相比 8.5,它在 HTTP/2、安全方面有不少改进;相比 10 以后的版本,又避开了javax.servlet换成jakarta.servlet这个让老项目集体翻车的包名迁移问题。
一句话总结这个选型:如果你在维护一个用 Spring 5 / Spring Boot 2.x 写的项目,或者课程设计、毕业设计打包出来的 war 包,Tomcat 9.0.55 是最省心的选择。它不挑 JDK,JDK 8 到 17 都跑得动,兼容性极广。下载的时候注意认准 windows-x64,32 位老系统就换 32 位包,不过现在基本上都是 64 位了。
1.2 谁需要这个东西
如果你是纯前端开发,那确实用不上它;但只要你做 Java 后端,或者哪怕只是把学长留下的老项目跑起来,Tomcat 基本绕不开。很多人学习阶段用 IDEA 自带 Tomcat,工作之后才发现生产环境还得自己动手装。还有一类人需要它:运维小白刚接手一台 Windows Server,需要把一个 Java 站点跑起来,这时候最直接的办法就是解压一份 Tomcat 包,配好 JDK 就开始部署。
2. 环境准备与安装:从解压到跑起来
2.1 先确认 JDK 版本
这一步太关键了,我见过太多人双击 startup.bat 一闪而过,最后发现是 JDK 没装。Tomcat 本质是 Java 程序,没有 JDK 它根本起不来。打开命令行敲一下:
java -version如果提示找不到命令,说明 JDK 没装或者没配环境变量。Tomcat 9 要求 JDK 8 及以上,这里有个细节:强烈建议装 JDK 而不是只装 JRE。虽然 Tomcat 本身跑起来只需要 JRE,但 JSP 首次访问时需要动态编译,没有完整的 JDK 编译器,有些环境会给你报莫名的错。Windows 下把JAVA_HOME指向 JDK 安装目录,一般在C:\Program Files\Java\jdk1.8.0_xx这样的位置。
2.2 解压、环境变量与目录结构
拿到apache-tomcat-9.0.55-windows-x64.zip后,不要解压到带中文或带空格的路径,这个坑我踩过:D:\Program Files\Tomcat这种路径在解析某些配置时容易出幺蛾子,建议直接放D:\tomcat9这种纯英文短路径。顺带说一句,下载尽量走官方渠道,别在乱七八糟的下载站找“优化版”“绿色版”,那种被改过的包指不定夹带什么私货。
解压完目录结构是这样的:
bin:启动、关闭脚本都在这里,还有 Windows 服务注册脚本 service.bat。conf:全局配置文件所在地,server.xml、web.xml、tomcat-users.xml 都在这里。lib:Tomcat 自身依赖的 jar 包,也是公共类库目录。logs:所有日志输出在这里,排错第一站。temp:运行时的临时文件目录。webapps:默认的应用部署根目录,war 包直接扔这里就能被识别。work:JSP 编译后的 class 文件缓存目录,改完 JSP 不生效时清这里。
不配CATALINA_HOME环境变量也能跑,我的建议是:本地测试完全不用配,但如果你想在任意目录敲startup.bat或者用脚本化方式管理,那就配一下,指到 Tomcat 解压根目录即可。
2.3 启动验证
双击bin\startup.bat,会弹出一个黑窗口,看到类似下面的输出就是起来了:
Server startup in [xxx] milliseconds然后浏览器访问http://localhost:8080,看到默认首页就代表成功。如果你双击后窗口一闪而过,不要慌,这是最常见的坑,后面第 5 节专门讲怎么排查。如果想要更直观的启动方式,也可以在命令行里手动执行catalina.bat run,这样日志会直接打到当前窗口,排查问题比 startup.bat 好用得多。
3. 核心配置实操:端口、内存、编码一次讲清
3.1 端口怎么改不踩坑
默认端口是 8080,但 8080 太容易被别的程序抢占。改端口的入口在conf\server.xml里,搜Connector节点,默认长这样:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />把port改成你想要的,比如 8088。这里有个绝大多数人不知道的坑:server.xml 里除了这个 HTTP Connector,还有两个端口也很关键,一个是 8005(关闭 Tomcat 的监听端口),一个是 8009(AJP 端口)。如果你的服务器同时跑多个 Tomcat 实例、或者某些组件要占用这些端口,光改 8080 是不行的,8005、8009 冲突了照样启动失败。所以稳妥的做法是改之前先看这几个端口都被谁占用了:
netstat -ano | findstr :8080 netstat -ano | findstr :8005 netstat -ano | findstr :8009改完端口记得重启 Tomcat,日志里会明确告诉你实际监听的是哪个端口。
3.2 JVM 内存参数该给多大
这一节是给生产环境用的。默认情况下 Tomcat 启动用的 JVM 堆内存偏小,逻辑上够用,但一旦并发上来或者应用里面有大量缓存,立刻就会报OutOfMemoryError: Java heap space。改内存的正确姿势不是去改 catalina.bat,而是新建一个setenv.bat放在bin目录下。Tomcat 启动时会自动检测bin\setenv.bat是否存在,存在就先执行它。这样最大的好处是:以后升级 Tomcat、替换整个目录,你的配置不用重新改。
写一个最小可用版本:
set "JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=256m"这里的-Xms是初始堆大小,-Xmx是最大堆大小。生产环境我的经验是两者设成一样的值,比如都设 2048m,避免 JVM 在运行过程中频繁扩容和收缩,带来不必要的性能抖动。至于给多大,没有标准答案,取决于机器总内存和应用负载。一个参考:总内存 8G 的机器,Tomcat 给 2G 算起步;总内存 16G,给 4G 也不过分。别把整台机器的内存都塞给 Tomcat,操作系统和别的进程也要活。
3.3 中文乱码的根源与根治
Windows 上跑 Tomcat 几乎必遇乱码,说多了都是泪。乱码通常分两种:第一种是控制台启动日志乱码,第二种是页面或接口返回的中文乱码。
控制台乱码的原因很直接:Windows 命令行默认编码是 GBK,而 Tomcat 9.0.55 的日志输出默认走 UTF-8,两边对不上自然全是方框。处理办法是改conf\logging.properties,把下面这行的编码改成 GBK 或者直接注释掉:
java.util.logging.ConsoleHandler.encoding = UTF-8如果你是访问页面出现中文乱码,那就得上server.xml的 Connector 节点加一个参数:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" />URIEncoding控制的是 URL 里的中文参数编码,GET 请求中文乱码基本都是这个没配。POST 请求的乱码则要检查应用代码里的过滤器,那是应用层的活,Tomcat 管不了。
4. 项目部署与日常运维
4.1 WAR 包部署的三条铁律
war 包是最常见的部署形式。把 xxx.war 拷到webapps目录下,Tomcat 会自动解压成同名目录并启动应用。经验告诉我,war 包部署有三条铁律:
第一,war 包的名字就是应用的访问路径。demo.war部署后访问地址是http://localhost:8080/demo/,想换路径就改文件名。第二,更新包之前先把 Tomcat 停掉再替换 war 包,否则 Windows 上文件被锁定,替换会失败,或者解压出一半就启动导致各种诡异问题。第三,如果替换后还是跑旧代码,把webapps下对应解压目录和work目录都删掉再重启,保证重新编译。
4.2 把项目目录放到 webapps 外面
webapps 目录不是唯一的部署位置。如果你不想把项目文件堆在 Tomcat 目录里(很多公司是这样:代码放数据盘,Tomcat 放系统盘),可以用虚拟目录方式。在conf\server.xml的 Host 节点里加:
<Context path="/myapp" docBase="D:\projects\myapp" reloadable="true" />这里的path是浏览器访问的上下文路径,docBase是实际项目目录的绝对路径。加了reloadable="true"后,WEB-INF 下 class 文件变了会自动重新加载,开发调试很方便,但生产环境通常不建议开,会拖性能。改完 server.xml 必须重启 Tomcat 才生效。
4.3 注册成 Windows 服务实现开机自启
本地怎么折腾都行,但如果部署在服务器上,你不可能每次都远程登录去点 startup.bat。把 Tomcat 注册成 Windows 服务才是正经做法。用管理员权限打开命令行,进入bin目录执行:
service.bat install Tomcat9执行成功后,去 Windows 服务管理里能看到一个名为 Tomcat9 的服务,把启动类型改成“自动”,重启服务器后 Tomcat 就能自己起来。这里注意两点:一是必须管理员权限,否则注册报错;二是服务模式下 Tomcat 的工作目录、用户环境变量和手动启动不一样,如果之前靠setenv.bat配置了 JAVA_OPTS,确认路径和内容没问题。
5. 常见问题速查表与排查技巧
5.1 启动闪退
闪退是新手最常见的问题,原因九成出在环境变量上。双击 startup.bat 一闪而过,别指望窗口给你看报错,直接在命令行里手动执行:
catalina.bat run这样错误信息会停留在窗口里。常见报错无非几种:JAVA_HOME设置不正确、JDK 版本不兼容、端口被占用。按图索骥,大部分能当场解决。
5.2 端口被占用
如果日志里看到Address already in use: JVM_Bind,那就是端口被占了。排查办法:
netstat -ano | findstr 8080拿到占用进程的 PID 后,再用tasklist | findstr PID看是谁,确认不是系统关键服务就直接taskkill /pid PID /f。如果你不想动那个进程,那就改 Tomcat 的端口,两个方向撞一个合适的都行。
5.3 内存溢出
日志里出现java.lang.OutOfMemoryError: Java heap space,第一反应是堆内存不够,按 3.2 节的方法调大-Xmx。另一种常见的溢出是Metaspace,通常是加载的类太多或者有类加载器泄漏,对应调大-XX:MetaspaceSize。如果调大内存后仍然持续溢出,那就别硬扛了,用jmap -dump抓一份堆转储文件,用 MAT 分析一下业务代码是不是在疯狂存引用不释放。光加内存治标不治本的情况我遇到过太多次。
5.4 部署后 404
war 包放了,Tomcat 也起来了,但访问一直 404。我总结出来四条路依次排查:第一,确认访问路径对不对,demo.war访问的是/demo/不是根路径;第二,去webapps下看有没有 war 对应的解压目录,如果没解压出来,多半是 war 包损坏或者磁盘权限问题;第三,打开logs\localhost.日期.log,这里面记录着每次应用部署的启动过程,任何异常都有线索;第四,如果之前部署过同名应用,先清掉work下的缓存再重启。
最后分享一个我自己的习惯:每次拿到一份apache-tomcat-9.0.55-windows-x64包,第一时间不是去解压,而是先建一份部署清单,记下三件事——JDK 版本、要改的端口、期望的内存大小。就这几行字,能省下后面排查问题的很多时间。还有个小技巧,把webapps里默认的ROOT换成你自己的应用,访问http://localhost:8080就能直接进项目,省去输入一堆路径的麻烦。Tomcat 这个东西,用熟了你会觉得它平淡无奇,但每个坑都踩过一遍之后,你才真正敢说会用。
本文还有配套的精品资源,点击获取