你一定不知道IDE里的Tomcat是怎么工作的!

如果正在閱讀本文的你是一名開發者,那么一定聽說過EclipseIntellij IDEA這兩款可以稱之為神器的集成開發環境(IDE)。

Eclipse以其代碼開源、插件眾多、擴展方便等特點,可以通過配置支持多種開發語言,用戶眾多。

Intellij IDEA則是分為社區版和專業版。由于是商業公司在維護和更新,因此專業版有更豐富的功能,使用起來更便捷,但如果只使用社區版,則一大塊功能不能使用。
當然,我們今天要討論的不是兩個IDE孰優孰劣,而是簡要分析下Tomcat在這兩個使用量巨大的IDE中是如何工作的。


  1. Eclipse
    首先來看下Eclipse,通過配置將本地已經下載好的Tomcat添加到Server中。之后,在部署Web應用的時候,就可以選擇已經配置好的Tomcat。此時,通過啟動的Log,我們來看下其背后的原理。

仔細看上面的藍框內,是一個類似tomcat的webapps這個應用部署目錄的文件路徑,而且命令也是wtp.deploy。而wtp也是Eclipse的一個插件。我們再順著這個路徑,在本地打開看下。

這個是上層目錄,我們看到基本上除了Tomcat的bin目錄和lib目錄,剩下的差不多都在了。
其中conf下的文件有這些


可以看出和Tomcat的配置文件一個樣子。
再用上一篇文章里提到的jps命令查看下具體執行時的參數,就基本理解了

上面這張圖中,-D后面是JVM啟動時傳遞的參數,其中catalina.base,是代表Tomcat具體執行時,所有這些配置文件一類的資源具體查找的路徑,所有這些配置,在Tomcat啟動后,都會被解析得到,所以這些獨立位置的配置文件才能生效。

那如果要在一個IDE里跑多個Tomcat該怎么辦呢?
有了上面的分析你一定會說,so easy.只需要指定不同的catalina.base,在其對應的路徑下配置不同的文化的已 可以了。

對,影響一個操作系統中是否可以同時存在多個Tomcat,或者引申開來,即多個應用程序,無非是說端口這一類的資源沒有被占用即可。
而Tomcat,在本公眾號第三篇文章分析具體內部組件時看過,server.xml中可以配置Http通道,AJP通道這兩個是涉及到端口的,只要端口號使用不同的即可。
另外一個經常被忽略的是,Server下標簽下的port,默認是8005,這個也是會沖突的。需要注意下。


有了上面的分析,我們可以大致理清頭緒了。在Eclipse里,Tomcat的執行是通過指定不同的catalina.base來實現自定義不同的通道端口的配置,應用文件部署目錄等,從而可以在IDE內方便的使用之。

  1. Intellij IDEA
    下面再來看下Intellij IDEA。在啟動Tomcat時,Log一開始就能看到類似于下面的內容:


注意藍框中對應的內容,和在上面分析Catalina.base基本一致。為了嚴謹,還是要看一眼這個目錄內對應的內容

可以看出,實現思路和上面的分析基本一致,我們不再多談。

但這里和Eclipse的插件實現的區別是,這里并沒有指定wtp.deploy這個類似的屬性,所以在上圖的webapps目錄內并沒有我們要運行的應用的內容。那這個時候,IDEA內部是怎么實現應用的部署的呢?



在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)

同時還能觀察到這樣的調用鏈,因為只有tomcat啟動之后,它的MBeanServer才能夠被訪問。所以如下是啟動一個空tomcat。

main@1, prio=5, in group 'main', status: 'RUNNING'at java.net.DualStackPlainSocketImpl.accept0(DualStackPlainSocketImpl.java:-1)at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)at java.net.ServerSocket.implAccept(ServerSocket.java:545)at java.net.ServerSocket.accept(ServerSocket.java:513)at org.apache.catalina.core.StandardServer.await(StandardServer.java:446)
at java.lang.reflect.Method.invoke(Method.java:483)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

通過上面簡單的分析,IDE中Tomcat的具體執行原理,已經明了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容