Специфікація Servlet 2.4 говорить про WEB-INF (стор. 70):
В ієрархії додатків існує спеціальний каталог
WEB-INF
. У цьому каталозі містяться всі речі, пов’язані з програмою, які відсутні в корені документа програми. Вузол не є частиною дерева документа публічної заяви . Жоден файл, що міститься в каталозі, не може безпосередньо контейнеру подавати клієнту. Однак вміст
каталогу видно коду сервлетів за допомогою
і викликів методу на , і може бути відкрито за допомогою викликів.WEB-INF
WEB-INF
WEB-INF
getResource
getResourceAsStream
ServletContext
RequestDispatcher
Це означає, що WEB-INF
ресурси доступні завантажувачу ресурсів вашої веб-програми та не є безпосередньо видимими для громадськості.
Ось чому багато проектів розміщують свої ресурси, такі як файли JSP, JAR / бібліотеки та власні файли класів або файли властивостей або будь-яку іншу конфіденційну інформацію в WEB-INF
папці. Інакше вони будуть доступні за допомогою простої статичної URL-адреси (корисної для завантаження CSS або Javascript, наприклад).
Ваші файли JSP можуть бути де завгодно, хоча і з технічної точки зору. Наприклад, у Spring, ви можете налаштувати їх на WEB-INF
явні:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
В WEB-INF/classes
і WEB-INF/lib
папки , зазначені в Вікіпедії WAR файли статті наведені приклади папок , необхідних в специфікації Servlet під час виконання.
Важливо зробити різницю між структурою проекту та структурою отриманого файлу WAR.
Структура проекту в деяких випадках частково відображатиме структуру файлу WAR (для статичних ресурсів, таких як файли JSP або файли HTML та JavaScript, але це не завжди так.
Перехід від структури проекту в отриманий файл WAR здійснюється процесом збирання.
Хоча ви зазвичай вільні розробити свій власний процес збирання, в наш час більшість людей використовуватиме стандартизований підхід, наприклад Apache Maven . Крім усього іншого, Maven визначає параметри за замовчуванням, для яких ресурсів у структурі проекту відображаються ресурси, що знаходяться в результаті артефакту (в цьому випадку артефакт є файлом WAR). В деяких випадках відображення складається з простого копіювання, в інших випадках процес картографування включає трансформацію, таку як фільтрування чи компілювання та інші.
Один приклад : WEB-INF/classes
пізніше ця папка буде містити всі складені класи Java та ресурси ( src/main/java
та src/main/resources
), які необхідно завантажити завантажувачем класів для запуску програми.
Інший приклад : WEB-INF/lib
пізніше ця папка буде містити всі файли jar, необхідні додатку. У проекті Maven для вас керуються залежності, і maven автоматично копіює необхідні файли jar в WEB-INF/lib
папку, яка вам потрібна . Це пояснює, чому у вас немає lib
папки у проекті Maven.