如何远程部署应用到Tomcat

技术如何远程部署应用到Tomcat如何远程部署应用到Tomcat,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前几天有人在群里提了个问题:怎么样通过程序

如何将远程部署应用到Tomcat上,针对这个问题,本文详细介绍了相应的分析和解答,希望能帮助更多想要解决这个问题的小伙伴找到更简单更容易的方法。

前几天有人在:群里问了一个问题。

如何通过程序将应用部署到Tomcat中?

工作比较忙,没有问具体的使用场景,提供了使用JMX接口的思路。后来提问者说不太了解JMX,就在网上搜了一些看了一下,比较混乱。

这次我不打算详细描述JMX是如何使用的,而是整理了Tomcat远程部署应用的几种方式,方便有类似需求的朋友。

说起应用部署,熟悉Tomcat的人都知道,它默认包含一个manager应用,有很多功能,包括应用部署,无论是目录部署还是文件部署。

开始写微信官方账号的时候,我介绍了一个小经理应用:深入Tomcat的经理。

这里请注意,manager应用程序的使用默认是受限的,只能在本地访问,所以如果想远程使用manager将应用程序部署到目标服务器,需要在content.xml中进行修改,可以参考前面的老文:为什么你的Manager登录不成功?

之后的配置和manager的本地使用一样,可以直接使用部署功能,不再赘述。让我们以接口的形式来讨论远程部署。

在管理器应用中,我们在页面上看到的一般称为HTML界面,还有一个文本界面,可以根据URL中指定的命令和参数执行相应的动作。

格式如下所示:

http://{主机} : {端口}/管理器/文本/{命令}?{参数}

而主机和端口到你的目标主机和端口,命令代表你执行的操作,而参数是命令需要的参数。

支持的命令很多,下图是managerServlet中部分代码的截图。

如何远程部署应用到Tomcat

当然,没有我们想说的拦截deploy's的命令。我们将单独讨论这个订单。对应于我们前面提到的应用程序,url类似于:

http://localhost :8080/经理/文字/deploypath=/你好war=d :/ABC . war

在这里,指定应用程序在磁盘上的存储路径和应用程序名称,就可以部署应用程序了。

部署结果如下所示:

确定-在上下文路径/你好部署应用程序

这里也支持应用程序的多版本部署,只需在参数中添加version即可。

让我们看看源代码,看看这个部署表单是如何实现的。

如何远程部署应用到Tomcat

让我们看看红色方框标记的三个地方,这是整个部署逻辑的重点。

首先,将应用程序添加到服务中,以表示注册的服务。将首先检查以后的部署,不在此列表中的部署将被允许。

将远程应用程序包复制到本地目录。

触发部署逻辑,实际部署。

需要注意的是,第一步和第三步实际上是通过JMX接口进行的。例如,检查方法的内容如下:

如何远程部署应用到Tomcat

这里的MBean服务器是注册JMX所有MBean对象的服务点。连接到MBeanServer后,其背后的逻辑和反射有些相似。只需指定对象名,然后指定方法名和参数。

如何远程部署应用到Tomcat

我们这里的ObjectName是catalina : host=locahost,type=deployer’。

打完支票后,

最终会调用到HostConfig类的check方法,从而触发部署流程,进行应用的部署。完整的部署过程请参考前面的文章:

如何在Tomcat中部署应用的多个版本

WEB应用是怎么被部署的?

Tomcat集群应用部署功能实现分析

所以,如果你想自己造个轮子来实现远程部署的时候,也可以参考这种使用JMX的方式。

另一种方式

之前介绍过IDE内Tomcat工作方式时描述过IDEA里在向Tomcat部署应用时是怎么样通过JMX进行的(你一定不知道IDE里的Tomcat是怎么工作的!)。

在IDEA里,向tomcat部署一个应用,启动时,其实并不会在本地的tomcat中找到该应用的目录,或者实际运行的目录下有该应用。仔细观察发现,IDEA是通过Tomcat的MBean,动态的向tomcat增加了一个Context,即一个应用。这样直接指定了应用的路径,访问路径等

例如下面的调用链:

TCP Connection(2)-127.0.0.1@1379 daemon, prio=5, in group 'RMI Runtime', status: 'RUNNING'
at org.springframework.web.context.ContextLoaderListener.<init>(ContextLoaderListener.java:98)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1585)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at java.lang.Thread.run(Thread.java:745)

也就是根据实际路径path,docBase这些构造一个StandardContext,并添加到Host中,对外提供服务。

以上,是几种通过JMX可以动态远程部署的方式,供参考。当然如果想用更直接一些的方式,在代码里控制应用的copy,然后控制Tomcat进程自动重启,也可以啦。

关于如何远程部署应用到Tomcat问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/102828.html

(0)

相关推荐

  • mysqld got signal举例分析

    技术mysqld got signal举例分析这篇文章主要介绍“mysqld got signal举例分析”,在日常操作中,相信很多人在mysqld got signal举例分析问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年11月19日
  • 数据中心IP代理和住宅IP代理的区别是什么

    技术数据中心IP代理和住宅IP代理的区别是什么本篇文章为大家展示了数据中心IP代理和住宅IP代理的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代理按来源分,可根据中央

    攻略 2021年11月11日
  • Java Spring Boot怎样彻底解决SSM配置问题

    技术Java Spring Boot怎样彻底解决SSM配置问题Java Spring Boot怎样彻底解决SSM配置问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来

    攻略 2021年10月31日
  • jmeter的if控制器怎么使用

    技术jmeter的if控制器怎么使用这篇文章主要介绍“jmeter的if控制器怎么使用”,在日常操作中,相信很多人在jmeter的if控制器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月9日
  • 十二节气顺口溜,二十四节气的顺口溜怎么说

    技术十二节气顺口溜,二十四节气的顺口溜怎么说《二十四节气歌》 春雨惊春清谷天十二节气顺口溜,夏满芒夏暑相连, 秋处露秋寒霜降,冬雪雪冬小大寒。 二十四节气,是中国古代人们用来分辨节气的时间及指导农事的一种方法。二十四节气

    生活 2021年10月21日
  • python閲岀殑list(python list 鏂规硶)

    技术Python中的List2怎么添加这篇文章主要介绍“Python中的List2怎么添加”,在日常操作中,相信很多人在Python中的List2怎么添加问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年12月16日