成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何遠程部署應用到Tomcat

如何遠程部署應用到Tomcat,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

瀍河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

前幾天有人在群里提了個問題:

怎么樣通過程序向Tomcat內(nèi)部署應用?

工作比較忙,也沒細問具體的使用場景,提供了一種使用JMX接口的思路。后來提問者說不太了解JMX,網(wǎng)上搜了一些看了看,比較蒙。

本次不打算詳細描述JMX怎么使用,而是梳理下可供Tomcat遠程部署應用的幾種方式,方便有類似需求的朋友。

說到應用部署,熟悉Tomcat的都知道,他默認包含了一個manager應用,功能不少,其中就包含應用部署,不論是目錄部署,還是文件部署。

一開始寫公眾號的時候介紹過一點manager應用:深入Tomcat的Manager

這里注意對于manager應用的使用,默認做了訪問限制,只能在本機訪問,所以如果你想遠程使用manager部署應用到目標服務器,需要在content.xml中做修改,可以參考前面的一篇舊文:為什么你的Manager登錄不成功?

配置之后就和本地使用manager一樣,部署功能直接使用即可,不再贅述。這里我們來說下使用接口的形式遠程部署。

在manager應用內(nèi),我們頁面上看到的,一般稱為HTML接口,還有一個text接口,可以根據(jù)在URL中指定的command和參數(shù),執(zhí)行相應的動作。

格式類似這樣:

http://{host}:{port}/manager/text/{command}?{parameters}
 

host和port換成你的目標主機和端口,command代表你執(zhí)行的操作,parameter是命令對應需要的參數(shù)。

支持的命令很多,如下圖是managerServlet里部分代碼截圖

如何遠程部署應用到Tomcat

當然這里面沒截取我們要說的deploy命令,這個命令我們單獨說一下。對應我們前面說的要部署應用,在url類似這樣:

http://localhost:8080/manager/text/deploy?path=/hello&war=d:/abc.war

這里指定應用在磁盤上存放路徑,以及應用名稱,即可進行應用部署。

部署結果類似這樣:

OK - Deployed application at context path /hello

這里也支持應用的多版本部署,只需要在參數(shù)中增加version即可。

我們通過源碼來看下,這種部署形式背后是如何實現(xiàn)的。

如何遠程部署應用到Tomcat

我們來看紅框標注的三個地方,是整個部署邏輯的重點。

  1. 首先將應用添加到service內(nèi),代表已注冊的服務。后面再部署的時候都會先檢查,不在此列表內(nèi)的才被允許。

  2. 將遠程的應用包拷貝到本地目錄內(nèi)。

  3. 觸發(fā)部署的邏輯,真正進行部署。

我們主要注意一下,第一步和第三步,其實都是通過JMX接口來進行的。例如check方法的內(nèi)容是這樣的:

如何遠程部署應用到Tomcat

這里的mBeanServer就是JMX里所有MBean對象注冊的服務點,連接到MBeanServer上之后,后面的邏輯和反射有些類似,指定ObjectName,再指定方法名和參數(shù)即可。

如何遠程部署應用到Tomcat

我們這里的ObjectName是"Catalina:host=locahost,type=Deployer"。

調(diào)用check之后,最終會調(diào)用到HostConfig類的check方法,從而觸發(fā)部署流程,進行應用的部署。完整的部署過程請參考前面的文章:

如何在Tomcat中部署應用的多個版本

WEB應用是怎么被部署的?

Tomcat集群應用部署功能實現(xiàn)分析

所以,如果你想自己造個輪子來實現(xiàn)遠程部署的時候,也可以參考這種使用JMX的方式。

另一種方式

之前介紹過IDE內(nèi)Tomcat工作方式時描述過IDEA里在向Tomcat部署應用時是怎么樣通過JMX進行的(你一定不知道IDE里的Tomcat是怎么工作的!)。

在IDEA里,向tomcat部署一個應用,啟動時,其實并不會在本地的tomcat中找到該應用的目錄,或者實際運行的目錄下有該應用。仔細觀察發(fā)現(xiàn),IDEA是通過Tomcat的MBean,動態(tài)的向tomcat增加了一個Context,即一個應用。這樣直接指定了應用的路徑,訪問路徑等。

例如下面的調(diào)用鏈:

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)

也就是根據(jù)實際路徑path,docBase這些構造一個StandardContext,并添加到Host中,對外提供服務。

以上,是幾種通過JMX可以動態(tài)遠程部署的方式,供參考。當然如果想用更直接一些的方式,在代碼里控制應用的copy,然后控制Tomcat進程自動重啟,也可以啦。

關于如何遠程部署應用到Tomcat問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。

網(wǎng)站標題:如何遠程部署應用到Tomcat
標題路徑:http://jinyejixie.com/article32/ijjosc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設、用戶體驗、企業(yè)網(wǎng)站制作Google、電子商務手機網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
来凤县| 白沙| 巴中市| 兴城市| 莱州市| 崇仁县| 莱州市| 茌平县| 徐水县| 柏乡县| 洛阳市| 富裕县| 来宾市| 屏东县| 东丰县| 凤山县| 武邑县| 濮阳县| 营山县| 白山市| 如东县| 太湖县| 明水县| 新建县| 石城县| 七台河市| 大冶市| 晴隆县| 麻江县| 信阳市| 永顺县| 遂川县| 靖安县| 靖宇县| 镇巴县| 珠海市| 普洱| 乐山市| 宁德市| 旬阳县| 闽侯县|