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-INF
simpul bukan bagian dari pohon dokumen publik dari aplikasi . Tidak ada file yang terkandung dalam WEB-INF
direktori yang dapat disajikan secara langsung ke klien oleh kontainer. Namun, isi
WEB-INF
direktori terlihat oleh kode servlet menggunakan getResource
dan getResourceAsStream
metode panggilan pada ServletContext
, dan dapat diekspos menggunakan RequestDispatcher
panggilan.
Ini berarti bahwa WEB-INF
sumber 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-INF
folder. 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-INF
secara eksplisit:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
</bean>
The WEB-INF/classes
dan WEB-INF/lib
folder 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/classes
Folder nanti akan berisi semua kelas dan sumber daya java yang dikompilasi ( src/main/java
dan src/main/resources
) yang perlu dimuat oleh Classloader untuk memulai aplikasi.
Contoh lain : WEB-INF/lib
Folder 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/lib
folder untuk Anda. Itu menjelaskan mengapa Anda tidak memiliki lib
folder di proyek pakar.