使用Tomcat插件实现WEB项目热部署

Tomcat热部署可以通过网页操作进行,也可以通过指定插件进行。本文介绍的是通过使用tomcat7-maven-plugin将WEB项目热部署到指定服务器的Tomcat中,并对期间遇到的问题进行分析和记录。

文章目录

  • 使用Tomcat插件实现WEB项目热部署
    • 何为Tomcat热部署
    • 配置tomcat-users.xml文件
    • 配置项目pom文件
    • Tomcat热部署原理剖析
    • 用插件热部署取代CD
    • 总结

何为Tomcat热部署

把WEB部署到Tomcat下,一般是把war包放到Tomcat的webapp目录下,然后启动Tomcat,这样就完成了项目的部署。但这种方式属于冷部署,Tomcat需要关闭。当一个Tomcat下部署了多个项目时,如果有其他项目正在运行,显然不能通过冷部署的方式。

Tomcat热部署就是在Tomcat处于启动的状态下,Tomcat插件通过访问Tomcat-Manager提供的接口,把war通过网络传输的形式下载到webapp目录下并解压运行。其中Tomcat-Manager是Tomcat提供的一个热部署工具,在webapps/manager目录下。

配置tomcat-users.xml文件

在tomcat安装目录下找到tomcat-users.xml文件。该文件路径为

【tomcat安装根目录】/conf/。

修改文件内容,增加下列内容:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager,manager-gui,manager-script"/>

这里配置了一个admin用户,拥有manager-gui manager-script权限。GUI权限是通过网页访问Tomcat-Manager页面的权限,script是通过接口访问Tomcat-Manager页面的权限。

权限配置完成后启动Tomcat,访问以下链接http://localhost/manager/html应该能看到此页面:

配置项目pom文件

使用tomcat7-maven-plugin时,需要在项目的pom文件中引入插件配置:

<!-- tomcat7插件 -->
<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>${tomcat.version}</version><configuration><port>${webserver.port}</port><path>/${project.artifactId}</path><uriEncoding>${project.build.sourceEncoding}</uriEncoding><url>http://10.128.xxx.xxx:8080/manager/text</url><username>admin</username><password>admin</password></configuration>
</plugin>

注意我这里的配置和网上大部分的配置都不大一样,因为我没配置<server></server>节点。实际上我认为,该节点的配置是失败的根源!

按网上说法,server节点指定了远程服务器上Maven配置项中的设置,用于获取访问tomcat的用户名和密码。

这种说法实际上是很奇怪的,为什么访问Tomcat的密码需要从Maven的配置文件中获取?万一远程主机没有配置Maven怎么办?想弄清楚这些问题还得从热部署的原理入手,不能迷迷糊糊地人云亦云。

Tomcat热部署原理剖析

前文已说,Tomcat-Manager是Tomcat提供的热部署工具。按以下路径打开web.xml文件:webapps\manager\WEB-INF\web.xml,可以看到如下的配置:

<!-- Define a Security Constraint on this Application -->
<!-- NOTE:  None of these roles are present in the default users file -->
<security-constraint>
<web-resource-collection><web-resource-name>HTML Manager interface (for humans)</web-resource-name><url-pattern>/html/*</url-pattern>
</web-resource-collection>
<auth-constraint><role-name>manager-gui</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection><web-resource-name>Text Manager interface (for scripts)</web-resource-name><url-pattern>/text/*</url-pattern>
</web-resource-collection>
<auth-constraint><role-name>manager-script</role-name>
</auth-constraint>
</security-constraint>

Tomcat-Manager工具实际上就是一个WEB工程,对外暴露了Tomcat内部和部署相关方法的接口,而web.xml就是这个WEB工程的配置文件。在这里配置了拦截器、上传文件大小限制(默认war包最大50M)、响应请求的Servlet等。

tomcat7-maven-plugin知道远程主机地址的唯一方式是读取pom文件中的<url></url>标签,因为请求了/manager/text路径,因此请求会被拦截,并校验用户名和密码以及该用户的角色。

按照上节的配置直接在pom中指定用户名和密码的方式当然是没问题的,关键是<server>节点。经过上述分析,该节点应该是本地主机配置的节点,而不是在远程主机配置。插件读取本地配置后拿到用户名和密码,再用该用户名密码去访问远程主机的Tomcat服务!部分网文说不清楚这个问题的原因是没有在远程主机上部署Tomcat,不清楚区别!

用插件热部署取代CD

很多公司在进行代码管控时会要求CI/CD。正常情况下,CI结束后会生成一个war包,CD环节将该war包复制到测试环境,并利用脚本工具冷启动该war包。

这种方式当然没有问题,但现在了解了既然可以通过Tomcat插件实现热部署,为什么还需要CD呢?因为只需要在CI环节指定maven的操作为:tomcat7:redeploy。插件会自动帮我们把war包热部署到Tomcat服务器,并运行最新版的WEB工程。

总结

本文粗略地介绍了使用Tomcat插件热部署WEB工程的方式,并对主要踩坑点进行了剖析。希望本文能给希望进行热部署的朋友带来一点新的思考,避免被网上众多的错误文章误导!

需要注意的是,本文所描述的热部署方式主要针对非SpringBoot工程,因为对于SpringBoot工程来说,项目编译完成后就是一个jar包,直接命令行启动就可以了。

使用Tomcat插件实现WEB项目热部署相关推荐

  1. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  2. IDEA创建Web项目及部署Tomcat

    IDEA创建Web项目及部署Tomcat 说明:本文章适用于IDEA2020及以后版本 操作 IDEA创建Web项目及部署Tomcat:IDEA2020创建Web项目(及部署Tomcat) 细节补充 ...

  3. java web项目自动部署到Tomcat的原因

    关于eclipse中MAVEN WEB工程中编译问题 这几天是被java的环境搞疯了,我先是搭了一个spring+springmvc+mybatis的工程,在家里跑了一下,没有问题,把工程带到公司里用 ...

  4. Eclipse中的Web项目自动部署到Tomcat

    2019独角兽企业重金招聘Python工程师标准>>> 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错 ...

  5. 如何在IDEA中创建web项目并且部署到Tomcat中

    如何在IDEA中创建web项目并且部署到Tomcat中 步骤1:File->New Project, 步骤2:选择Project SDK为1.7 -> Next -> Finish( ...

  6. IDEA从零到精通06之创建web项目及部署tomcat运行

    文章目录 作者简介 引言 导航 热门专栏推荐 视频讲解 概述 一.创建web项目 二.修改部署信息 三.启动服务 四.关闭服务 五.创建Servlet并访问 六.引入第三方jar包 小结 导航 热门专 ...

  7. Spring Boot(二)——项目热部署与程序发布

    一.项目热部署 1.1 配置依赖 ① pom.xml加入devtools依赖,如果scope是provided则无法实现热部署,参考. <dependency><groupId> ...

  8. SpringBoot项目热部署配置

    SpringBoot配置热部署后修改代码, 无需重启即可看到修改效果. pom引入spring-boot-devtools依赖 <!--SpringBoot热部署配置 --> <de ...

  9. springboot项目热部署

    原理 非springboot项目热部署实现原理:服务器去监控其中加载的应用,发现产生了变化就重新加载一次. springboot项目热部署实现原理:基于springboot开发的web工程其实有一个显 ...

最新文章

  1. 获取Linux/Unix文件系统信息
  2. Transform-style和Perspective属性
  3. 【ACM】杭电OJ 1241(深度优先搜索小结)
  4. oracle 动态sql列转行_SQL优化笔记分享:34条实用经验可别错过!
  5. 三千多天之前我没有编辑完的技术文档
  6. 关于 NIO 你不得不知道的一些“地雷”
  7. leetcode275. H指数 II(二分法)
  8. linux系统分析工具续-SystemTap和火焰图(Flame Graph)
  9. elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器
  10. python循环练习_Python循环练习
  11. Java中super的用法 ____简单粗暴
  12. vijos P1001 谁拿了最多奖学金
  13. (CVPR2019)图像语义分割(22) FickleNet-使用随机推理的用于弱监督和半监督的图像语义分割
  14. SQL : INSTEAD OF触发器的工作过程
  15. c语言中正弦函数的定义,三角函数基本概念 | 玄数
  16. 关于如何免费下载专利、英文文献等?
  17. Redis Lua 列表批量操作
  18. 同花顺服务器维护,同花顺云端服务器
  19. 计算机二级msoffice设计,2017计算机二级MSoffice攻关必做题
  20. Linux环境Hadoop的下载安装

热门文章

  1. JS逆向——裁判文书网(详细图文步骤)
  2. 【go get】下载的包放在哪里了?
  3. Echarts 雷达图 鼠标移入标签名 显示悬浮框
  4. sass与scss的区别
  5. 案桌 通知栏 notification
  6. 使用FileZilla配置FTP服务器
  7. 高一计算机专业班主任工作总结,高一年级第一学期班主任工作总结
  8. 01.消消乐填充的算法
  9. 出现`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js`报错
  10. vijos 1221 神秘配方 题解