Tệp JAR (JAR Files)
Applet máy tính (calculator) trong chương này dùng bốn class: CalculatorApplet, CalculatorPanel và hai class bên trong (inner class). Bạn đã biết rằng thẻ applet tham chiếu đến tệp class chứa class applet:
....
Khi trình duyệt đọc dòng này, nó tạo một kết nối đến máy chủ web và tải tệp CalculatorApplet.class. Class loader (bộ nạp class) của máy ảo trong trình duyệt nạp class CalculatorApplet từ tệp đó. Trong quá trình nạp, class loader phải phân giải (resolve) các class khác được dùng trong class này. Sau khi làm xong, nó mới biết mình cần thêm các class nữa để chạy applet. Vì vậy, trình duyệt phải tạo thêm các kết nối đến máy chủ web, mỗi tệp class một kết nối. Việc tải một applet như vậy qua kết nối mạng chậm có thể mất nhiều phút.
Cần nhớ rằng nguyên nhân khiến thời gian tải lâu không phải do kích thước các tệp class – chúng khá nhỏ. Nguyên nhân là chi phí đáng kể để thiết lập một kết nối đến máy chủ web.
Java hỗ trợ một phương pháp nạp tệp class được cải tiến, cho phép bạn đóng gói tất cả các tệp class cần thiết vào một tệp duy nhất. Tệp này sau đó có thể được tải về chỉ bằng một yêu cầu HTTP tới máy chủ. Các tệp dùng để lưu trữ các tệp class Java được gọi là tệp Java Archive (JAR). Tệp JAR có thể chứa cả tệp class lẫn các loại tệp khác như hình ảnh và âm thanh. Tệp JAR được nén bằng định dạng nén ZIP quen thuộc, giúp giảm thêm thời gian tải.
Bạn dùng công cụ jar để tạo tệp JAR. (Trong cài đặt mặc định, nó nằm trong thư mục jdk/bin.) Lệnh phổ biến nhất để tạo một tệp JAR mới có cú pháp như sau:
jar cvf JARFileName File1 File2 . . .
Ví dụ:
jar cvf CalculatorClasses.jar *.class icon.gif
Nói chung, lệnh jar có dạng:
jar options File1 File2 . . .
Bảng 10-3 liệt kê tất cả các tùy chọn của chương trình jar. Chúng tương tự các tùy chọn của lệnh tar trong UNIX.
| Tùy chọn | Mô tả |
|---|---|
| c | Tạo một kho lưu trữ mới hoặc rỗng và thêm các tệp vào đó. Nếu tên tệp nào được chỉ định là thư mục, chương trình jar sẽ xử lý chúng theo cách đệ quy. |
| t | Hiển thị mục lục (danh sách nội dung). |
| u | Cập nhật một tệp JAR đã có. |
| x | Giải nén các tệp. Nếu bạn cung cấp một hoặc nhiều tên tệp, chỉ những tệp đó được giải nén. Nếu không, tất cả các tệp sẽ được giải nén. |
| f | Chỉ định tên tệp JAR làm đối số dòng lệnh thứ hai. Nếu thiếu tham số này, jar sẽ ghi kết quả ra đầu ra chuẩn (khi tạo tệp JAR) hoặc đọc từ đầu vào chuẩn (khi giải nén hoặc liệt kê nội dung tệp JAR). |
| v | Xuất thông tin chi tiết (verbose). |
| m | Thêm một manifest vào tệp JAR. Manifest là phần mô tả nội dung và nguồn gốc của kho lưu trữ. Mỗi kho lưu trữ đều có một manifest mặc định, nhưng bạn có thể cung cấp manifest riêng nếu muốn xác thực nội dung của kho lưu trữ. |
| 0 | Lưu trữ mà không nén ZIP. |
| M | Không tạo tệp manifest cho các mục. |
| i | Tạo một tệp chỉ mục (index) (xem thông tin chi tiết ở phần bên dưới). |
| C | Tạm thời đổi thư mục. Ví dụ:
jar cvf JARFileName.jar -C classes *.classsẽ chuyển sang thư mục con classes để thêm các tệp class. |
Khi đã có tệp JAR, bạn cần tham chiếu đến nó trong thẻ applet, như trong ví dụ sau.
.........
Lưu ý rằng thuộc tính code vẫn phải có mặt. Thuộc tính code cho trình duyệt biết tên của applet. Còn archive chỉ đơn thuần là nguồn nơi có thể tìm thấy class applet và các tệp khác. Bất cứ khi nào cần một tệp class, hình ảnh hoặc âm thanh, trình duyệt sẽ tìm trong các tệp JAR ở danh sách archive trước. Chỉ khi tệp không nằm trong kho lưu trữ thì nó mới được tải từ máy chủ web.
Nếu bạn có một applet lớn, nhiều khả năng không phải người dùng nào cũng cần toàn bộ chức năng của nó. Để giảm thời gian tải, bạn có thể chia mã applet thành nhiều tệp JAR và thêm một chỉ mục (index) vào tệp JAR chính. Khi đó class loader sẽ biết tệp JAR nào chứa một package hoặc tài nguyên cụ thể. Xem chi tiết về quy trình lập chỉ mục tại http://java.sun.com/j2se/5.0/docs/guide/jar/jar.html#JAR%20Index.
JDK 5.0 hỗ trợ một sơ đồ nén mới gọi là “pack200”, được tinh chỉnh riêng để nén các tệp class hiệu quả hơn thuật toán nén ZIP thông thường. Sun tuyên bố tỷ lệ nén gần 90% với các tệp JAR nhiều megabyte chỉ chứa tệp class. Để triển khai các tệp này, bạn cần cấu hình máy chủ web sao cho phục vụ tệp chuẩn cho các client truyền thống và tệp nén cho các client mới cho biết trong yêu cầu HTTP rằng chúng có khả năng giải nén. Xem hướng dẫn chi tiết tại http://java.sun.com/j2se/5.0/docs/guide/deployment/deployment-guide/pack200.html.
Java Plug-in sẽ lưu đệm (cache) mã applet. Xem chi tiết về cách tinh chỉnh bộ nhớ đệm tại http://java.sun.com/j2se/5.0/docs/guide/plugin/developer_guide/applet_caching.html.
0 comments:
Đăng nhận xét