在 Debian 上实现 JSP 热部署
一 环境准备
- 安装 OpenJDK 11 与 Tomcat 9(Debian 11/12 仓库可直接安装):
- sudo apt update
- sudo apt install openjdk-11-jdk tomcat9 tomcat9-admin
- sudo systemctl start tomcat9 && sudo systemctl enable tomcat9
- 验证:java -version 与 systemctl status tomcat9。以上为后续热部署的基础运行环境。
二 方案一 使用 Tomcat 自动与开发期热加载
- 自动部署(无需重启 Tomcat)
- 确保 /etc/tomcat9/server.xml 中 Host 配置包含:appBase=“webapps”、unpackWARs=“true”、autoDeploy=“true”。将 WAR 放入 /var/lib/tomcat9/webapps/ 后,Tomcat 会自动解压并部署。
- 开发期热加载(修改类/资源自动重加载)
- 在 /etc/tomcat9/context.xml 的 上设置 reloadable=“true”,Tomcat 会监测 WEB-INF/classes 与 WEB-INF/lib 的变化并触发应用重载。注意:这会引入一定运行时开销。
- 快速验证
- 部署应用后访问页面,修改任意 .jsp 或类文件并保存,刷新页面观察生效情况(JSP 通常立即可见,类变更取决于 reloadable 触发)。
三 方案二 IDE 与构建工具联动实现热部署
- IntelliJ IDEA(开发期零停机)
- Run/Debug Configurations → Tomcat Server → Local,Deployment 选择项目 Artifact;将 On ‘Update’ action 与 On frame deactivation 设为 Update classes and resources;勾选 Build project automatically;在 Registry 中启用 compiler.automake.allow.when.app.running。保存后,修改 JSP/资源即可热更新。
- Maven 插件远程热部署(CI/CD 或本地一键)
- Tomcat 侧:在 conf/tomcat-users.xml 为管理接口创建用户并赋予角色 manager-script(如需 Web 管理界面再加 manager-gui):
- Maven 侧:在 pom.xml 配置 tomcat7-maven-plugin(示例):
-
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
http://localhost:8080/manager/text
tomcat-deploy
/your-app
- 在 settings.xml 的 中配置 server 的 id/tomcat-deploy 与用户名密码。
- 常用命令:首次部署用 tomcat7:deploy,后续更新用 tomcat7:redeploy;如遇 401/403,检查用户权限与 manager 接口路径(文本接口为 /manager/text)。
四 方案三 使用 Jetty 实现热部署
- 安装与部署
- sudo apt install jetty9
- 将 WAR 放入 /var/lib/jetty9/webapps/,Jetty 会自动解压部署。
- 自动重载
- 在 /etc/default/jetty9 中设置 JETTY_RELOAD=automatic,使应用在类/资源变更时自动重载。
五 注意事项与最佳实践
- 性能与稳定性
- reloadable=“true” 与自动扫描会带来额外开销,建议仅在开发/测试环境启用;生产环境优先使用 autoDeploy 的 WAR 热替换或灰度发布。
- 热部署与热加载的区别
- 热加载:重新加载类,通常不清除 Session,适合开发调试。
- 热部署:重新加载整个应用,通常会清空 Session,更干净但影响面更大。
- 高级热替换
- 需要更细粒度的代码热替换(含类结构变更)可考虑 JRebel 等第三方工具。
- 反向代理与前端
- 若使用 Apache HTTP Server + mod_jk 前置,热部署对前端透明;确保 AJP/HTTP 连接与 worker 配置正确,避免影响热更新流程。