1. Trang chủ
  2. » Công Nghệ Thông Tin

Ajax cho các nhà phát triển Java: Khảo sát bộ công cụ Web của Google Phát triển các ứng dụng Ajax từ một cơ sở mã Java pot

32 261 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 497,47 KB

Nội dung

Ajax cho nhà phát triển Java: Khảo sát công cụ Web Google Phát triển ứng dụng Ajax từ sở mã Java Philip McCarthy, Nhà Phát triển, SmartStream Technologies Ltd Tóm tắt: Google Web Toolkit (GWT-Bộ công cụ Web Google) phát hành toàn diện API công cụ cho phép bạn tạo ứng dụng Web động gần hoàn toàn mã Java™ Philip McCarthy quay lại loạt Ajax cho nhà phát triển Java ưa thích bạn thấy GWT làm giúp bạn định xem có với bạn khơng (Lưu ý: bạn tải tệp ZIP cập nhật có chứa mã nguồn viết này.) GWT (xem Tài nguyên) có cách tiếp cận khác thường để phát triển ứng dụng Web Thay sử dụng phân tách thơng thường sở mã phía máy khách phía máy chủ, GWT cung cấp Java API phép bạn tạo giao diện đồ họa người dùng (GUI) dựa thành phần, biên dịch chúng để hiển thị trình duyệt Web người dùng Việc sử dụng GWT rộng rãi để phát triển Swing hay SWT phát triển ứng dụng Web theo kinh nghiệm thơng thường thử trừu tượng hóa cách xa giao thức HTTP mơ hình HTML DOM Thật vậy, thực tế mà ứng dụng cuối biểu trình duyệt Web cảm thấy gần ngẫu nhiên GWT đạt thành tích thơng qua việc tạo mã, với trình biên dịch GWT tạo JavaScript từ mã Java phía máy khách bạn Nó hỗ trợ tập gói java.lang java.util, với API GWT cung cấp Một ứng dụng GWT biên dịch bao gồm đoạn mã HTML, XML JavaScript Tuy nhiên, đoạn mã gần giải ứng dụng biên dịch tốt coi hộp đen tương đương GWT mã byte (bytecode) Java Trong này, chạy qua việc tạo ứng dụng GWT đơn giản để lấy báo cáo thời tiết từ Web API từ xa hiển thị trình duyệt Theo cách này, tơi trình bày ngắn gọn nhiều khả GWT tốt đề cập đến số vấn đề tiềm mà bạn gặp phải Khởi đầu đơn giản Liệt kê cho thấy mã nguồn Java gần ứng dụng đơn giản mà bạn thực cách sử dụng GWT: Liệt kê Ví dụ GWT đơn giản public class Simple implements EntryPoint { public void onModuleLoad() { final Button button = new Button("Say 'Hello'"); button.addClickListener(new ClickListener() { public void onClick(Widget sender) { Window.alert("Hello World!"); } }); RootPanel.get().add(button); } } Điều trông giống mã GUI mà bạn có viết Swing, AWT SWT Như bạn đốn, Liệt kê tạo nút để hiển thị thông báo "Hello World!" bạn nhấn vào Nút thêm vào RootPanel, trình bao (wrapper) GWT quanh phần thân trang HTML Hình cho thấy ứng dụng hoạt động, chạy bên GWT Shell (trình bao) Shell mơi trường lưu trữ gỡ rối, kết hợp trình duyệt Web đơn giản, có GWT SDK Hình Ví dụ GWT đơn giản hoạt động Xây dựng ứng dụng Bản tin dự báo thời tiết (Weather Reporter) Tôi sử dụng GWT để tạo ứng dụng Bản tin dự báo thời tiết đơn giản GUI ứng dụng giới thiệu cho người dùng với hộp đầu vào để nhập mã bưu điện lựa chọn độ C độ F (Fahrenheit) để biểu diễn nhiệt độ Khi người dùng nhấn vào nút Submit (Gửi đi), ứng dụng sử dụng API Weather miễn phí Yahoo để nhận tin với định dạng RSS cho vị trí chọn Phần HTML tài liệu trích hiển thị cho người dùng Các ứng dụng GWT đóng gói thành mô đun phải tuân theo cấu trúc cụ thể Một tệp cấu hình có tên module-name gwt.xml định nghĩa lớp hoạt động lối vào ứng dụng thị xem nguồn tài nguyên có cần thừa hưởng từ mô đun GWT khác không Bạn phải đặt tệp cấu hình cấu trúc gói nguồn ứng dụng mức gói có tên client, nơi tất mã Java phía máy khách lưu trữ thư mục có tên public (cơng cộng), có chứa Tài ngun Web dự án hình ảnh, CSS HTML Cuối cùng, thư mục public phải bao gồm tệp HTML có thẻ meta có chứa tên đủ điều kiện mơ đun Thư viện JavaScript chạy GWT sử dụng tệp để khởi tạo ứng dụng applicationCreator GWT tạo cấu trúc cho bạn, vào tên lớp lối vào bạn Vì vậy, việc gọi applicationCreator developerworks.gwt.weather.client.Weather tạo phác thảo dự án mà tơi sử dụng điểm khởi đầu cho ứng dụng Bản tin dự báo thời tiết Nguồn tải cho ứng dụng bao gồm tệp xây dựng Ant (Ant Build file) có chứa số tiêu có ích để làm việc với dự án GWT phù hợp với cấu trúc (xem Tải về) Phát triển GUI Trước tiên, tơi phát triển cách bố trí tiện ích (widget) giao diện người dùng ứng dụng, mà không cần thêm hành vi Siêu lớp hầu hết thứ mà bạn đưa giao diện người dùng GWT lớp Widget Các Widget chứa Panel (bảng), mà Widget lồng Các kiểu khác panel cung cấp hành vi bố trí khác Vì vậy, Panel GWT đóng vai trị tương tự Layout (cách bố trí) AWT/Swing Box XUL Cuối tất widget panel phải gắn vào trang Web chứa chúng Như bạn thấy Liệt kê 1, bạn gắn chúng trực tiếp vào RootPanel Ngồi ra, bạn sử dụng RootPanel để nhận tham chiếu đến phần tử HTML mã nhận dạng (ID) hay tên lớp (classnames) chúng xác định Trong trường hợp này, sử dụng hai phần tử HTML DIV riêng biệt có tên input-container (thùng chứa-đầu vào) output-container (thùng chứa-đầu ra) Thùng chứa chứa điều khiển UI cho Bản tin dự báo thời tiết, thùng chứa thứ hai hiển thị tin dự báo thời tiết Liệt kê cho thấy đoạn mã cần thiết để thiết lập cách bố trí bản; tự giải thích Widget HTML đơn giản thùng chứa để đánh dấu HTML Đây nơi kết đầu HTML từ nguồn cấp liệu thời tiết Yahoo! hiển thị Tất mã hoạt động bên phương thức onModuleLoad() lớp Weather (Thời tiết), giao diện EntryPoint cung cấp Phương thức gọi trang Web nhúng mơ đun Weather nạp vào trình duyệt Web máy khách Liệt kê Bố trí mã cho tin dự báo thời tiết public void onModuleLoad() { HorizontalPanel inputPanel = new HorizontalPanel(); // Align child widgets along middle of panel inputPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); Label lbl = new Label("5-digit zipcode: "); inputPanel.add(lbl); TextBox txBox = new TextBox(); txBox.setVisibleLength(20); inputPanel.add(txBox); // Create radio button group to select units in C or F Panel radioPanel = new VerticalPanel(); RadioButton ucRadio = new RadioButton("units", "Celsius"); RadioButton ufRadio = new RadioButton("units", "Fahrenheit"); // Default to Celsius ucRadio.setChecked(true); radioPanel.add(ucRadio); radioPanel.add(ufRadio); // Add radio buttons panel to inputs inputPanel.add(radioPanel); // Create Submit button Button btn = new Button("Submit"); // Add button to inputs, aligned to bottom inputPanel.add(btn); inputPanel.setCellVerticalAlignment(btn, HasVerticalAlignment.ALIGN_BOTTOM); RootPanel.get("input-container").add(inputPanel); // Create widget for HTML output HTML weatherHtml = new HTML(); RootPanel.get("output-container").add(weatherHtml); } Hình cho thấy cách bố trí thể GWT Shell: Hình Cách bố trí GUI Thêm kiểu dáng nhờ CSS Trang Web thể trơng buồn tẻ, lợi dụng số quy tắc kiểu dáng CSS (Bảng định kiểu nhiều tầng) Bạn có vài cách tiếp cận để định kiểu ứng dụng GWT Trước tiên, theo mặc định, widget có tên lớp CSS theo dạng project-widget Ví dụ, gwt-Button gwt-RadioButton hai số tên lớp widget GWT cốt lõi Các panel thường triển khai thực búi bảng lồng khơng có tên lớp mặc định Cách tiếp cận kiểu widget cho tên lớp mặc định cho phép dễ dàng định kiểu widget cách thống toàn ứng dụng bạn Tất nhiên, áp dụng quy tắc chọn CSS thơng thường bạn khai thác chúng để áp dụng kiểu dáng khác cho kiểu widget giống tùy thuộc vào ngữ cảnh Để ln linh hoạt hơn, bạn thay tăng thêm tên lớp mặc định widgets sở đặc biệt cách gọi phương thức setStyleName() addStyleName() chúng Liệt kê kết hợp cách tiếp cận để áp dụng kiểu dáng cho bảng nhập vào ứng dụng Bản tin dự báo thời tiết Tên lớp weather-input-panel tạo Weather.java với gọi đến inputPanel.setStyleName("weatherinput-panel"); Liệt kê Áp dụng kiểu dáng bảng định khiểu (CSS) cho bảng nhập vào ứng dụng Bản tin dự báo thời tiết /* Style the input panel itself */ weather-input-panel { background-color: #AACCFF; border: 2px solid #3366CC; font-weight: bold; } /* Apply padding to every element within the input panel */ weather-input-panel * { padding: 3px; } /* Override the default button style */ gwt-Button { background-color: #3366CC; color: white; font-weight: bold; border: 1px solid #AACCFF; } /* Apply a hover effect to the button */ gwt-Button:hover { background-color: #FF0084; } Hình hiển thị lại ứng dụng, với kiểu dáng chỗ: Hình Bảng nhập vào với kiểu dáng áp dụng Thêm hành vi phía máy khách Bây cách bố trí việc định kiểu ứng dụng thực hiện, tơi bắt đầu áp dụng số hành vi phía máy khách Bạn sử dụng mẫu Listener (Người nghe) quen thuộc để thực xử lý kiện GWT GWT cung cấp giao diện Listener cho kiện chuột, kiện bàn phím, kiện thay đổi v.v, số lớp adapter lớp helper cho thuận tiện Nói chung, bạn thêm người nghe kiện cách thể lớp bên ẩn danh quen thuộc với lập trình viên Swing Tuy nhiên, tham số tất phương thức Listener GWT người gửi kiện, thường widget mà người dùng tương tác với Điều có nghĩa bạn đính kèm cá thể Listener cho nhiều widget cần thiết; bạn sử dụng tham số người gửi để xác định widget số chúng thực kiện Liệt kê cho thấy việc thực hai người nghe kiện ứng dụng tin dự báo thời tiết Một trình xử lý (handler) nhấn nút thêm vào cho nút Submit (Gửi đi) trình điều khiển bàn phím (keyhandler) thêm vào cho TextBox Dù nhấn chuột vào nút Submit ấn phím Enter TextBox xuất làm cho trình xử lý có liên quan gọi phương thức riêng validateAndSubmit() Ngoài mã Liệt kê 4, txBox ucRadio trở Nhiều thứ bắt đầu tách khỏi cách tiếp cận RMI tiêu chuẩn điểm Vì gọi Ajax từ JavaScript khơng đồng bộ, nên cần có số cơng việc bổ sung thêm để định nghĩa giao diện không đồng bộ, mã máy khách sử dụng giao diện để gọi dịch vụ Các chữ kí phương thức giao diện không đồng khác với giao diện truy cập từ xa, GWT dựa vào việc đặt tên gần ma thuật (Magical Coincidental Naming) Nói cách khác, mối quan hệ biên dịch-thời gian tĩnh không tồn giao diện không đồng giao diện truy cập từ xa, GWT tìm hiểu qua quy ước đặt tên Liệt kê giao diện không đồng cho WeatherService: Liệt kê Giao diện không đồng cho WeatherService public interface WeatherServiceAsync { /** * Fetch HTML description of weather, pass to callback * @param zip zipcode to fetch weather for * @param isCelsius true to fetch temperatures in celsius, * false for fahrenheit * @param callback Weather HTML will be passed to this callback handler */ public void getWeatherHtml(String zip, boolean isCelsius, AsyncCallback callback); } Như bạn nhận thấy, ý tưởng chung tạo giao diện gọi MyServiceAsync để cung cấp cho chữ kí phương thức, loại bỏ kiểu trả thêm tham số phụ kiểu AsyncCallback Giao diện không đồng phải gói giao diện truy cập từ xa Lớp AsyncCallback có hai phương thức: onSuccess() onFailure() Nếu gọi tới dịch vụ thành cơng, onSuccess() gọi với giá trị trả gọi dịch vụ Nếu gọi từ xa không thành công, onFailure() gọi thơng qua Throwable dịch vụ tạo để thể nguyên nhân gây lỗi Gọi dịch vụ từ máy khách Với WeatherService giao diện khơng đồng chỗ, tơi thay đổi khách hàng Bản tin dự báo thời tiết để gọi dịch vụ xử lý trả lời Bước mã thiết lập soạn sẵn: tạo cá thể WeatherServiceAsync cho khách hàng Weather sử dụng cách gọi GWT.create(WeatherService.class) tạo khuôn mẫu xuống đối tượng mà trả Tiếp theo WeatherServiceAsync phải khn mẫu cho ServiceDefTarget cho setServiceEntryPoint() gọi setServiceEntryPoint() trỏ vào nhánh rẽ WeatherServiceAsync URL việc thực dịch vụ từ xa tương ứng triển khai Lưu ý việc thực mã hóa cứng thời gian biên dịch Vì mã trở thành mã JavaScript dùng trình duyệt Web, nên khơng có cách để tìm kiếm URL từ tệp đặc tính thời gian chạy Rõ ràng, việc ràng buộc khả di động ứng dụng Web GWT biên dịch Liệt kê cho thấy việc thiết lập đối tượng WeatherServiceAsync đưa thực fetchWeatherHtm(), mà tơi đề cập trước (xem Thêm hành vi phía máy khách): Liệt kê Sử dụng RPC để gọi dịch vụ truy cập từ xa // Statically configure RPC service private static WeatherServiceAsync ws = (WeatherServiceAsync) GWT.create(WeatherService.class); static { ((ServiceDefTarget) ws).setServiceEntryPoint("ws"); } /** * Asynchronously call the weather service and display results */ private void fetchWeatherHtml(String zip, boolean isCelsius) { // Hide existing weather report hideHtml(); // Call remote service and define callback behavior ws.getWeatherHtml(zip, isCelsius, new AsyncCallback() { public void onSuccess(Object result) { String html = (String) result; // Show new weather report displayHtml(html); } public void onFailure(Throwable caught) { Window.alert("Error: " + caught.getMessage()); txBox.setEnabled(true); } }); } Cuộc gọi thực tế đến getWeatherHtml() dịch vụ dễ dàng thực hiện, với lớp trình xử lý gọi lại ẩn danh Lớp đơn giản chuyển trả lời máy chủ vào phương thức để hiển thị Hình cho thấy ứng dụng hoạt động hiển thị tin dự báo thời tiết lấy từ API thời tiết Yahoo: Hình Ứng dụng tin dự báo thời tiết hiển thị tin lấy từ Yahoo! Sự cần thiết việc xác nhận hợp lệ phía máy chủ Sự kết hợp GWT mã phía máy khách phía máy chủ vốn nguy hiểm Vì bạn lập trình thứ ngơn ngữ Java, với trừu tượng GWT che giấu phân tách máy khách/máy chủ, nên người ta dễ nghĩ sai mã máy khách bạn tin cậy thời gian chạy Đây sai lầm Bất kỳ mã thực trình duyệt Web bị làm giả vịng hồn tồn, người dùng xấu GWT đưa mức khó hiểu cao để giảm nhẹ vấn đề mức, điểm cơng thứ hai cịn: lưu lượng HTTP truyền dẫn máy khách GWT bạn dịch vụ Giả sử tơi kẻ công muốn khai thác điểm yếu ứng dụng tin dự báo thời tiết Hình công cụ Fiddler Microsoft chặn yêu cầu từ máy khách tin dự báo thời tiết tới WeatherService chạy máy chủ Khi bị chặn lại, Fiddler cho phép bạn thay đổi phần yêu cầu Văn tơ sáng cho biết tơi tìm thấy mã bưu điện mà tơi xác định mã hóa theo u cầu nằm đâu Bây tơi thay đổi mã bưu điện thành mã mà tơi thích, có lẽ từ "10001" "XXXXX." Hình Sử dụng Fiddler để bỏ qua xác nhận hợp lệ phía máy khách Bây giờ, giả sử số mã phía máy chủ chưa sử dụng YahooWeatherServiceImpl gọi Integer.parseInt() theo mã bưu điện Sau đó, mã bưu điện phải chuyển qua việc kiểm tra xác nhận hợp lệ tích hợp vào phương thức validateAndSubmit() Weather có khơng? Đúng, bạn thấy, việc kiểm tra bị hỏng NumberFormatException đưa Trong trường hợp này, khơng có điều khủng khiếp xảy kẻ cơng nhìn thấy thông báo lỗi máy khách Tuy nhiên, khả xảy tồn lớp cơng chống lại ứng dụng GWT quan tâm đến liệu nhạy cảm Hãy tưởng tượng mã bưu điện thay cho số mã nhận dạng ID khách hàng ứng dụng theo dõi đơn hàng Việc ngăn chặn thay đổi giá trị để lộ thơng tin tài nhạy cảm khách hàng khác Bất kỳ đâu có truy vấn sở liệu sử dụng giá trị, cách tiếp cận cho phép xảy cơng bên SQL Khơng có cơng hoạt động thông minh cho làm việc với ứng dụng Ajax trước Bạn cần kiểm tra hai lần giá trị đầu vào cách xác nhận lại chúng bên phía máy chủ Điều quan trọng ghi nhớ số mã Java mà bạn viết ứng dụng GWT bạn chất không đáng tin cậy thời gian chạy Tuy nhiên đám mây GWT khơng có lớp lót bảo vệ bạc Trong ứng dụng Bản tin dự báo thời tiết, viết ZipCodeValidator để sử dụng máy khách, tơi đơn giản di chuyển vào gói client.common tơi sử dụng lại việc xác nhận hợp lệ giống phía máy chủ Liệt kê cho thấy việc kiểm tra kết hợp vào YahooWeatherServiceImpl: Liệt kê ZipCodeValidator kết hợp vào YahooWeatherServiceImpl public String getWeatherHtml(String zip, boolean isCelsius) throws WeatherException { if (!new ZipCodeValidator().isValid(zip)) { log.warn("Invalid zipcode: "+zip); throw new WeatherException("Zip-code must have digits"); } Gọi JavaScript địa với JSNI Các thư viện hiệu ứng trực quan trở nên ngày phổ biến việc phát triển ứng dụng Web, dù hiệu ứng chúng sử dụng để cung cấp cách xử lý tương tác người dùng thích hợp thêm đẹp đẽ Tơi muốn thêm số trang trí (eye-candy) cho ứng dụng Bản tin dự báo thời tiết GWT không cung cấp kiểu chức này, JavaScript Native Interface (JSNI Giao diện địa JavaScript) đưa giải pháp JSNI cho phép bạn thực gọi JavaScript trực tiếp từ mã Java máy khách GWT Điều có nghĩa là, ví dụ, tơi tận dụng hiệu ứng từ thư viện Scriptaculous (xem Tài nguyên) từ thư viện giao diện người dùng Yahoo JSNI sử dụng kết hợp khéo léo từ khóa native ngơn ngữ Java JavaScript nhúng khối bình luận đặc biệt Có thể giải thích rõ ràng ví dụ, Liệt kê 10 cho thấy phương thức gọi hiệu ứng Scriptaculous cụ thể Element: Liệt kê 10 Gọi hiệu ứng Scriptaculous JSNI /** * Publishes HTML to the weather display pane */ private void displayHtml(String html) { weatherHtml.setHTML(html); applyEffect(weatherHtml.getElement(), "Appear"); } /** * Applies a Scriptaculous effect to an element * @param element The element to reveal */ private native void applyEffect(Element element, String effectName) /*-{ // Trigger named Scriptaculous effect $wnd.Effect[effectName](element); }-*/; Đây mã Java hồn tồn hợp lệ trình biên dịch thấy private native void applyEffect(Element element, String effectName); GWT phân tích cú pháp nội dung khối bình luận đưa kết JavaScript nguyên văn GWT cung cấp biến $wnd $doc để tham khảo đối tượng cửa sổ tài liệu Trong trường hợp này, cần truy cập vào đối tượng Effect Scriptaculous mức cao sử dụng cú pháp đối tượng-người truy cập (accessor) dùng dấu ngoặc vng JavaScript để gọi chức có tên người gọi định Kiểu Element kiểu "ma thuật" GWT cung cấp để thể cho phần tử bên Widget hai mã Java JavaScript Các String số kiểu khác chuyển qua suốt mã Java JavaScript thông qua JSNI Bây tơi có tin dự báo thời tiết dần vẻ đẹp liệu trả từ máy chủ Chi tiết cuối kích hoạt lại mã bưu điện TextBox hiệu ứng hồn tất Scriptaculous sử dụng chế gọi lại không đồng để thơng báo cho người nghe vịng đời hiệu ứng Đây nơi thứ nhận phức tạp tơi cần có JavaScript gọi lại mã Java khách hàng GWT Trong JavaScript, bạn gọi hàm với số đối số tùy ý, đó, tải phương thức kiểu dáng Java không tồn Điều có nghĩa JSNI cần sử dụng cú pháp khó sử dụng đề cập đến phương thức Java để làm rõ tải Tài liệu GWT nói rõ cú pháp sau: [instance-expr.]@class-name::method-name(param-signature)(arguments) Bộ phận instance-expr phần tùy chọn phương thức tĩnh gọi không cần cho tham khảo đối tượng Hơn nữa, dễ dàng thấy qua ví dụ minh họa, Liệt kê 11: Liệt kê 11 Gọi lại vào mã Java JSNI /** * Applies a Scriptaculous effect to an element * @param element The element to reveal */ private native void applyEffect(Element element, String effectName) /*-{ // Keep reference to self for use inside closure var weather = this; // Trigger named Scriptaculous effect $wnd.Effect[effectName](element, { afterFinish : function () { // Make call back to Weather object weather.@developerworks.gwt.weather.client.Weather::effectFinished()(); } }); }-*/; /** * Callback triggered when a Scriptaculous effect finishes * Re-enables the input textbox */ private void effectFinished() { this.txBox.setEnabled(true); this.txBox.setFocus(true); } Phương thức applyEffect() thay đổi để chuyển đối số phụ afterFinish tới Scriptaculous Giá trị afterFinish hàm ẩn danh, gọi hiệu ứng thực Điều giống cách diễn đạt lớp bên ẩn danh trình xử lý kiện GWT sử dụng Cuộc gọi lại thực vào mã Java thực cách xác định thể đối tượng Weather để gọi yêu cầu, sau toàn tên đủ điều kiện lớp Weather, tiếp đến tên hàm để gọi Cặp rỗng ngoặc đơn chứng tỏ muốn gọi phương thức có tên effectFinished() khơng có đối số Tập thứ hai ngoặc đơn gọi hàm Thủ thuật biến cục bộ, weather, giữ tài liệu tham khảo this (này) Do cách JavaScript gọi ngữ nghĩa thực hiện, biến this hàm afterFinish thực đối tượng Scriptaculous Scriptaculous thực gọi hàm Việc tạo this ngồi tập kín cách giải đơn giản Bây giải thích số khả JSNI, tơi cách tốt nhiều việc tích hợp Scriptaculous vào GWT cách bao bọc chức hiệu ứng Scriptaculous widget GWT tùy chỉnh Điều xác với mà Alexei Sokolov thực Thư viện thành phần GWT (xem Tài nguyên) Bây làm tất với ứng dụng tin dự báo thời tiết, xem xét số lợi ích nhược điểm việc phát triển Web với GWT Tại lại sử dụng GWT? Trái ngược với bạn mong đợi, ứng dụng GWT rõ ràng không giống Web Về GWT khai thác trình duyệt mơi trường thời gian chạy cho ứng dụng GUI đơn giản kết gần với bạn phát triển Morfik, OpenLaszlo, Flash chí, với ứng dụng Web thơng thường Theo đó, GWT thích hợp tốt cho ứng dụng Web tồn GUI Ajax phong phú trang Nó có lẽ khơng phải trùng hợp ngẫu nhiên mà điều tiêu biểu cho số phát hành beta gần Google, ứng dụng Calendar (Lịch biểu) Spreadsheet (Bảng tính) Đây ứng dụng đáng kể, bạn giải tất tình nghiệp vụ sử dụng cách tiếp cận Đa số ứng dụng Web hồn tồn phù hợp với mơ hình giữa-trang Ajax cho phép mơ hình mẫu tương tác phong phú sử dụng nơi cần thiết GWT không chạy tốt với ứng dụng giữa-trang truyền thống Mặc dù có khả kết hợp widget GWT với đầu vào dạng HTML thông thường, trạng thái widget GWT ngăn chặn khỏi phần lại trang Ví dụ, khơng có cách đơn giản để gửi giá trị lựa chọn từ widget Tree (Cây) GWT phần dạng quy Cấp giấy phép Các thư viện thời gian chạy GWT cấp phép theo Giấy phép Apache 2.0 bạn sử dụng GWT miễn phí để tạo ứng dụng thương mại Tuy nhiên, chuỗi công cụ GWT cung cấp dạng nhị phân không phép sửa đổi Điều bao gồm trình biên dịch Java-sang-JavaScript Điều có nghĩa lỗi JavaScript tạo bạn nằm ngồi tầm kiểm sốt bạn Một vấn đề cụ thể tin cậy GWT vào việc phát tác nhân-người dùng: Mỗi phát hành trình duyệt địi hỏi cập nhật cho công cụ GWT để cung cấp hỗ trợ Nếu bạn định sử dụng ứng dụng GWT môi trường ứng dụng J2EE, thiết kế GWT làm cho việc tích hợp tương đối đơn giản Trong kịch này, dịch vụ GWT nên nghĩ đến giống với Action Struts tầng mỏng đơn giản ủy quyền cho yêu cầu Web gọi theo logic nghiệp vụ tầng sau Vì dịch vụ GWT HTTP servlets, nên chúng dễ dàng tích hợp vào Struts SpringMVC chẳng hạn đặt phía sau lọc xác thực GWT có vài lỗi đáng kể Đầu tiên thiếu dự phòng cho xuống cấp từ từ Cách thực hành tốt phát triển ứng dụng Web đại tạo trang hoạt động mà không cần JavaScript sau sử dụng nơi có sẵn để làm đẹp bổ sung thêm hành vi Trong GWT, JavaScript khơng có sẵn, bạn khơng nhận UI hết Đối với vài lớp ứng dụng Web, trình ngắt thỏa thuận trực tiếp (deal-breaker) Tính quốc tế hóa vấn đề lớn GWT Vì lớp Java khách hàng GWT chạy trình duyệt, chúng khơng có quyền truy cập vào đặc tính bó tài nguyên để lấy chuỗi địa hoá thời gian chạy Một cách giải khác phức tạp có sẵn địi hỏi lớp lớp phía máy khách tạo cho vị trí (xem Tài nguyên), kỹ sư GWT tiếp tục thực giải pháp khả thi Trường hợp cho việc tạo mã Có lẽ vấn đề gây tranh cãi kiến trúc GWT chuyển đổi sang ngơn ngữ Java cho mã phía máy chủ Một số người ủng hộ GWT đề nghị việc viết mã phía máy khách ngơn ngữ Java chất thích hợp việc viết JavaScript Đây khơng phải khung nhìn chung cho tất nhiều người viết mã JavaScript miễn cưỡng hy sinh tính linh hoạt tính diễn cảm ngôn ngữ họ cho cố gắng phát triển Java nặng nề Một tình thay mã Java cho JavaScript hấp dẫn nhóm phát triển thiếu nhà phát triển Web có kinh nghiệm Tuy nhiên, nhóm chuyển sang phát triển Ajax, cách làm tốt th lập trình viên JavaScript có kỹ dựa vào người viết mã Java để làm mã JavaScript khó hiểu với cơng cụ độc quyền không quen thuộc Các lỗi không tránh rị rỉ thơng tin gây theo trừu tượng mà GWT trải rộng qua JavaScript, HTTP HTML lập trình viên Web thiếu kinh nghiệm nhiều thời gian theo dõi chúng Theo nhà phát triển blogger Dimitri Glazkov đưa nó, "Nếu bạn xử lý JavaScript, bạn không nên viết mã cho ứng dụng Web HTML, CSS JavaScript ba điều kiện tiên cho công việc này" (Xem Tài nguyên) Một số người biện luận việc viết mã Java bị lỗi lập trình JavaScript, nhờ định kiểu tĩnh kiểm tra lúc dịch Đây lý lẽ sai lầm Có thể viết mã ngôn ngữ nhiều ứng dụng Java có lỗi có mặt để chứng minh điều Bạn phụ thuộc vào việc tạo mã GWT khơng có lỗi Tuy nhiên, việc kiểm tra cú pháp ngoại tuyến xác nhận hợp lệ mã phía máy khách chắn có ích Nó có sẵn cho JavaScript dạng JSLint Douglas Crockford (xem Tài nguyên) Mặc dù GWT trội dạng thử nghiệm đơn vị, cung cấp tích hợp JUnit cho mã phía khách Sự hỗ trợ thử nghiệm đơn vị lĩnh vực JavaScript thiếu nhiều Trong việc phát triển ứng dụng Bản tin dự báo thời tiết, trường hợp hấp dẫn mà tơi tìm thấy cho mã Java phía máy khách khả chia sẻ lớp xác nhận hợp lệ hai tầng Điều rõ ràng tiết kiệm nỗ lực phát triển Điều giống áp dụng cho lớp chuyển qua RPC; bạn cần mã hóa chúng lần bạn sử dụng mã phía máy khách phía máy chủ cho chúng Thật khơng may, trừu tượng có khe hở: trình xác nhận hợp lệ (validator) mã bưu điện tơi chẳng hạn, tơi có khả sử dụng biểu thức quy để thực việc kiểm tra Tuy nhiên, GWT không triển khai thực phương thức String.match() Ngay thực hiện, biểu thức quy GWT có khác biệt cú pháp triển khai mã máy khách máy chủ Điều tin cậy GWT theo chế biểu thức quy (regexp) mơi trường máy chủ ví dụ cố mà trừu tượng hóa chưa hồn thiện đưa bạn vào cố Một thắng lợi lớn mà GWT giành chế RPC hóa kèm theo đối tượng mã Java JavaScript Điều loại bỏ nhiều cố gắng để hồn thành cơng việc mà bạn thấy ứng dụng Ajax bậc trung Mặc dù khơng có tiền lệ Nếu bạn muốn chức khơng có phần cịn lại GWT, sau DWR, đưa RPC với đối tượng xếp theo thứ tự đến từ mã Java sang JavaScript, đáng xem xét (xem Tài nguyên) GWT làm công việc tốt việc trừu tượng hóa ngồi số khía cạnhmức thấp phát triển ứng dụng Ajax, chẳng hạn qua khơng tương thích trình duyệt chéo nhau, mơ hình kiện DOM thực gọi Ajax Nhưng công cụ JavaScript đại Yahoo! UI Library, Dojo MochiKit tất cung cấp mức độ trừu tượng tương tự mà không cần phải sử dụng đến việc tạo mã Hơn nữa, tất công cụ mã nguồn mở, nên bạn tùy biến chúng cho phù hợp với nhu cầu sửa chữa lỗi phát sinh Điều khơng thể có với hộp đen GWT (xem phần bên Việc cấp phép) Kết luận GWT khung cơng tác tồn diện cung cấp nhiều chức có ích Tuy nhiên, GWT cách tiếp cận tất cả-hoặc-không, tập trung vào dịch vụ nhỏ tương đối thị trường phát triển ứng dụng Web Tôi hy vọng chuyến ngắn cho bạn cảm giác khả GWT hạn chế Mặc dù chắn không phù hợp với nhu cầu người, GWT thành tựu kỹ thuật lớn xứng đáng xem xét nghiêm chỉnh bạn thiết kế ứng dụng Ajax GWT có bề rộng sâu thứ mà khám phá đây, làm đọc tài liệu Google để biết nhiều tham gia thảo luận diễn đàn nhà phát triển GWT (xem Tài nguyên) Mục lục  Khởi đầu đơn giản  Xây dựng ứng dụng Bản tin dự báo thời tiết (Weather Reporter)  Gỡ rối phía máy khách với Shell GWT  Giao tiếp với các thành phần phía máy chủ  Gọi dịch vụ từ máy khách  Sự cần thiết việc xác nhận hợp lệ phía máy chủ  Gọi JavaScript địa với JSNI  Tại lại sử dụng GWT?  Kết luận ... viết mã JavaScript miễn cưỡng hy sinh tính linh hoạt tính diễn cảm ngôn ngữ họ cho cố gắng phát triển Java nặng nề Một tình thay mã Java cho JavaScript hấp dẫn nhóm phát triển thiếu nhà phát triển. .. thời gian chạy cho ứng dụng GUI đơn giản kết gần với bạn phát triển Morfik, OpenLaszlo, Flash chí, với ứng dụng Web thơng thường Theo đó, GWT thích hợp tốt cho ứng dụng Web tồn GUI Ajax phong phú... lý JavaScript, bạn khơng nên viết mã cho ứng dụng Web HTML, CSS JavaScript ba điều kiện tiên cho công việc này" (Xem Tài nguyên) Một số người biện luận việc viết mã Java bị lỗi lập trình JavaScript,

Ngày đăng: 07/08/2014, 10:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w