В спецификации 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
), которые должны быть загружены Classloader для запуска приложения.
Другой пример : WEB-INF/lib
позже папка будет содержать все файлы JAR, необходимые для приложения. В проекте maven для вас управляются зависимости, и maven автоматически копирует необходимые jar-файлы в WEB-INF/lib
папку для вас. Это объясняет, почему у вас нет lib
папки в проекте Maven.