1. 程式人生 > >idea在執行web專案時部署的位置(tomcat)

idea在執行web專案時部署的位置(tomcat)

http://m.blog.csdn.net/Victor_Cindy1/article/details/72680553


以前一直很好奇,在idea中執行tomcat,把專案部署到其中,執行起來,然後我去tomcat目錄下去看,根本找不到我部署的專案 那我的專案是咋執行的啊… - -

後來我就查啊查 ,糾結啊糾結,然後大概知道是咋回事了:

在idea中配置的tomcat,在執行時idea不會把專案放到該路徑下,而是複製一份足夠的配置檔案,到 ${user.home}/.IntelliJIdea/system/tomcat 目錄下:

這裡寫圖片描述

也就是說每個專案都有屬於自己的一份tomcat配置,互不干擾。

每個專案的配置資料夾中有一個 /conf/Catalina/localhost/ROOT.xml 檔案,內容如下:


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context path="" docBase="D:\work\專案\target\xxx-web" />
  • 1
  • 2

其中,path是指在訪問此專案時,是否需要新增額外的路徑,如果為空,則直接使用域名或者ip就可以訪問到該專案:127.0.0.1。這個值在ieda中的Run/Debug Configurations中可以配置:

這裡寫圖片描述

docBase是指要執行的專案的部署位置,D:\work\專案 就是我的專案原始碼的位置,target是由maven構建後生成的,D:\work\專案\target\xxx-web 目錄就是maven build完成之後生成的專案,結構如下:

這裡寫圖片描述

而idea啟動tomcat的命令為:

這裡寫圖片描述

也就是說,整個專案執行過程為:首先maven build專案,將構建結果寫到專案的target目錄下,然後idea複製一份tomcat的配置檔案到${user.home}/.IntelliJIdea/system/tomcat 中,之後啟動tomcat安裝目錄下的catalina.bat檔案,tomcat讀取配置檔案,找到專案位置,然後就執行起來了。




在idea中執行tomcat,把專案部署執行起來,然後我去tomcat目錄下去看,找不到我部署的專案 那我的專案是怎麼執行起來的?

說明一下:這裡是使用tomcat 部署成war exploded 而不是war包。

war exploded模式是直接把資料夾、jsp頁面 、classes等等移到Tomcat 部署資料夾裡面,進行載入部署。因此這種方式支援熱部署,一般在開發的時候也是用這種方式。

在平時開發的時候,使用熱部署的話,應該對Tomcat進行相應的設定,這樣的話修改的jsp介面什麼的東西才可以及時的顯示出來。


如上,將兩處都修改成Update resources即可。

webapps下面資料夾都翻了一遍,都沒有發現部署的專案。


去work資料夾下也看了一遍,是空的。


後來發現,在idea中配置的tomcat,在執行時idea不會把專案放到自己的webapps路徑下,而是複製三份檔案到 ${user.home}/.IntelliJIdea/system/tomcat 目錄下的各自專案。

我們進入該目錄,看到如下(名稱是通過我們的專案名轉化而來):


也就是說每個專案都有屬於自己的一份tomcat配置,互不干擾。

我們進入其中一個專案下,看到如下:(在自己的tomcat安裝目錄下是看不到日誌的,日誌在這裡,還有一些配置檔案)


每個專案的配置資料夾中有一個 /conf/Catalina/localhost/ROOT.xml 檔案,內容如下:


其中,path是指在訪問此專案時,是否需要新增額外的路徑,如果為空,則直接使用域名或者ip就可以訪問到該專案:127.0.0.1。這個值在ieda中的Run/Debug Configurations中可以配置:(即Application context)




如果現在我在Application context加上:/springSecurityDemo


Server這邊會自動加入:springSecurityDemo/


這時候,我們執行tomcat之後,在conf/Catalina/localhost沒有發現ROOT.xml,而是springSecurityDemo.xml檔案,內容如下:



這時候專案的訪問路徑是:http://localhost:8145/springSecurityDemo/

docBase是指要執行的專案的部署位置,/myProject/springSecurityDemo 就是我的專案原始碼的位置,build是由gradle構建後生成的,gradle build完成之後生成的專案,結構

如下:


而idea啟動tomcat的命令在這裡:


整個專案執行過程是:首先gradle build專案,將構建結果寫到專案的build目錄下,然後idea複製一份tomcat的conf、logs和work資料夾到${user.home}/.IntelliJIdea/system/tomcat 中,之後啟動tomcat安裝目錄下的catalina.sh檔案,tomcat讀取配置檔案,找到專案位置,然後就執行起來了。

-------------------------------------------------------------------------------------

如果是使用tomcat 部署成是war包。那麼會不會就能在自己安裝的tomcat中找到呢?

剛開始我將專案改為war部署的方式,但是執行之後tomcat中始終沒有專案的檔案。後來發現如果將當前的Application context設定為’/’,那麼

tomcat也不會將專案部署到webapps中,因為這個相當於你專案的根路徑。後來經過實踐,發現這個Application context就是你專案在webapps路徑下專案的根目錄名。