Spesifikasi Servlet 2.4 mengatakan ini tentang WEB-INF (halaman 70):
Direktori khusus ada dalam hierarki aplikasi bernama
WEB-INF. Direktori ini berisi semua hal yang berkaitan dengan aplikasi yang tidak ada dalam root dokumen aplikasi. The
WEB-INFsimpul bukan bagian dari pohon dokumen publik dari aplikasi . Tidak ada file yang terkandung dalam WEB-INFdirektori yang dapat disajikan secara langsung ke klien oleh kontainer. Namun, isi
WEB-INFdirektori terlihat oleh kode servlet menggunakan getResource
dan getResourceAsStreammetode panggilan pada ServletContext, dan dapat diekspos menggunakan RequestDispatcherpanggilan.
Ini berarti bahwa WEB-INFsumber daya dapat diakses oleh pemuat sumber daya dari Aplikasi Web Anda dan tidak langsung terlihat oleh publik.
Inilah sebabnya mengapa banyak proyek meletakkan sumber daya mereka seperti file JSP, JAR / libraries dan file kelas mereka sendiri atau file properti atau informasi sensitif lainnya dalam WEB-INFfolder. Kalau tidak, mereka akan dapat diakses dengan menggunakan URL statis sederhana (berguna untuk memuat CSS atau Javascript misalnya).
File JSP Anda dapat berada di mana saja dari perspektif teknis. Misalnya di Spring, Anda dapat mengonfigurasinya WEB-INFsecara eksplisit:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
The WEB-INF/classesdan WEB-INF/libfolder yang disebutkan dalam Wikipedia WAR file artikel adalah contoh folder yang dibutuhkan oleh spesifikasi Servlet saat runtime.
Penting untuk membuat perbedaan antara struktur proyek dan struktur file WAR yang dihasilkan.
Struktur proyek dalam beberapa kasus sebagian mencerminkan struktur file PERANG (untuk sumber daya statis seperti file JSP atau file HTML dan JavaScript, tetapi ini tidak selalu terjadi.
Transisi dari struktur proyek ke dalam file WAR yang dihasilkan dilakukan dengan proses build.
Meskipun Anda biasanya bebas mendesain proses pembuatan Anda sendiri, saat ini kebanyakan orang akan menggunakan pendekatan standar seperti Apache Maven . Antara lain, Maven mendefinisikan default untuk sumber daya mana dalam struktur proyek yang dipetakan ke sumber daya apa dalam artefak yang dihasilkan (artefak yang dihasilkan adalah file WAR dalam kasus ini). Dalam beberapa kasus pemetaan terdiri dari proses salinan biasa dalam kasus lain proses pemetaan mencakup transformasi, seperti penyaringan atau kompilasi dan lain-lain.
Satu contoh : WEB-INF/classesFolder nanti akan berisi semua kelas dan sumber daya java yang dikompilasi ( src/main/javadan src/main/resources) yang perlu dimuat oleh Classloader untuk memulai aplikasi.
Contoh lain : WEB-INF/libFolder nanti akan berisi semua file jar yang dibutuhkan oleh aplikasi. Dalam proyek pakar, dependensi dikelola untuk Anda dan pakar secara otomatis menyalin file jar yang diperlukan ke WEB-INF/libfolder untuk Anda. Itu menjelaskan mengapa Anda tidak memiliki libfolder di proyek pakar.