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

相关推荐

  • Redis复习

    技术Redis复习 Redis复习Redis
    Redis基础知识
    redis默认有16个数据库
    默认使用的是第0个
    基本方法
    可以使用select进行切换数据库
    127.0.0.1:6379 selec

    礼包 2021年10月26日
  • 您考虑的任何香港云服务器都应该提供的5个功能

    技术您考虑的任何香港云服务器都应该提供的5个功能无论您的独特需求是什么,每个网站所有者都应该在租用云服务器的时候关注五件事。1.可靠的性能 您想自信地知道,只要有人尝试导航到您的网站,他们就会看到您设计的网站。否则,你付

    礼包 2021年11月9日
  • Hibernate持久化类怎么用

    技术Hibernate持久化类怎么用这篇文章主要介绍了Hibernate持久化类怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Hibernate持久

    攻略 2021年12月1日
  • 分数化小数,数学家是怎么将分数化为小数的

    技术分数化小数,数学家是怎么将分数化为小数的说说自己吧分数化小数!1986年看了《小学数学教师》第4期鲍刚的一篇《质数之最》,产生了对数的计算。于是,贪黑爬半夜地算分数化小数。
    开始用竖式计算单位分数化小数。
    这样算,觉

    生活 2021年10月28日
  • 圾读音,垃和圾分开组词可以组什么词

    技术圾读音,垃和圾分开组词可以组什么词垃的组词如下圾读音:圪垃、
    圾的组词如下:
    搭圾、
    垃圾的相关组词如下:
    垃圾股、垃圾筒、敲坷垃、垃圾袋、坷垃头子、空间垃圾、垃圾填埋、白色垃圾、拉圾箱、垃圾堆、百圾碎、垃圾邮件、帕

    生活 2021年10月23日
  • JDBC中如何连接数据库

    技术JDBC中如何连接数据库这篇文章主要为大家展示了“JDBC中如何连接数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JDBC中如何连接数据库”这篇文章吧。连接数据库的

    攻略 2021年11月25日