1. 程式人生 > >WebRoot META-INF WEB-INF 區別

WebRoot META-INF WEB-INF 區別

/WEB-INF/web.xml

Web應用程式配置檔案,描述了 servlet 和其他的應用元件配置及命名規則。

 /WEB-INF/classes/
包含了站點所有用的 class 檔案,包括 servlet class 和非servlet class,他們不能包含在 .jar檔案中。
 /WEB-INF/lib/
存放web應用需要的各種JAR檔案,放置僅在這個應用中要求使用的jar檔案,如資料庫驅動jar檔案。

 /WEB-INF/src/
 原始碼目錄,按照包名結構放置各個Java檔案。

 /WEB-INF/database.properties
 資料庫配置檔案

 /WEB-INF/tags/

存放了自定義標籤檔案,該目錄並不一定為 tags,可以根據自己的喜好和習慣為自己的標籤檔案庫命名,當使用自定義的標籤檔案庫名稱時,在使用標籤檔案時就必須宣告正確的標籤檔案庫路徑。例如:當自定義標籤檔案庫名稱為 simpleTags 時,在使用 simpleTags 目錄下的標籤檔案時,就必須在 jsp 檔案頭宣告為:<%@ taglibprefix="tags" tagdir="/WEB-INF /simpleTags" % >。

/WEB-INF/jsp/

jsp 1.2 以下版本的檔案存放位置。改目錄沒有特定的宣告,同樣,可以根據自己的喜好與習慣來命名。此目錄主要存放的是 jsp 1.2 以下版本的檔案,為區分 jsp 2.0 檔案,通常使用 jsp 命名,當然你也可以命名為 jspOldEdition 。

/WEB-INF/jsp2/

與 jsp 檔案目錄相比,該目錄下主要存放 Jsp 2.0 以下版本的檔案,當然,它也是可以任意命名的,同樣為區別 Jsp 1.2以下版本的檔案目錄,通常才命名為 jsp2。

META-INF

相當於一個資訊包,目錄中的檔案和目錄獲得Java 2平臺的認可與解釋,用來配置應用程式、擴充套件程式、類載入器和服務
 manifest.mf檔案,在用jar打包時自動生成。

以下轉載至 http://blog.csdn.net/saygoodbyetoyou/article/details/9944773

請求頁面為何要放到META-INF目錄下

觀點一:(較為贊同)
安全性不是真正的原因,因為jsp是要解析後才顯示到瀏覽器的,即使使用者知道你jsp的路徑,也不可能通過瀏覽器看到jsp原始碼的,而如果是通過其它手段入侵伺服器的話,放在WEB-INF又和放在別的地方有什麼區別呢???
真正的原因是,對於早期直接嵌入Java程式碼的jsp,是直接給出jsp路徑給使用者訪問的,這種情況恰恰不能放在WEB-INF,而到了現在的mvc模式,jsp已經不是曾經那個包含完整邏輯的jsp,而僅僅充當view層的模板,必須要填入model資料後進行渲染,才能生成可讀的頁面,這樣的模板是不能讓使用者直接訪問的,直接訪問的話要麼是一堆各種空白,或者一堆佔位符,甚至一堆NullPointException,所以需要放到WEB-INF裡。補充一下,“安全性問題”指的是“不允許你訪問,否則會對我不好”,而這裡的情況其實是“不建議你訪問,否則會對你不好”,應該屬於健壯性的範疇。
觀點二:
  放到WEB-INF下的Jsp檔案,如果你直接去訪問這個Jsp是不可以的,必須通過Action的跳轉,這樣就能夠理解為什麼安全性高了,對於使用者是不可見的,對於一些對於使用者,可以直接訪問的,如,登入,註冊頁面,可以直接放在webroot下,這個也是根據你係統的需求了。
觀點三:
通過設定過濾器,放在webroot下面的檔案也可以實現不能直接訪問。所以說放在哪裡就看習慣是什麼樣了。
一般專案都是要求隱藏性的,只讓客戶通過請求訪問而不是直接訪問jsp頁面。若放在webroot下面,肯定要加一個過濾器阻止所有對*.jsp的訪問。只要比較的話:
放在webroot下面:優點,程式結構清晰,便於編碼和維護;缺點,要加過濾器。
放在web-inf下面:優點,不用過濾器;缺點,打亂了程式結構,編碼和維護麻煩
觀點四:
為了減少風險,可以把這些頁面檔案移到WEB-INF 目錄下。基於Servlet的宣告,WEB-INF不作為Web應用的公共文件樹的一部分。因此,WEB-INF 目錄下的資源不是為客戶直接服務的。我們仍然可以使用WEB-INF目錄下的JSP頁面來提供檢視給客戶,客戶卻不能直接請求訪問JSP。JSP存放在 WEB-INF 目錄下更為安全

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

今天同事提了個問題:說我們專案的page目錄為什麼是放在webroot下面的,而不是web-inf下,因為放在web-inf 下比較安全,只能通過action,跳轉來訪問,不能直接在地址上訪問jsp內容。後來說放在webroot下面也是可以的,只要加一個過濾器,過濾掉所有後綴為.jsp的請求就行了。

上網看了一下,也是這種說法,而且資料夾目錄放在web-inf下不好分層,web-inf下一般是很少開啟和是使用的東西,存放著使用者獲取不到的東西。放在這個目錄下面比較麻煩。

還不如放在根目錄下,然後加一個過濾器一了百了,我也覺得這樣挺好。

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

 

其實到最後也找不出META-INF是做什麼用的,也很少有詳細的解釋,百度估計找不出我想要的答案了。至於檔案放在webroot下還是web-inf下。   

webroot使用者可以直接訪問,但是這樣安全性缺失,需要加過濾器。

web-inf使用者無法直接訪問。需要通過action對映訪問。

有一個疑問,如果兩個jsp放在web-inf中通過a標籤跳轉,不通過action。那麼可以成功跳轉嗎?    

接上,試驗過 不可以。

-------------------------------------------補充以上-------------------------------------------------

經過測試,在webroot和web-inf下放同名的jsp檔案。

如果直接訪問,訪問的是webroot下的。(這個是正常的,web-inf原先就不允許直接訪問jsp).

如果通過跳轉,那麼訪問的就是web-inf下的,這個就不明白了。應該是通過action一手,會優先找web-inf下的jsp檔案吧。