使用Tomcat插件实现WEB项目热部署
使用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项目热部署相关推荐
- [转]Eclipse中的Web项目自动部署到Tomcat
原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...
- IDEA创建Web项目及部署Tomcat
IDEA创建Web项目及部署Tomcat 说明:本文章适用于IDEA2020及以后版本 操作 IDEA创建Web项目及部署Tomcat:IDEA2020创建Web项目(及部署Tomcat) 细节补充 ...
- java web项目自动部署到Tomcat的原因
关于eclipse中MAVEN WEB工程中编译问题 这几天是被java的环境搞疯了,我先是搭了一个spring+springmvc+mybatis的工程,在家里跑了一下,没有问题,把工程带到公司里用 ...
- Eclipse中的Web项目自动部署到Tomcat
2019独角兽企业重金招聘Python工程师标准>>> 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错 ...
- 如何在IDEA中创建web项目并且部署到Tomcat中
如何在IDEA中创建web项目并且部署到Tomcat中 步骤1:File->New Project, 步骤2:选择Project SDK为1.7 -> Next -> Finish( ...
- IDEA从零到精通06之创建web项目及部署tomcat运行
文章目录 作者简介 引言 导航 热门专栏推荐 视频讲解 概述 一.创建web项目 二.修改部署信息 三.启动服务 四.关闭服务 五.创建Servlet并访问 六.引入第三方jar包 小结 导航 热门专 ...
- Spring Boot(二)——项目热部署与程序发布
一.项目热部署 1.1 配置依赖 ① pom.xml加入devtools依赖,如果scope是provided则无法实现热部署,参考. <dependency><groupId> ...
- SpringBoot项目热部署配置
SpringBoot配置热部署后修改代码, 无需重启即可看到修改效果. pom引入spring-boot-devtools依赖 <!--SpringBoot热部署配置 --> <de ...
- springboot项目热部署
原理 非springboot项目热部署实现原理:服务器去监控其中加载的应用,发现产生了变化就重新加载一次. springboot项目热部署实现原理:基于springboot开发的web工程其实有一个显 ...
最新文章
- 获取Linux/Unix文件系统信息
- Transform-style和Perspective属性
- 【ACM】杭电OJ 1241(深度优先搜索小结)
- oracle 动态sql列转行_SQL优化笔记分享:34条实用经验可别错过!
- 三千多天之前我没有编辑完的技术文档
- 关于 NIO 你不得不知道的一些“地雷”
- leetcode275. H指数 II(二分法)
- linux系统分析工具续-SystemTap和火焰图(Flame Graph)
- elasticsearch-7.15.2 同时支持中文ik分词器和pinyin分词器
- python循环练习_Python循环练习
- Java中super的用法 ____简单粗暴
- vijos P1001 谁拿了最多奖学金
- (CVPR2019)图像语义分割(22) FickleNet-使用随机推理的用于弱监督和半监督的图像语义分割
- SQL : INSTEAD OF触发器的工作过程
- c语言中正弦函数的定义,三角函数基本概念 | 玄数
- 关于如何免费下载专利、英文文献等?
- Redis Lua 列表批量操作
- 同花顺服务器维护,同花顺云端服务器
- 计算机二级msoffice设计,2017计算机二级MSoffice攻关必做题
- Linux环境Hadoop的下载安装
热门文章
- JS逆向——裁判文书网(详细图文步骤)
- 【go get】下载的包放在哪里了?
- Echarts 雷达图 鼠标移入标签名 显示悬浮框
- sass与scss的区别
- 案桌 通知栏 notification
- 使用FileZilla配置FTP服务器
- 高一计算机专业班主任工作总结,高一年级第一学期班主任工作总结
- 01.消消乐填充的算法
- 出现`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js`报错
- vijos 1221 神秘配方 题解