โครงสร้างไฟล์สงคราม

แต่ละเว็บแอปพลิเคชัน เมื่ออัปโหลดไปยังเว็บเซิร์ฟเวอร์ จะถูกรวมเป็นไฟล์ .war ไฟล์เดียว WAR ย่อมาจาก Web Application Resources แม้ว่าจะเคยเป็น Web ARchive อันที่จริงแล้ว นี่คือไฟล์ zip ที่มีเว็บแอปพลิเคชันแบบแพ็คเกจ

นี่คือลักษณะของเนื้อหาทั่วไปของไฟล์ war:

/index.html
/guestbook.jsp
/images/logo.png
/js/jquery.js
/WEB-INF/web.xml
/WEB-INF/classes/com/codegym/Util.class
/WEB-INF/classes/com/codegym/MainServlet.class
/WEB-INF/classes/application.properties
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF

ภายในไฟล์ war เป็นทรัพยากรเว็บแบบสแตติกเช่น ไฟล์ .html, .css, .js และอื่นๆ นอกจากนี้ยังสามารถมีรูปภาพ วิดีโอ และไฟล์โดยทั่วไป พวกเขาสามารถอยู่ในรูทหรือในโฟลเดอร์ย่อยก็ได้ ไม่สำคัญ Tomcat จะให้บริการพวกเขาหากมีการร้องขอ

สมมติว่าเว็บแอปพลิเคชันของคุณถูกโหลดบนเว็บเซิร์ฟเวอร์ภายใต้ชื่อ apple จากนั้นเมื่อมี การร้องขอ http://localhost/apple/images/logo.png Tomcat จะส่งคืนไฟล์/images/logo.png

แยกเป็นมูลค่า noting โฟลเดอร์ WEB-INF . มันถูกออกแบบมาเพื่อเก็บโค้ดจาวาไว้ในนั้น Tomcat จะ ไม่เปิดเผยเนื้อหาของมัน

/เว็บ-INF/คลาส/ ไดเร็กทอรีสำหรับคลาส Java ที่ไม่ใช่ JAR ที่คอมไพล์แล้ว รวมถึงคลาสเซิร์ฟเล็ตและไฟล์รีซอร์สที่โหลดเดอร์ต้องการก่อนที่จะรันแอ็พพลิเคชัน
/เว็บ-INF/lib/ ที่สำหรับเก็บ jar library
/WEB-INF/web.xml คำอธิบายการปรับใช้

โครงสร้างไฟล์สงครามและโครงการ Maven

ตอนนี้เรามาดูลำดับชั้นของไดเร็กทอรีของโครงการ Maven คุณสามารถดูเค้าโครงแค็ตตาล็อกฉบับเต็มได้ในคู่มืออย่างเป็นทางการ ที่นี่เราจะทำความคุ้นเคยกับมันในเวอร์ชันที่ค่อนข้างสั้น ไม่รวมทรัพยากรการทดสอบ ดังนั้นลำดับชั้นไดเรกทอรี Maven มาตรฐานจึงมีลักษณะดังนี้:

src/main/java ซอร์สโค้ดของคลาสแอ็พพลิเคชันและไลบรารีตามลำดับชั้นของแพ็กเกจที่ยอมรับโดยทั่วไป
src/หลัก/ทรัพยากร ไฟล์ทรัพยากรแอปพลิเคชัน: การตั้งค่าฐานข้อมูล ไฟล์การแปล ฯลฯ
src/main/webapp ทรัพยากรเว็บแอปพลิเคชัน (ไฟล์ JSP, ไฟล์ข้อความ, สคริปต์ ฯลฯ)

อย่างที่คุณเห็น มันแตกต่างจากโครงสร้างของไฟล์ WAR ที่คุณรู้จักอย่างมาก แต่สิ่งที่เกิดขึ้นจริงเมื่อคอมไพล์เว็บแอปพลิเคชันคือการย้ายและเชื่อมไฟล์เข้ากับโครงสร้างที่กำหนดไว้ในข้อกำหนด Java EE

ไดเร็กทอรีsrc/main/webappกำหนดรูทบริบทของเว็บแอ็พพลิเคชัน (เมื่อปรับใช้กับเซิร์ฟเวอร์ รูทบริบทจะเหมือนกับชื่อของไฟล์ WAR) และมีไดเร็กทอรี WEB-INF อยู่ภายใน นั่นคือ เนื้อหาของsrc/main/webappจะถูกถ่ายโอนไปยังเว็บแอปพลิเคชันโดยสมบูรณ์

คลาส Java ทั้งหมดของคุณถูกคอมไพล์เป็นไฟล์คลาส และรักษาโครงสร้างแพ็คเกจ จะถูกย้ายไปยัง ไดเร็กทอรี /WEB-INF/classes / JARs ของไลบรารีที่รวมไว้ซึ่งกำหนดไว้ในการขึ้นต่อกันของ Maven pom.xml ตามที่เรากำหนดไว้ข้างต้น จะถูกย้ายไปยังไดเร็กทอรี /WEB - INF/lib/

ทรัพยากรแอ็พพลิเคชันsrc/main/resourcesถูกย้ายไปยัง classpath ของแอ็พพลิเคชัน โดยเฉพาะไปยัง ไดเร็กทอรี /WEB - INF/classes/ เดียวกัน

เพื่อให้ชัดเจนยิ่งขึ้น ดูไดอะแกรมนี้ ซึ่งจะช่วยให้คุณเข้าใจวิธีการและสิ่งที่จะเกิดขึ้นเมื่อสร้างโครงการ:

อุปกรณ์ไฟล์สงคราม