war和war exploded的區別
使用IDEA配置Tomcat服務的時候,在 Select Artifacts to Deploy 選項中相同項目名有war和 war exploded 兩種模式,之前只是傻乎乎的隨機選一個,知其然而不知其所以然。今天探究一下二者的區別。

-
war模式:將web工程以war包的形式上傳到服務器;
-
war exploed模式:將web工程以當前文件夾的位置關系上傳到服務器。
通俗地說,war模式先打成war包,然后再發布到Tomcat的ROOT下。所以選擇這個模式后,你再看下你的tomcat的root文件夾下,是剛打成的項目。war exploded模式只編譯生成target,然后把當前的target文件夾的位置關系上傳到服務器,沒有打包到tomcat的ROOT下。因此這種方式支持熱部署,一般在開發的時候也是用這種方式,關於熱部署,下面詳細介紹一下。
熱部署
在平時開發的時候,每次修改代碼都需要重啟一次Tomcat的確不方便,如果使用熱部署,可以大大減輕工作量,此時應該對Tomcat進行相應的設置,這樣的話修改的jsp界面什么的東西才可以及時的顯示出來。需要在Tomcat做如下設置:

-
on ‘update‘ action:當用戶主動執行更新的時候更新 快捷鍵:Ctrl + F9
-
on frame deactication:在編輯窗口失去焦點的時候更新
你可以根據自己的需求進行設置,我這里兩個都有設置。
然后啟動IDEA的自動編譯功能。Intellij IDEA默認關閉了自動編譯,在Setting中找到 Build,Execution,Deployment => Compiler,勾選Build Project automatically。

on frame deactivation熱部署缺點:基於JVM提供的熱加載僅支持方法塊內代碼修改,只有在debug模式下,並且idea失去焦點時才會觸發熱加載,相對加載速度緩慢。
如果你的工程中沒有選項 Update classes and resources ,那么,只能更新classes文件中的變動,並不能更新靜態文件中的變動。

出現這種選項情況的原因是在配置Deployment時選擇了包含war的包,如全部都是war exploded則不會出現這種情況。召喚Update classes and resources的方式:先remove當前工程所有的Artifacts,再次添加,添加的時候在Artifact清單中僅僅選擇工程名稱后面有 exploded的選項。
Reference