Ajax cho các nhà phát triển Java Tuần tự hóa đối tượng Java cho Ajax

Tóm tắt: Nếu bạn đang tiến hành pháttriển Web ™ bằng cách sử dụng

JavaScript và XML không đồng bộ (Ajax), thì việc phân phát dữ liệu từ máy chủ

cho máy khách có lẽ là mối quan tâm hàng đầu của bạn. Trong bài viết thứ hai

trong loạt bài Ajax for Java developersnày, Philip McCarthy cùng bạn qua năm

cách tiếp cận để tuần tự hóa đối tượng Java và cung cấp cho bạn tất cả các thông

tin bạn cần để chọn định dạng và công nghệ dữ liệu thích hợp tốt nhất cho ứng

dụng của bạn.

Trong bài viết đầu tiêncủa loạt bài này, tôi đã giới thiệu cho bạn các khối tạo

dựng của Ajax:

 Cách sử dụng một đối tượng JavaScript XMLHttpRequestđể gửi một yêu

cầu không đồng bộ tới một máy chủ từ một trang Web.

 Cách xử lý và trả lời yêu cầu đó bằng một Java servlet trả về một tài liệu

XML tới máy khách.

 Cách sử dụng tư liệu trả lời đó trên máy khách để cập nhật khung nhìn

trang của bạn.

Bây giờ, tôi sẽ tiếp tục thảo luận về các quy tắc cơ bản về phát triển của Ajax,

nhưng tôi sẽ tập trung vào những gì quan trọng nhất đối với nhiều nhà phát triển

Web với Java: tạo dữ liệu cho máy khách

pdf22 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2002 | Lượt tải: 2download
Tóm tắt nội dung Ajax cho các nhà phát triển Java Tuần tự hóa đối tượng Java cho Ajax, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
rs: [{ name: "John", instruments: ["Vocals","Guitar","Piano"] }, 
{ name: "Paul", instruments :["Vocals","Bass","Piano","Guitar"] }, 
{ name: "George", instruments: ["Guitar","Vocals"] }, 
{ name: "Ringo", instruments: ["Drums","Vocals"] } ] }; 
// Interrogate the band object 
var musician = band.members[3]; 
alert( musician.name + " played " + musician.instruments[0] + "with " + 
band.name ); 
Do JSON là một tính năng ngôn ngữ thú vị, nhưng với Ajax nó phải làm gì? Phần 
cuối của câu chuyện là bạn có thể sử dụng JSON để gửi một đồ thị đối tượng 
JavaScript qua mạng dưới dạng trả lời của máy chủ Ajax. Điều này có nghĩa là 
một sự thoát ra khỏi chuyển hướng XML trên máy khách thông qua DOM API -- 
bạn chỉ cần đánh giá câu trả lời JSON và bạn ngay lập tức có một đồ thị đối tượng 
JavaScript có thể truy cập. Tất nhiên, trước tiên cần chuyển JavaBeans của bạn 
thành JSON. 
Tạo JSON từ các lớp Java 
Những ưu điểm và nhược điểm giống nhau áp dụng cho các kỹ thuật tạo XML 
khác nhau cũng áp dụng để tạo JSON. Người ta cho rằng, có một trường hợp để sử 
dụng các công nghệ tạo lại khuôn mẫu trình bày. Tuy nhiên, việc sử dụng JSON 
kỹ hơn để chuyển các đối tượng được tuần tự hóa giữa các tầng ứng dụng hơn là 
để tạo một khung nhìn trạng thái của ứng dụng. Tôi sẽ chỉ cho bạn cách sử dụng 
Java API org.json để tạo các phương thức toJSONObject() trên các lớp Java của 
bạn. Rồi các JSONObject của bạn có thể được tuần tự hóa đơn giản tới JSON. Liệt 
kê 8 kiểm tra lại Liệt kê 1 từ cuộc thảo luận XML, hiển thị việc thực hiện 
toJSONObject() cho lớp Order. 
Liệt kê 8. Thực hiện phương thức toJSONObject () cho lớp Order 
public JSONObject toJSONObject() 
{ JSONObject json = new JSONObject(); 
 json.put("id",id); 
 json.put("cost",getFormattedCost()); 
 json.put("date",date); 
 JSONArray jsonItems = new JSONArray(); 
 for (Iterator iter = items.iterator() ; iter.hasNext() ; ) 
 { jsonItems.put(iter.next().toJSONObject()); } 
 json.put("items",jsonItems); return json; 
} 
Như bạn có thể thấy, API org.json rất đơn giản. JSONObject thể hiện một đối 
tượng JavaScript (tức một mảng kết hợp) và có các phương thức put() khác nhau 
lấy một khoá String và giá trị là một kiểu nguyên thủy, một kiểu String, hoặc một 
kiểu JSON khác. JSONArray thể hiện một mảng có lập chỉ mục, để cho phương 
thức put() của nó chỉ có một giá trị. Lưu ý rằng trong Liệt kê 8, một sự lựa chọn 
cho việc tạo mảng jsonItems và sau đó gắn nó vào đối tượng json với put() sẽ gọi 
json.accumulate("items",iter.next().toJSONObject()); cho mỗi mục. Phương thức 
accumulate() giống như put() trừ việc nó gắn thêm giá trị của mình cho một mảng 
có lập chỉ mục được xác định bằng khoá. 
Liệt kê 9 cho thấy cách để tuần tự hóa một JSONObject và viết nó vào một trả lời 
của servlet. 
Liệt kê 9. Tạo một trả lời JSON được tuần tự hóa từ một JSONObject 
public void doGet(HttpServletRequest req, HttpServletResponse res) 
throws java.io.IOException, ServletException 
{ String custId = req.getParameter("username"); 
 Customer customer = getCustomer(custId); 
 res.setContentType("application/x-json"); 
 res.getWriter().print(customer.toJSONObject()); 
} 
Như bạn thấy, thực sự không có gì với nó. Phương thức toString() trên 
JSONObject, được gọi ngầm ở đây, thực hiện tất cả công việc. Lưu ý rằng kiểu nội 
dung application/x-json ít tin cậy -- tại thời điểm của bài viết này không có sự nhất 
trí nào về những gì mà kiểu MIME của JSON sẽ có. Tuy nhiên, application/x-json 
là một lựa chọn nhạy cảm trong lúc này. Liệt kê 10 hiển thị một ví dụ trả lời từ mã 
servlet này. 
Liệt kê 10. Thể hiện JSON của một bean Customer 
{ "orders": 
 [ { "items": 
 [ { "price": "$49.99", 
 "description": "512 Megabyte Type 1 CompactFlash card. 
 Manufactured by Oolong Industries", 
 "name": "Oolong 512MB CF Card", 
 "id": "i-55768" }, 
 { "price": "$299.99", 
 "description": "7.2 Megapixel digital camera featuring 
 six shooting modes and 3x optical zoom. Silver.", 
 "name": "Fujak Superpix72 Camera", 
 "id": "i-74491" } 
 ], 
 "date": "08-26-2005", 
 "cost": "$349.98", 
 "id": "o-11123" } 
 ], 
 "realname": "James Hyrax", 
 "username": "jimmy66" 
} 
Sử dụng JSON trên máy khách 
Bước cuối cùng trong tiến trình là chuyển dữ liệu JSON thành các đối tượng 
JavaScript trên máy khách. Điều này có thể được thực hiện bằng một cuộc gọi đơn 
giản tới eval(), hàm diễn giải các chuỗi có chứa các biểu thức JavaScript đang hoạt 
động. Liệt kê 11 chuyển đổi một trả lời của JSON thành đồ thị đối tượng 
JavaScript và sau đó thực hiện nhiệm vụ của Liệt kê 5 về việc nhận được tên của 
mục đầu tiên từ đơn hàng cuối cùng của khách hàng. 
Liệt kê 11. Đánh giá một trả lời của JSON 
var jsonExpression = "(" + req.responseText + ")"; 
var customer = eval(jsonExpression); 
// Find name of first item in customer's last order 
var lastOrder = customer.orders[customer.orders.length-1]; 
var name = lastOrder.items[0].name; 
So sánh với Liệt kê 11 với Liệt kê 5 minh họa sự thuận lợi cho máy khách khi sử 
dụng JSON. Nếu dự án Ajax của bạn liên quan đến rất nhiều việc chuyển hướng 
của các trả lời máy chủ phức tạp trên máy khách, thì JSON cũng hấp dẫn với bạn. 
Việc đặt JSON và XMLHttpRequest với nhau cũng tạo một sự khởi đầu tương tác 
Ajax trông giống như một cuộc gọi RPC hơn là một yêu cầu SOA, có thể có sự 
liên quan đến việc thiết kế ứng dụng của bạn. Trong bài viết tiếp theo, tôi sẽ xem 
xét các khung công tác được thiết kế rõ ràng để cho phép mã JavaScript thực hiện 
các cuộc gọi phương thức từ xa trên các đối tượng phía máy chủ. 
Nhược điểm của JSON 
JSON có nhược điểm của nó. Việc sử dụng cách tiếp cận JSON minh họa ở đây, 
không có cách nào để điều chỉnh sự tuần tự hóa của đối tượng trên cơ sở cho mỗi 
yêu cầu, vì vậy các trường không cần thiết thường có thể được gửi qua mạng. 
Ngoài ra, việc bổ sung thêm phương thức toJSONObject() cho mỗi JavaBean 
không mở rộng hơn, mặc dù nó sẽ hoàn toàn dễ hiểu để viết JavaBean chung cho 
một trình tuần tự hóa (serializer) JSON khi sử dụng xem xét nội tại và các chú 
thích. Cuối cùng, nếu mã phía máy chủ của bạn theo hướng dịch vụ và không biến 
đổi chỉ để xử lý các yêu cầu từ một máy khách Ajax, thì XML là một lựa chọn tốt 
hơn do sự hỗ trợ phổ biến của nó. 
So sánh các kỹ thuật tuần tự hóa 
Bây giờ bạn đã thấy năm kỹ thuật khác nhau để chuyển trạng thái phía máy chủ 
Java cho một máy khách Ajax. Tôi đã thảo luận sự tuần tự hóa XML với mã hóa 
thủ công riêng của bạn, liên kết XML qua việc tạo mã, liên kết XML thông qua 
một cơ chế ánh xạ, việc tạo XML dựa trên khuôn mẫu và cuối cùng tuần tự hóa 
mã hóa thủ công tới JSON. Mỗi cái có những lợi thế và bất lợi riêng của nó và phù 
hợp tốt nhất với các kiến trúc ứng dụng khác nhau. 
Trong một nỗ lực tổng kết những lợi ích và hạn chế của từng cách tiếp cận, Bảng 1 
gán các điểm số gần đúng theo sáu loại: 
Khả năng mở rộng 
Mô tả cách tiếp cận thích nghi với một số lượng lớn các kiểu dữ liệu tốt như 
thế nào. Liệu khối lượng công việc mã hóa và cấu hình của bạn sẽ tăng theo 
mỗi kiểu bổ sung không? 
Dễ dàng tích hợp 
Đánh giá cách đơn giản để tích hợp công nghệ vào dự án của bạn. Nó có 
đòi hỏi quy trình xây dựng phức tạp hơn không? Liệu nó làm tăng tính phức 
tạp triển khai không? 
API của lớp Java 
Mô tả cách dễ dàng làm việc với các đối tượng Java phía máy chủ được sử 
dụng trong cách tiếp cận này. Bạn có bắt đầu viết các bean thông thường 
không hoặc bạn sẽ phải làm việc với các thể hiện tài liệu rắc rối không? 
Kiểm soát đầu ra 
Mô tả bạn có thể kiểm soát việc thể hiện tuần tự hóa của các lớp của bạn 
chính xác như thế nào. 
Tính linh hoạt của khung nhìn 
Đánh giá xem sự tuần tự hóa dữ liệu có tùy chỉnh, khác nhau có thể được 
tạo từ cùng một tập các đối tượng. 
Truy cập dữ liệu khách 
Mô tả mã JavaScript làm việc với dữ liệu trả lời của máy chủ dễ dàng như 
thế nào. 
Bảng 1. Các hành động có liên quan của các kỹ thuật tạo dữ liệu 
 Tự XML 
Liên kết 
XML qua 
việc tạo mã 
Liên kết 
XML qua 
ánh xạ 
XML tạo 
khuôn mẫu 
trang 
Tuần tự hóa 
JSSON mã hóa 
thủ công 
Khả năng mở 
rộng Kém Tốt Trung bình Trung bình Kém 
Dễ tích hợp Tốt Kém Trung bình Trung bình Tốt 
API của lớp 
Java Tốt Kém Tốt Tốt Tốt 
Kiểm soát 
đầu ra Tốt Tốt Trung bình Tốt Tốt 
Tính linh hoạt 
của khung 
nhìn 
Kém Kém Kém Tốt Kém 
Truy cập dữ 
liệu khách Kém Kém Kém Trung bình Tốt 
Kết luận 
Dữ liệu được biên dịch trong Bảng 1 không có ý muốn nói rằng bất kỳ trong số 
các công nghệ tuần tự hóa nào tốt hơn so với các công nghệ khác. Xét cho cùng, 
tầm quan trọng tương đối của mỗi một trong sáu loại phụ thuộc vào các chi tiết 
của dự án của bạn. Ví dụ, nếu bạn đang làm việc với hàng trăm kiểu dữ liệu, bạn 
muốn có khả năng mở rộng, vì thế việc tạo mã có lẽ là suy nghĩ tốt nhất của bạn. 
Nếu bạn cần phải tạo các khung nhìn khác nhau cho cùng một mô hình dữ liệu, 
việc tạo khuôn mẫu trang là cách thực hiện. Nếu bạn đang làm việc với một dự án 
quy mô nhỏ và muốn giảm bớt số lượng mã JavaScript mà bạn sẽ phải viết, hãy 
xem JSON. 
Hy vọng rằng bài viết này đã cho bạn những thông tin cần thiết để chọn một công 
nghệ tuần tự hóa phù hợp với ứng dụng của bạn. Xem phần Tài nguyên để tìm 
hiểu thêm về các công nghệ đã thảo luận tại đây. Bạn cũng nên để ý đến các phần 
tiếp theo của loạt bài này, ở đây tôi sẽ cho bạn thấy cách viết một ứng dụng Java 
Ajax bằng cách sử dụng Direct Web Remoting (DWR-Truy cập Web trực tiếp từ 
xa). Khung công tác DWR cho phép bạn gọi các phương thức trên các lớp Java 
của bạn trực tiếp từ mã JavaScript. Nói cách khác, nó sẽ giữ gìn công việc tuần tự 
hóa dữ liệu cho bạn để cho bạn có thể sử dụng Ajax ở một mức độ trừu tượng cao 
hơn. 
 Mục lục 
 Tạo XML từ các lớp Java 
 Tự tuần tự hóa 
 Các khung công tác liên kết XML 
 Các hệ thống tạo khuôn mẫu trang 
 Dữ liệu trả lời không có XML 
 Ký hiệu đối tượng JavaScript 
 So sánh các kỹ thuật tuần tự hóa 
 Kết luận 

File đính kèm:

  • pdfAjax cho các nhà phát triển Java Tuần tự hóa đối tượng Java cho Ajax.pdf
Tài liệu liên quan