Servlet 2.4 สเปคกล่าวว่าเกี่ยวกับเรื่องนี้ WEB-INF (หน้า 70)
WEB-INFไดเรกทอรีพิเศษมีอยู่ในลำดับชั้นของแอพลิเคชันที่มีชื่อ
ไดเรกทอรีนี้มีทุกสิ่งที่เกี่ยวข้องกับแอปพลิเคชันที่ไม่ได้อยู่ในรูทเอกสารของแอปพลิเคชัน โหนดไม่เป็นส่วนหนึ่งของต้นไม้เอกสารสาธารณะของแอพลิเคชัน ไม่มีไฟล์ที่อยู่ในไดเรกทอรีอาจถูกส่งไปยังไคลเอ็นต์โดยตรงโดยคอนเทนเนอร์ อย่างไรก็ตามเนื้อหาของ
ไดเรกทอรีสามารถมองเห็นได้ด้วยโค้ด servlet โดยใช้
และการเรียกใช้เมธอดบนและอาจถูกเปิดเผยโดยใช้การโทรWEB-INFWEB-INFWEB-INFgetResourcegetResourceAsStreamServletContextRequestDispatcher
ซึ่งหมายความว่าWEB-INFทรัพยากรสามารถเข้าถึงตัวโหลดทรัพยากรของเว็บแอปพลิเคชันของคุณและไม่สามารถมองเห็นได้โดยตรงสำหรับสาธารณะ
นี่คือเหตุผลที่โครงการจำนวนมากใส่ทรัพยากรของพวกเขาเช่นไฟล์ JSP, JARs / ไลบรารีและไฟล์คลาสหรือไฟล์คุณสมบัติหรือข้อมูลที่สำคัญอื่น ๆ ใน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