Sự khác biệt giữa đóng gói file JAR và WAR (WAR and JAR Packaging)

Trong hướng dẫn nhanh này, chúng ta sẽ tập trung vào sự khác biệt giữa JAR và WAR packaging trong Java.

Sự khác biệt giữa đóng gói file JAR và WAR (WAR and JAR Packaging)

Đầu tiên, chúng ta sẽ định nghĩa từng tùy chọn packaging riêng biệt. Sau đó, chúng ta sẽ tóm tắt các sự khác biệt của chúng.

1. JAR Packaging

Nói đơn giản, JAR – hoặc Java Archive – là một định dạng tệp tin đóng gói. Các tệp JAR có đuôi .jar và có thể chứa thư viện, tài nguyên và các tệp metadata.

Về cơ bản, nó là một tệp tin nén chứa các phiên bản nén của các tệp .class và tài nguyên của các thư viện và ứng dụng Java đã được biên dịch.

Ví dụ, đây là một cấu trúc tệp JAR đơn giản:

META-INF/
    MANIFEST.MF
com/
    phult/
        MyApplication.class

File META-INF/MANIFEST.MF có thể chứa metadata bổ sung về các tệp được lưu trữ trong archive.

Chúng ta có thể tạo tệp JAR bằng cách sử dụng lệnh jar hoặc các công cụ như Maven.

2. WAR Packaging

WAR là viết tắt của Web Application Archive hoặc Web Application Resource. Các tệp tin này có đuôi .war và được sử dụng để đóng gói các ứng dụng web mà chúng ta có thể triển khai trên bất kỳ Servlet/JSP container nào.

Đây là một ví dụ về cấu trúc của một tệp WAR điển hình:

META-INF/
    MANIFEST.MF
WEB-INF/
    web.xml
    jsp/
        helloWorld.jsp
    classes/
        static/
        templates/
        application.properties
    lib/
        // *.jar files as libs

Bên trong, nó có một thư mục META-INF chứa thông tin hữu ích trong MANIFEST.MF về web archive. Thư mục META-INF là riêng tư và không thể truy cập từ bên ngoài.

Ngược lại, nó cũng chứa thư mục WEB-INF công khai với tất cả các tài nguyên web tĩnh, bao gồm các trang HTML, hình ảnh và các tệp JS. Hơn nữa, nó chứa tệp web.xml, các lớp servlet và các thư viện.

Chúng ta có thể sử dụng cùng các công cụ và lệnh mà chúng ta đã sử dụng để xây dựng một JAR để tạo ra một tệp .war.

3. Sự khác biệt

Chính Vậy, những sự khác biệt chính giữa hai loại archive này là gì?
Sự khác biệt đầu tiên và rõ ràng nhất là đuôi tệp. JAR có đuôi .jar, trong khi tệp WAR có đuôi .war.

Sự khác biệt chính thứ hai là mục đích và cách chúng hoạt động. Tệp JAR cho phép chúng ta đóng gói nhiều tệp để sử dụng như một thư viện, plugin hoặc bất kỳ loại ứng dụng nào. Ngược lại, tệp WAR chỉ được sử dụng cho các ứng dụng web.

Cấu trúc của các archive cũng khác nhau. Chúng ta có thể tạo một JAR với bất kỳ cấu trúc nào mong muốn. Ngược lại, WAR có cấu trúc định sẵn với các thư mục WEB-INF và META-INF.

Cuối cùng, chúng ta có thể chạy một JAR từ dòng lệnh nếu chúng ta xây dựng nó như một JAR thực thi mà không cần sử dụng phần mềm bổ sung. Hoặc, chúng ta có thể sử dụng nó như một thư viện. Ngược lại, chúng ta cần một server để thực thi một WAR.

Kết Luận
Trong bài viết nhanh này, chúng ta đã so sánh các loại đóng gói .jar và .war trong Java. Trong khi làm vậy, chúng ta cũng đã lưu ý rằng mặc dù cả hai sử dụng cùng định dạng tệp ZIP, có một số sự khác biệt quan trọng.