将 Java 程序部署到 Windows Server 的 Tomcat 上,本质上是把编译好的 .war 包放到 Tomcat 的 webapps 目录下。但在生产环境或实际运维中,为了稳定性和可维护性,通常不会直接改 Tomcat 原生目录,而是采用更规范的方式。
下面按标准流程、关键配置和常见坑点三个部分拆解,尽量贴近实战经验。
一、 前期准备:环境与产物
- Java 环境
Windows Server 上需要安装 JDK(推荐 JDK 8 或 JDK 11/17,取决于你的项目要求)。确保JAVA_HOME环境变量已正确配置,且java -version能正常输出。 - Tomcat 版本
下载对应版本的 Tomcat(如 Tomcat 9.x 或 10.x),解压到一个无中文、无空格的目录,例如D:ApacheTomcat9。 - 打包产物
本地开发完成后,使用 Maven 执行mvn clean package,在target/目录下生成.war文件。注意:如果是 Spring Boot 项目,默认打出来的是可执行 jar,但若要部署到外部 Tomcat,需在pom.xml中设置<packaging>war</packaging>并排除内嵌 Tomcat。
二、 标准部署步骤(推荐方式)
步骤 1:停止 Tomcat
如果 Tomcat 正在运行,先通过命令行或任务管理器停止服务,避免文件占用冲突。
cd D:ApacheTomcat9bin
shutdown.bat
步骤 2:部署 WAR 包
有两种主流做法:
-
方式 A:直接放入 webapps(简单粗暴)
将你的xxx.war复制到D:ApacheTomcat9webapps目录下。
Tomcat 启动时会自动解压该 war 包,并在webapps下生成同名文件夹。访问路径为http://ip:port/xxx/。 -
方式 B:独立部署目录(推荐,便于管理)
在conf/Catalina/localhost/目录下新建一个 XML 文件,文件名与你的应用名一致,例如myapp.xml,内容如下:<Context docBase="D:/myapp/webapps/myapp" reloadable="false" />然后在指定路径(如
D:/myapp/webapps/myapp)手动解压你的 war 包(或直接放 war 包并用docBase指向它)。这种方式的好处是:即使重启 Tomcat,也不会因为自动解压失败导致混乱,且可以自定义上下文路径。
步骤 3:启动 Tomcat
startup.bat
观察日志文件 logs/catalina.out 或 logs/localhost.xxx.log,确认是否有报错。如果看到类似 Deploying web application directory 的日志,说明部署成功。
步骤 4:验证访问
浏览器访问:http://<服务器IP>:8080/your-app-name/
三、 关键配置与避坑指南
1. 编码问题(最常见坑)
Windows 系统默认编码可能是 GBK,而 Java Web 项目通常期望 UTF-8。若出现中文乱码,需修改 server.xml 中的 Connector 配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
同时,在 web.xml 中添加过滤器强制统一编码:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. 内存溢出(OutOfMemoryError)
Windows 下 Tomcat 默认堆内存较小。编辑 bin/setenv.bat(若不存在则新建),设置 JVM 参数:
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
注意:Linux 下是
setenv.sh,Windows 必须是.bat格式。
3. 端口冲突
若 8080 被占用,修改 server.xml 中的 Connector port="8080" 为其他端口,如 8081。
4. 权限问题
确保 Tomcat 安装目录及部署目录对当前运行用户有读写权限。建议以管理员身份运行 CMD 启动 Tomcat,或将 Tomcat 注册为 Windows 服务并配置适当的服务账户。
5. 热部署 vs 冷部署
- 热部署:修改代码后无需重启,但生产环境严禁开启
reloadable="true",会严重影响性能。 - 冷部署:每次更新都替换 war 包并重启 Tomcat,稳定可靠,适合生产环境。
四、 进阶建议:如何像专业人士一样操作?
-
不要直接用桌面双击启动 Tomcat
建议使用 Windows 服务管理器(services.msc)将 Tomcat 注册为后台服务,这样开机自启、崩溃自动重启更可控。可使用service.bat install命令完成注册。 -
日志分离
将不同应用的日志分开存放,便于排查问题。可在context.xml中配置Valve实现每日切割日志。 -
安全加固
- 修改默认账号密码(
conf/tomcat-users.xml) - 删除
webapps下的示例应用(如docs,examples,host-manager,manager),防止信息泄露 - 限制管理接口仅允许内网访问
- 修改默认账号密码(
-
监控与健康检查
部署完成后,务必做压力测试和异常注入测试,确保在高负载下不宕机。可结合 Prometheus + Grafana 监控 JVM 指标。
总结
| 步骤 | 操作要点 |
|---|---|
| 打包 | 确保生成 .war,非 fat jar |
| 放置 | webapps 直放 或 conf/Catalina/localhost/*.xml 独立部署 |
| 配置 | 设置 URIEncoding="UTF-8",调整 JVM 内存 |
| 启动 | 用 startup.bat 或 Windows 服务启动 |
| 验证 | 查看 catalina.out 日志,无报错即成功 |
如果你遇到具体报错(如 ClassNotFoundException、Port already in use),请提供完整日志片段,我可以帮你精准定位。
云技术博客