XML: Cầu nối giữa GWT và PHP GWT có thể sử dụng các dịch vụ PHP, và XML cung cấp một cầu nối giúp trao đổi dữ liệu giữa chúng trở nên đơn giản pptx

22 416 0
XML: Cầu nối giữa GWT và PHP GWT có thể sử dụng các dịch vụ PHP, và XML cung cấp một cầu nối giúp trao đổi dữ liệu giữa chúng trở nên đơn giản pptx

Đ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

XML: Cầu nối giữa GWT và PHP GWT có thể sử dụng các dịch vụ PHP, và XML cung cấp một cầu nối giúp trao đổi dữ liệu giữa chúng trở nên đơn giản Federico Kereki, Kỹ sư hệ thống, 自由职业者 Tóm tắt: Các ứng dụng trong bộ công cụ Web của Google (Google Web Tools), ngoại trừ việc kết nối tới các servlet bằng ngôn ngữ Java™ đang được ưa chuộng, nó cũng có thể sử dụng các dịch vụ Web PHP để gửi và nhận dữ liệu trong XML. Bạn sẽ khảo sát các phương thức để tạo ra các tài liệu XML và xử lý chúng bằng cả hai ngôn ngữ Java và PHP. (Servlets là các đối tượng của ngôn ngữ Java, nó xử lý động các yêu cầu và sinh các trả lời, nó chạy trên máy chủ) GWT cho phép dễ dàng truy cập đến các servlet phía-máy chủ được lập trình bằng ngôn ngữ Java, và dữ liệu được di chuyển một cách rõ ràng theo chuẩn nhất định giữa máy khách và máy chủ. Tuy nhiên, khi bạn làm việc với GWT, bạn không bị giới hạn khi giao tiếp với các servlet, và bạn có thể tự do chuyển đổi dữ liệu với tất cả các loại dịch vụ Web. Trong nhiều trường hợp (với các dịch vụ đơn giản), bạn có thể chuyển đổi với đoạn văn bản đơn giản, nhưng với dữ liệu có cấu trúc hoặc phức tạp hơn (ví dụ như RSS), sự khác biệt với XML sẽ được thể hiện rõ. Bài viết này khảo sát một ứng dụng GWT đơn giản và một vài dịch vụ Web PHP, nhằm chỉ ra một vài cách khác nhau để tạo ra và sử dụng các tài liệu XML. Điều này có nghĩa rằng nó không những là một tài liệu hướng dẫn tỉ mỉ hay một cuốn sổ tay hướng dẫn mà hơn thế nữa chúng là các lời gợi ý hay lời mách nước mà bạn có thể dễ dàng hơn khi bắt đầu làm việc với XML trong vai trò như là một cầu nối giữa GWT và PHP. Một ứng dụng thử nghiệm JSON: Có thể tồn tại chung với ngôn ngữ khác Phần độc đáo của ngôn ngữ JavaScript™, JavaScript Object Notation (JSON) cuối cùng cũng ra đời có đầy đủ những tính năng có thể thay thế XML một cách hiệu quả. JSON cung cấp một định dạng dựa trên văn bản đơn giản, dễ đọc đại diện cho các mảng và các đối tượng. Hơn thế nữa, chắc chắn là XML và JSON miêu tả cho cùng dữ liệu mà các dữ liệu này có thể tương đương về dung dượng. Một vài trang Web nổi tiếng (ví dụ như Google hay Yahoo!) cung cấp JSON cũng giống như XML. Một lợi thế của JSON là JavaScript có thể xử lý rất nhanh (thí dụ nó có thể chuyển đổi JSON thành một đối tượng với duy nhất một câu lệnh), điều này giúp nó có sức lôi cuốn lớn đối với các nhà phát triển Web. Bởi vì GWT biên dịch tất cả mã lệnh phía máy khách thành mã lệnh JavaScript, điều này chứng tỏ một lý lẽ rằng GWT cung cấp một thư viện tốt cho nó, và tất cả các ví dụ trong bài viết này cũng có thể được lập trình với JSON thay vì dùng XML. Hãy ghé thăm Tài nguyên để có các liên kết nhằm biết thêm thông tin về JSON. Nhằm chỉ ra làm thế nào bạn có thể sử dụng XML như là một cầu nối giữa PHP và GWT, tôi cung cấp một ứng dụng đơn giản dựa trên cơ sở dữ liệu về các quốc gia/các vùng miền/các thành phố. Khi nhìn vào đoạn mã tạo cơ sở dữ liệu trong Ví dụ 1, bạn có thể thấy rằng:  Các quốc gia đều có một mã riêng và duy nhất (ví dụ, UY cho Uruguay) và kèm theo là tên nước.  Các quốc gia được chia thành các vùng miền, được nhận dạng cùng với mã (mã này là duy nhất trong quốc gia đó) và kèm theo tên vùng miền.  Các vùng miền có các thành phố, chúng có một tên (dựa theo mã ASCII thuần túy), và một tên chính xác của thành phố đó (chúng có thể bao gồm các ký tự lạ tùy thuộc vào ngôn ngữ của quốc gia đó), dân số (hoặc bằng 0 nếu không được xác định), vĩ độ và kinh độ. Tên của thành phố có thể trùng với tên thành phố của các vùng miền khác trong quốc gia đó. Ví dụ 1. Đoạn mã tạo cơ sở dữ liệu CREATE DATABASE world DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci; USE world; CREATE TABLE countries ( countryCode char(2) NOT NULL, countryName varchar(50) NOT NULL, PRIMARY KEY (countryCode) KEY countryName (countryName) ); CREATE TABLE regions ( countryCode char(2) NOT NULL, regionCode char(2) NOT NULL, regionName varchar(50) NOT NULL, PRIMARY KEY (countryCode,regionCode), KEY regionName (regionName) ); CREATE TABLE cities ( countryCode char(2) NOT NULL, cityName varchar(50) NOT NULL, cityAccentedName varchar(50) NOT NULL, regionCode char(2) NOT NULL, population bigint(20) NOT NULL, latitude float(10,7) NOT NULL, longitude float(10,7) NOT NULL, KEY `INDEX` (countryCode,regionCode,cityName), KEY cityName (cityName), KEY cityAccentedName (cityAccentedName) ); Tôi tạo ra một dự án GWT đơn giản với chỉ một biểu mẫu và một vài dịch vụ Web PHP. (Bạn có thể tải về máy tính để có đoạn mã nguồn đầy đủ.) Khi bạn bắt đầu chạy ứng dụng, bạn có thể nhìn thấy một cửa sổ đơn giản như trong Hình 1. Hình 1. Biểu mẫu trống Biểu mẫu GWT cho phép bạn nhập tên thành phố và gọi dịch vụ PHP để lấy tất cả các thành phố có tên phù hợp với tên thành phố mà bạn đã nhập. Các thành phố được hiển thị ở dạng bảng các ô vuông, và bạn có thể chỉnh sửa các trường thông tin như dân số, kinh độ và vĩ độ. Bạn có thể gửi các dữ liệu đã chỉnh sửa này quay lại dịch vụ Web PHP thứ hai, dịch vụ này sẽ cập nhật vào cơ sở dữ liệu. Tất cả dữ liệu truyền đi được định dạng bằng XML. Năm 2009, lễ kỉ niệm sinh nhật lần thứ 200 của Charles Darwin và lần thứ 150 ra đời cuốn sách của ông Nguồn gốc muôn loài, bạn có thể tìm kiếm các thành phố cùng với tên DARWIN; Xem Hình 2 cho các kết quả. Hình 2. Kết quả tìm kiếm các thành phố cùng với tên "Darwin" Một vài cấu hình bổ xung Thông tin này chỉ mang tính tham khảo, tôi đã làm việc với:  GWT phiên bản 1.5.3  PHP phiên bản 5.2.8  MySQL® cơ sở dữ liệu máy chủ phiên bản 5.0.67  Apache phiên bản 2.2.10 dưới OpenSUSE® phiên bản 11.1 Sau khi tôi cài đặt tất cả các phần mềm nhưng GWT vẫn yêu cầu một bước cấu hình thêm nữa vậy nên tôi có thể kiểm tra kết nối GWT-PHP; xem thêm tại Vấn đề về SOP để hiểu tại sao. Để vô hiệu chính sách cùng nguồn (SOP) hãy kiểm tra bên trong trình duyệt GWT, chỉnh sửa tệp ./mozilla-1.7.12/greprefs/all.js trong thư mục GWT của bạn và thêm các dòng lệnh như trong Ví dụ 2 vào phần cuối cùng của tệp: Ví dụ 2. Thay đổi cấu hình bên trong trình duyệt GWT pref("capability.policy.default.XMLHttpRequest.abort", "allAccess"); pref("capability.policy.default.XMLHttpRequest.getAllResponseHeaders","allAcc ess"); pref("capability.policy.default.XMLHttpRequest.getResponseHeader","allAccess" ); pref("capability.policy.default.XMLHttpRequest.open", "allAccess"); pref("capability.policy.default.XMLHttpRequest.send", "allAccess"); pref("capability.policy.default.XMLHttpRequest.setRequestHeader","allAccess"); pref("capability.policy.default.XMLHttpRequest.onreadystatechange","allAccess" ); pref("capability.policy.default.XMLHttpRequest.readyState", "allAccess"); pref("capability.policy.default.XMLHttpRequest.responseText","allAccess"); pref("capability.policy.default.XMLHttpRequest.responseXML","allAccess"); pref("capability.policy.default.XMLHttpRequest.status", "allAccess"); pref("capability.policy.default.XMLHttpRequest.statusText", "allAccess"); Vấn đề về SOP SOP là một sự hạn chế đáng tin cậy mà về cơ bản nó ngăn chặn các trang Web được tải từ nguồn chắc chắn (nghĩa là giao thức/hệ chủ/cổng là một bộ ba của URL) truy cập dữ liệu từ một nguồn khác. (Windows® Internet Explorer® đã hơi kiêu ngạo về SOP và bỏ qua sự thay đổi của các cổng, mặc dù đó không phải là điều bắt buộc.) Ví dụ, nếu máy khách Web GWT của bạn được tải từ http://www.yoursite.com:80/some/page/at/your/site, SOP sẽ không cho phép máy khách của bạn lấy dữ liệu khác từ cùng một URL, các lời gọi bị chặn khi giao tiếp với https://www.yoursite.com (do khác giao thức), http://othersite.com (do khác hệ chủ) và ngay cả http://www.yoursite.com:81 (do khác cổng). SOP thực sự là một ý tưởng tốt, bởi vì nó không cho phép mã JavaScript từ một nguồn chắc chắn được truy cập và điều khiển dữ liệu được lấy từ nguồn khác. Trong thực tế, SOP bị vô hiệu hóa có thể là điều các phisher thực sự mong muốn: Giống như khi bạn nhìn thấy có hiệu lực, hợp pháp nhưng thực ra có một nhóm thứ ba giám sát nó. Nếu SOP ở vị trí đó, bạn có thể thư giãn mà chắc chắn rằng bất cứ thứ gì bạn nhìn thấy thì chúng đều được gửi từ nguồn mong muốn; nó không thể là bất cứ đoạn mã nào từ các nguồn khác (các nguồn đáng nghi ngờ). Ngược lại, với các nhà phát triển GWT, SOP đúng là phiền hà. Khi bạn chạy thử ứng dụng của mình ở chế độ máy chủ phục vụ, nó kết nối tới cổng 8888, nhưng với các dịch vụ PHP bạn sẽ muốn truy cập thông qua cổng tiêu chuẩn 80, vậy nên SOP sẽ từ chối lời gọi này. (Tất nhiên, sau khi bạn thay đổi ứng dụng của mình sang chế độ biên dịch, nó sẽ chạy một cách hoàn hảo, bởi vì nó cũng chạy từ cổng tiêu chuẩn 80, điều này liên quan đến SOP.) Bạn sẽ không muốn truy cập tất cả các loại cổng của các trang Web; bạn chỉ muốn truy cập cổng khác từ cùng một nguồn, nhưng SOP sẽ không cho phép bạn làm vậy. Bất cứ khi nào bạn cập nhật GWT, bạn sẽ phải thay đổi lại điều này. Chính vì vậy, bạn nên hiểu rằng nếu không làm vậy, bạn có thể viết mã bị lỗi trong chế độ máy chủ phục vụ nhưng có thể chạy rất tốt trong chế độ biên dịch; sau khi thực hiện sự thay đổi, bạn có thể có mã lệnh có thể chạy ở chế độ máy chủ phục vụ nhưng lại lỗi trong chế độ biên dịch, hãy chú ý điều này! Gửi XML bằng PHP Ứng dụng này chỉ định nghĩa một biểu mẫu đơn giản, với một vài nhãn, một hộp văn bản, hai nút điều khiển, và mạng lưới các ô vuông cho việc hiển thị kết quả. Bất cứ khi nào bạn kích chuột vào Get cities, ứng dụng sẽ gọi dịch vụ PHP để lấy một tài liệu XML với tất cả các tên thành phố phù hợp với nội dung bạn gõ trong hộp văn bản nhập. Ví dụ 3 là một ví dụ ngắn về XML mà nó được gửi từ dịch vụ PHP đến ứng dụng GWT. Đoạn mã XML được tạo ra nhằm minh họa một vài khả năng của XML và hơn thế nữa nó còn có thể được sử dụng cho các ứng dụng thực tế. Điển hình là dịch vụ XML được tổ chức tốt sử dụng ít thẻ hơn và nhiều thuộc tính hơn, loại bỏ việc thụt vào ở đầu dòng và do đó tài liệu sẽ ngắn hơn. Ví dụ 3. Tài liệu XML được tạo ra khi tìm kiếm từ "tokyo" <?xml version="1.0" encoding="UTF-8"?> <cities> <city name="tokyo"> <country code="JP" name="Japan"/> <region code="40" name="Tokyo"/> <coords> <lat>35.6850014</lat> <lon>139.7513885</lon> </coords> <pop>31480498</pop> </city> <city name="tokyo"> <country code="PG" name="Papua New Guinea"/> <region code="01" name="Central"/> <coords> <lat>-8.3999996</lat> <lon>147.1499939</lon> </coords> </city> <city name="tokyojitori"> <country code="KR" name="Korea, Republic of"/> <region code="16" name="Cholla- namdo"/> <coords> <lat>34.2380562</lat> <lon>125.9394455</lon> </coords> </city> </cities> Có hai phiên bản sử dụng dịch vụ PHP khác nhau — getcities1.php và getcities2.php — hai phiên bản này chỉ ra hai cách khác nhau để tạo ra tài liệu XML. Cách đơn giản nhất để tạo XML là chỉ in các chuỗi văn bản thích hợp hoặc tạo ra các chuỗi ký tự, sau đó sử dụng lệnh echo. Bạn nên thiết lập loại nội dung text/xml sau đó nó sẽ được nhận ra một cách chính xác và bạn cũng nên nhớ thêm vào các dòng chú thích một cách tương đối nhằm xác định phiên bản XML và ý nghĩa các dòng lệnh. Bạn sẽ không được quên cách sử dụng một số kí tự đặc biệt như nhỏ [...]... getValue() Các phương pháp này xử lý các phân đoạn CDATA, các chú giải và tất cả các thành phần có thể có của XML Gửi XML với GWT Ứng dụng GWT giúp người dùng chỉnh sửa các trường dân số, kinh độ và vĩ độ, sau đó gửi dữ liệu các thành phố đến máy chủ để cập nhật dữ liệu Hai thuật toán được sử dụng là: thuật toán đơn giản hơn thì xây dựng dòng lệnh XML từng phần và thuật toán dựa trên XMLParser sử dụng các. .. '{$lon}')"); } Có rất nhiều cách để xử lý XML với PHP Hãy kiểm tra mục Tài nguyên để có các đường dẫn hữu ích Kết luận Tôi vừa mới thảo luận qua bề nổi giống như bao nhiêu cách bạn có thể sử dụng XML như là một cầu nối giữa GWT và PHP, nhưng với các phương thức đã đề cập có lẽ là đủ giúp bạn bắt đầu Điều bạn nên nhớ là GWT không có giới hạn khi sử dụng phương thức RPC của chính nó và nó có thể cũng chung... với các phương thức khác nữa để tạo ra XML, PHP chắc chắn có rất nhiều đề xuất Ví dụ, bạn có thể sử dụng SimpleXML; sau này bạn sẽ sử dụng nó để đọc XML, nhưng nó cũng đồng thời cung cấp việc tạo ra tài liệu XML Cũng như vậy, bạn có thể xem qua khung làm việc PEAR, nó bao gồm một vài lớp giúp dễ dàng tạo ra tài liệu XML (Xem liên kết đến Tài nguyên để có thêm thông tin.) Xử lý XML với GWT GWT cung cấp. .. nào gần với SimpleXML xét theo khía cạnh rõ ràng và ngắn gọn Về cơ bản, bạn tạo một đối tượng PHP bằng cung cấp tài liệu XML đến phương thức simplexml_load_string(), sau đó lấy kết quả bằng cách sử dụng các toán tử chuẩn PHP Các thuộc tính trở thành các phần tử của các mảng (xem cách mã nước được đọc trong Ví dụ 9), và các phần tử có thể được truy cập như là một mảng (bằng cách sử dụng phương thức children())... thức thứ hai để tạo ra mã XML là sử dụng XMLWriter (Và XMLReader, cho phép xử lý tài liệu XML. ) Bạn có thể quên đi các ký tự như lớn hơn, nhỏ hơn, , phương thức này sẽ tự động giám sát chúng Mặc dù nó có vẻ dài dòng hơn phương thức thứ nhất khi sử dụng echo(), phương thức này chỉ ra rằng cách tiếp cận này giúp chúng ta có thể dễ hiểu mã lệnh hơn Đặc biệt là khi sử dụng giao thức php: //output đoạn văn bản... hơn (>), hay dấu và (&); cách dễ nhất là sử dụng htmlspecialchars(), đây là một hàm PHP Câu lệnh này rất đơn giản, giống như đoạn mã được chỉ ra trong Ví dụ 4 Chú ý rằng thụt vào đầu dòng và xuống dòng thực sự là không cần thiết, nhưng nhờ nó chúng ta có thể đọc mã một cách dễ dàng Ví dụ 4 Phương thức đơn giản nhất để tạo ra XML từ dịch vụ PHP header("Content-type: text /xml" ); echo '< ?xml version="1.0"... duy nhất gói XMLParser (tại địa chỉ com.google .gwt. xml. client ) cho cả hai việc đọc và viết XML Bạn có thể sử dụng phương thức parse() để tạo một tài liệu Document, sau đó sử dụng getDocumentElement() để lấy phần tử gốc của nó; sau đó bạn có thể bắt đầu làm việc với tài liệu XML này Một điều quan trọng là bạn nên sử dụng phương thức removeWhitespace() để loại bỏ các khoảng trắng ra khỏi tài liệu của mình... result+= "\n"; return result; } Thuật toán đơn giản khác để tạo XML là phương thức createDocument() của lớp XMLParser Cách này gợi lại các hàm SimpleXML trong PHP, đầu tiên bạn tạo một tài liệu rỗng, sau đó thêm các phần tử vào tài liệu đó Bạn có thể tạo tất cả các loại của các nút cũng giống như cách thiết lập thuộc tính các giá trị Cuối cùng, sử dụng phương thức Java chuẩn toString() tạo ra đại... trúc mong muốn Thuật toán đơn giản hơn được chỉ ra trong phương thức getCities1() Bạn có thể sử dụng cả hai đối tượng String hoặc StringBuffer để tạo XML Tôi sử dụng cách này, bởi vì nó tạo ra đoạn mã rõ ràng; nhưng khi thi hành, thuật toán thứ hai hoạt động tốt hơn Cùng với các vấn đề về các ký tự lớn hơn, nhỏ hơn, bạn có thể xem phiên bản sử dụng PHP dưới đây, đoạn mã này sử dụng phương thức Html.htmlspecialchars()... hay không; Nếu không, thay vào đó các phân đoạn sẽ tạo ra các nút Kiểm tra tài liệu GWT (Xem Tài nguyên) để biết thêm thông tin Ví dụ 6 XMLParser cung cấp việc đọc và tạo ra XML trong GWT protected void loadCities(final String xmlCities) { final Document xmlDoc= XMLParser.parse(xmlCities); final Element root= xmlDoc.getDocumentElement(); XMLParser.removeWhitespace(xmlDoc); final NodeList cities= root.getElementsByTagName("city"); . XML: Cầu nối giữa GWT và PHP GWT có thể sử dụng các dịch vụ PHP, và XML cung cấp một cầu nối giúp trao đổi dữ liệu giữa chúng trở nên đơn giản Federico Kereki, Kỹ. khảo sát một ứng dụng GWT đơn giản và một vài dịch vụ Web PHP, nhằm chỉ ra một vài cách khác nhau để tạo ra và sử dụng các tài liệu XML. Điều này có nghĩa rằng nó không những là một tài liệu hướng. dùng XML. Hãy ghé thăm Tài nguyên để có các liên kết nhằm biết thêm thông tin về JSON. Nhằm chỉ ra làm thế nào bạn có thể sử dụng XML như là một cầu nối giữa PHP và GWT, tôi cung cấp một ứng dụng

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan