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

相关推荐

  • Python用3行代码输出花式字符串图集的方法是什么

    技术Python用3行代码输出花式字符串图集的方法是什么本篇内容主要讲解“Python用3行代码输出花式字符串图集的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“P

    攻略 2021年10月27日
  • Java语言和C++语言的差异是什么

    技术Java语言和C++语言的差异是什么本篇内容主要讲解“Java语言和C++语言的差异是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java语言和C++语言的差异是什

    攻略 2021年11月29日
  • VSCode如何进行安卓开发

    技术VSCode如何进行安卓开发这篇文章给大家介绍VSCode如何进行安卓开发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。vs code 大部分是由 ts 编写,上层 UI 可以运行在各个系统的浏

    攻略 2021年11月24日
  • C#通讯框架知识点有哪些

    技术C#通讯框架知识点有哪些这篇文章主要介绍“C#通讯框架知识点有哪些”,在日常操作中,相信很多人在C#通讯框架知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#通讯框架知识点

    攻略 2021年11月26日
  • oracle中数据泵dump文件存放nfs报ORA-27054错误怎么办

    技术oracle中数据泵dump文件存放nfs报ORA-27054错误怎么办小编给大家分享一下oracle中数据泵dump文件存放nfs报ORA-27054错误怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参

    攻略 2021年11月20日
  • 对Mysql的MVCC的理解是什么

    技术对Mysql的MVCC的理解是什么今天就跟大家聊聊有关对Mysql的MVCC的理解是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MVCC(Mutil-V

    攻略 2021年10月25日