cấu trúc tập tin chiến tranh

Mỗi ứng dụng web khi được tải lên máy chủ web sẽ được đóng gói thành một tệp .war duy nhất. WAR hiện là viết tắt của Tài nguyên ứng dụng web, mặc dù nó từng là Web ARchive. Trên thực tế, đây là một kho lưu trữ zip chứa ứng dụng web được đóng gói.

Đây là nội dung điển hình của tệp chiến tranh trông như thế nào:

/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

Bên trong tệp chiến tranh là các tài nguyên web tĩnh như tệp .html, .css, .js, v.v. Ngoài ra, có thể có hình ảnh, video và nói chung là bất kỳ tệp nào. Chúng có thể nằm trong thư mục gốc hoặc trong các thư mục con, điều đó không thành vấn đề. Tomcat sẽ đơn giản phục vụ chúng nếu chúng được yêu cầu.

Giả sử ứng dụng web của bạn được tải trên máy chủ web có tên apple, sau đó khi http://localhost/apple/images/logo.png được yêu cầu , Tomcat sẽ trả lại tệp /images/logo.png .

Một cách riêng biệt, đáng chú ý là thư mục WEB-INF . Nó được thiết kế để lưu trữ mã Java trong đó. Tomcat sẽ không đưa ra nội dung của nó.

/WEB-INF/lớp học/ thư mục dành cho các lớp Java không phải JAR đã biên dịch, bao gồm các lớp servlet và tệp tài nguyên mà trình tải cần trước khi chạy ứng dụng
/WEB-INF/lib/ nơi lưu trữ các thư viện jar
/WEB-INF/web.xml bộ mô tả triển khai

cấu trúc tập tin chiến tranh và dự án maven

Bây giờ, hãy chuyển sang hệ thống phân cấp thư mục của dự án Maven. Bạn có thể xem bố cục danh mục đầy đủ trong sách hướng dẫn chính thức. Ở đây chúng ta sẽ làm quen với nó trong một phiên bản hơi rút gọn, không bao gồm các tài nguyên thử nghiệm. Vì vậy, hệ thống phân cấp thư mục Maven tiêu chuẩn trông như thế này:

src/chính/java mã nguồn của các lớp ứng dụng và thư viện phù hợp với hệ thống phân cấp gói được chấp nhận chung
src/chính/tài nguyên tệp tài nguyên ứng dụng: cài đặt cơ sở dữ liệu, tệp bản địa hóa, v.v.
src/chính/ứng dụng web tài nguyên ứng dụng web (tệp JSP, tệp văn bản, tập lệnh, v.v.)

Như bạn có thể thấy, nó khác đáng kể so với cấu trúc của tệp WAR mà bạn biết. Nhưng điều thực sự xảy ra khi biên dịch một ứng dụng web chỉ đơn giản là di chuyển và nối các tệp vào cấu trúc được xác định trong đặc tả Java EE.

Thư mục src/main/webapp xác định gốc ngữ cảnh của ứng dụng web (khi được triển khai tới máy chủ, gốc ngữ cảnh giống với tên của tệp WAR) và đã chứa thư mục WEB-INF bên trong nó. Tức là nội dung của src/main/webapp được chuyển hoàn toàn sang ứng dụng web.

Tất cả các lớp Java của bạn được biên dịch thành các tệp lớp và giữ nguyên cấu trúc gói của chúng, được chuyển đến thư mục /WEB-INF/classes/ . Các JAR của các thư viện đi kèm, được xác định trong phần phụ thuộc pom.xml Maven như chúng tôi đã xác định ở trên, được chuyển đến thư mục /WEB-INF/lib/ .

Tài nguyên ứng dụng src/main/resources được chuyển đến đường dẫn lớp của ứng dụng, cụ thể là vào cùng thư mục /WEB-INF/classes/ .

Để làm cho nó hoàn toàn rõ ràng, hãy xem sơ đồ này, sơ đồ này sẽ giúp bạn hiểu cách thức và những gì diễn ra khi xây dựng một dự án:

thiết bị tập tin chiến tranh