如何远程部署应用到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)

相关推荐

  • keep it up许慧欣(keepitmac官网)

    技术Keep It for Mac专业笔记工具怎么用本篇文章为大家展示了Keep It for Mac专业笔记工具怎么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Mac笔记办

    攻略 2021年12月24日
  • leetcode滑动窗口(leetcode滑动窗口万能公式)

    技术LeetCode怎样找出滑动窗口的最大值小编给大家分享一下LeetCode怎样找出滑动窗口的最大值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一

    攻略 2021年12月15日
  • springboot 发送邮件模板(springboot集成实现邮件发送功能)

    技术springboot如何整合邮件发送功能这篇文章给大家介绍springboot如何整合邮件发送功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 pom依赖

    攻略 2021年12月23日
  • javascript正则表达式怎么写

    技术javascript正则表达式怎么写本篇内容介绍了“javascript正则表达式怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年11月26日
  • sqliteinsert影响什么(sqliteupdate和insert性能)

    技术SQLite中特殊的INSERT语句怎么用小编给大家分享一下SQLite中特殊的INSERT语句怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SQLite中特殊的INSERT语句在SQLite

    攻略 2021年12月18日
  • Eclipse如何汉化

    技术Eclipse如何汉化这篇文章给大家分享的是有关Eclipse如何汉化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、安装好Eclipse2、下载专门负责 Eclipse 程序的多国语言

    2021年11月26日