91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何遠程部署應用到Tomcat

發布時間:2021-11-18 17:07:03 來源:億速云 閱讀:138 作者:柒染 欄目:大數據

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

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

怎么樣通過程序向Tomcat內部署應用?

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

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

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

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

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

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

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

格式類似這樣:

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


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

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

如何遠程部署應用到Tomcat


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

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

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

部署結果類似這樣:

OK - Deployed application at context path /hello

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

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

如何遠程部署應用到Tomcat

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

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


  2. 將遠程的應用包拷貝到本地目錄內。


  3. 觸發部署的邏輯,真正進行部署。

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

如何遠程部署應用到Tomcat

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

如何遠程部署應用到Tomcat

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

調用check之后,最終會調用到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問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深水埗区| 成安县| 菏泽市| 河津市| 文水县| 海林市| 德令哈市| 延寿县| 广南县| 德格县| 明溪县| 庆元县| 大兴区| 荆州市| 辽源市| 许昌县| 自治县| 上栗县| 登封市| 罗平县| 眉山市| 福贡县| 女性| 舒兰市| 呼和浩特市| 迁西县| 买车| 海丰县| 商丘市| 河东区| 江津市| 穆棱市| 扶风县| 亳州市| 广南县| 辽宁省| 安吉县| 华坪县| 新巴尔虎左旗| 天气| 响水县|