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