關於靜態資源的加載
在IDEA中的java web application(或者maven項目)添加新的靜態資源時(如html,jpg,gif等),常常會遇到靜態資源無法加載的情況。這樣的情況我們一般都會想到首先通過熱部署或者重啟tomcat服務器來加載資源。
但是,有些時候,無論我們的tomcat是否熱部署或者不管怎么重啟tomcat都無法訪問這些資源(提示404找不到),然后就百思不得其解。這種時候可以嘗試一下重啟整個IDEA,重啟之后或許就能夠找到這些靜態資源。
這可能是由於out目錄(idea中的Excluded輸出目錄,默認為橘紅色)中沒有加載到這些資源,將需要加載的靜態資源手動復制到對應的目錄下就行了。這樣就可以避免我們在添加靜態資源時反復重啟IDEA了。
當然上述內容是建立在靜態資源沒有放在不合適位置的前提下。
一般情況下,這些靜態資源往往放置於與WEB-INF同一級的webapp或者WebRoot文件夾(或其子目錄)>下,而不能放在WEB-INF目錄中。
說到這里,咱就順便介紹一下web項目中的WEB-INF目錄
web項目中的WEB-INF目錄
WEB-INF是Java web的安全目錄,其中一般包含:
- /WEB-INF/web.xml : web應用的配置文件,描述servlet和其他應用組件配置及命名規則,相信大家如果配置過servlet對它一定不陌生。
- /WEB-INF/classes/ :該目錄包含站點的class文件,包括 servlet class 和非servlet class。
- /WEB-INF/lib/ : 存放web application所需要的各種jar包,一般需要在IDEA的Project Structure的Modules中將這個目錄添加到依賴。這個目錄一般放置僅在這個web應用中用到的jar文件,例如數據庫驅動jar文件(我們鏈接postgis數據庫時就需要用到)。
- 由於WEB-INF目錄是不對外開放的,外部沒辦法直接訪問到(即不能通過URL訪問)。只能通過映射來訪問,比如映射為一個action或者servlet通過服務器端跳轉來訪問到具體的頁面。這樣,在WEB-INF目錄中就可以存放一些不對外開放的頁面,限制用戶的訪問,提高安全性。