在idea中運行tomcat,把項目部署運行起來,然后我去tomcat目錄下去看,找不到我部署的項目 那我的項目是怎么運行起來的?
說明一下:這里是使用tomcat 部署成war exploded 而不是war包。war exploded模式是直接把文件夾、jsp頁面 、classes等等移到Tomcat 部署文件夾里面,進(jìn)行加載部署。因此這種方式支持熱部署,一般在開發(fā)的時候也是用這種方式。在平時開發(fā)的時候,使用熱部署的話,應(yīng)該對Tomcat進(jìn)行相應(yīng)的設(shè)置,這樣的話修改的jsp界面什么的東西才可以及時的顯示出來。
如上,將兩處都修改成Update resources即可。
webapps下面文件夾都翻了一遍,都沒有發(fā)現(xiàn)部署的項目。
去work文件夾下也看了一遍,是空的。
后來發(fā)現(xiàn),在idea中配置的tomcat,在運行時idea不會把項目放到自己的webapps路徑下,而是復(fù)制三份文件到 ${user.home}/.IntelliJIdea/system/tomcat 目錄下的各自項目。
我們進(jìn)入該目錄,看到如下(名稱是通過我們的項目名轉(zhuǎn)化而來):
也就是說每個項目都有屬于自己的一份tomcat配置,互不干擾。
我們進(jìn)入其中一個項目下,看到如下:(在自己的tomcat安裝目錄下是看不到日志的,日志在這里,還有一些配置文件)
每個項目的配置文件夾中有一個 /conf/Catalina/localhost/ROOT.xml 文件,內(nèi)容如下:
其中,path是指在訪問此項目時,是否需要添加額外的路徑,如果為空,則直接使用域名或者ip就可以訪問到該項目:127.0.0.1。這個值在ieda中的Run/Debug Configurations中可以配置:(即Application context)
如果現(xiàn)在我在Application context加上:/springSecurityDemo
Server這邊會自動加入:springSecurityDemo/
這時候,我們運行tomcat之后,在conf/Catalina/localhost沒有發(fā)現(xiàn)ROOT.xml,而是springSecurityDemo.xml文件,內(nèi)容如下:
這時候項目的訪問路徑是:http://localhost:8145/springSecurityDemo/
docBase是指要運行的項目的部署位置,/myProject/springSecurityDemo 就是我的項目源代碼的位置,build是由gradle構(gòu)建后生成的,gradle build完成之后生成的項目,結(jié)構(gòu)
如下:
而idea啟動tomcat的命令在這里:
整個項目運行過程是:首先gradle build項目,將構(gòu)建結(jié)果寫到項目的build目錄下,然后idea復(fù)制一份tomcat的conf、logs和work文件夾到${user.home}/.IntelliJIdea/system/tomcat 中,之后啟動tomcat安裝目錄下的catalina.sh文件,tomcat讀取配置文件,找到項目位置,然后就運行起來了。
-------------------------------------------------------------------------------------
如果是使用tomcat 部署成是war包。那么會不會就能在自己安裝的tomcat中找到呢?
剛開始我將項目改為war部署的方式,但是運行之后tomcat中始終沒有項目的文件。后來發(fā)現(xiàn)如果將當(dāng)前的Application context設(shè)置為’/’,那么
tomcat也不會將項目部署到webapps中,因為這個相當(dāng)于你項目的根路徑。后來經(jīng)過實踐,發(fā)現(xiàn)這個Application context就是你項目在webapps路徑下項目的根目錄名。