標籤:webapps 自己 系統 out directory test 雙擊 status ica
最近要做POC,接了個老項目改,使用war exploded部署到原生Tomcat(8.5版)
通過Intellij IDEA啟動Tomcat的時候發現系統的登入頁面出現HTTP-status-404錯誤,這時直接在瀏覽器中開啟http://localhost:8080則能開啟Tomcat的歡迎頁面,說明Tomcat起來了,但是沒有正確載入webapps目錄下的東西。
更奇怪的是,通過Tomcat的bin目錄下的啟動指令碼就可以正常啟動,無論是雙擊startup.bat還是在該目錄的cmd下使用catalina.bat run都能正常啟動項目。
如果有類似情況的朋友,可以留意一下兩種啟動方式在啟動時日誌裡面的環境變數,特別是CATALINA_HOME。
因為在我的機器上,兩種方式啟動時這個變數的值是不一樣的,在bin目錄下通過bat指令碼啟動時,CATALINA_HOME就是該bin所在的Tomcat目錄;
但是通過Intellij IDEA啟動時,該變數的值變為了:C:\Users\Cratical\.IntelliJIdea2017.1\system\tomcat\Unnamed_Test-Project_3_0_4
兩個目錄下面都有conf檔案夾,檔案夾裡面的設定檔的名稱和數量也都一樣,通過比對,發現conf目錄下,server.xml的內容有一些區別,注意這一行
<Host name="localhost" appBase="C:\Tomcat\webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="false" deployIgnore="^(?!(manager)|(tomee)$).*">
因為在Intellij IDEA中,一個war格式的artifact是可以修改Output Directory的位置的,預設值是當前Project根目錄下的target檔案夾;如果直接使用Intellij IDEA啟動Tomcat的時候,Tomcat目錄下的webapps目錄是找不到相關部署檔案夾的。
而Intellij IDEA是通過產生自己的一個CATALINA_HOME,修改其中的server.xml中的appBase來實現這個目標的。
回到上面那行配置,注意那個deployIgnore屬性,我的web目錄名稱正好被上面的Regex匹配到,所以Tomcat在載入的時候就直接忽略了,導致了那個404錯誤。
Tomcat server.xml中各項配置的含義,參見:http://www.importnew.com/17124.html
Intellij IDEA + Tomcat 出現 HTTP status 404錯誤的解決辦法