Specyfikacja Servlet 2.4 mówi tak o WEB-INF (strona 70):
W nazwanej hierarchii aplikacji istnieje katalog specjalny
WEB-INF
. Ten katalog zawiera wszystkie rzeczy związane z aplikacją, których nie ma w katalogu głównym dokumentu aplikacji. Węzeł nie jest częścią drzewa dokumentu publicznego wniosku . Żaden plik znajdujący się w katalogu nie może być udostępniony bezpośrednio klientowi przez kontener. Jednak zawartość
katalogu jest widoczna dla kodu serwletu przy użyciu wywołań metody
i w i może być ujawniona przy użyciu wywołań.WEB-INF
WEB-INF
WEB-INF
getResource
getResourceAsStream
ServletContext
RequestDispatcher
Oznacza to, że WEB-INF
zasoby są dostępne dla modułu ładującego zasoby Twojej aplikacji internetowej i nie są bezpośrednio widoczne dla publiczności.
Dlatego wiele projektów umieszcza swoje zasoby, takie jak pliki JSP, JAR / biblioteki i własne pliki klas, pliki właściwości lub inne poufne informacje w WEB-INF
folderze. W przeciwnym razie byłyby dostępne za pomocą prostego statycznego adresu URL (przydatnego na przykład do załadowania CSS lub JavaScript).
Z technicznego punktu widzenia pliki JSP mogą być jednak wszędzie. Na przykład wiosną możesz skonfigurować je tak, aby były WEB-INF
jawnie w:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
Te WEB-INF/classes
i WEB-INF/lib
foldery wymienione w Wikipedii WAR pliki artykule przedstawiono przykłady folderów wymaganych w specyfikacji Servlet przy starcie.
Ważne jest, aby odróżnić strukturę projektu od struktury wynikowego pliku WAR.
Struktura projektu w niektórych przypadkach będzie częściowo odzwierciedlać strukturę pliku WAR (w przypadku zasobów statycznych, takich jak pliki JSP lub pliki HTML i JavaScript, ale nie zawsze tak jest.
Przejście ze struktury projektu do wynikowego pliku WAR odbywa się w procesie kompilacji.
Chociaż zwykle możesz zaprojektować własny proces kompilacji, obecnie większość ludzi będzie korzystać ze standardowego podejścia, takiego jak Apache Maven . Między innymi Maven definiuje wartości domyślne, dla których zasoby w strukturze projektu są odwzorowywane na jakie zasoby w wynikowym artefakcie (w tym przypadku wynikowym artefaktem jest plik WAR). W niektórych przypadkach mapowanie składa się ze zwykłego procesu kopiowania, w innych przypadkach proces mapowania obejmuje transformację, taką jak filtrowanie lub kompilowanie i inne.
Jeden przykład : WEB-INF/classes
folder będzie później zawierał wszystkie skompilowane klasy i zasoby Java ( src/main/java
i src/main/resources
), które muszą zostać załadowane przez Classloader, aby uruchomić aplikację.
Inny przykład : WEB-INF/lib
folder będzie później zawierał wszystkie pliki jar potrzebne aplikacji. W projekcie maven zależności są zarządzane za Ciebie, a maven automatycznie kopiuje potrzebne pliki jar do WEB-INF/lib
folderu za Ciebie. To wyjaśnia, dlaczego nie masz lib
folderu w projekcie maven.