Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP Autorzy: Lee Barney, Michael McLaughlin T³umaczenie: Andrzej Stefañski ISBN: 978-83-246-1977-1 Tytu³ orygina³u: Oracle Database Ajax & PHP Web Application Development Format: 168 237, stron: 408 Wykorzystaj mo liwoœci najlepszych technologii! Jak wykorzystaæ obiekt XMLHttpRequest? Jak manipulowaæ modelem DOM? Jakie mo liwoœci kryje w sobie jêzyk PL/SQL? Duet PHP i MySQL cieszy siê nies³abn¹c¹ popularnoœci¹. Jednak na rynku rozwi¹zañ bazodanowych istnieje tak e wiele innych produktów. Wœród nich znajdziesz równie bazê danych firmy Oracle. Przez znaczn¹ czêœæ profesjonalistów uwa ana jest ona za najlepsz¹, najbezpieczniejsz¹ i najwydajniejsz¹ platformê do tworzenia zaawansowanych rozwi¹zañ. Dziêki tej ksi¹ ce dowiesz siê, jak wykorzystaæ bazê Oracle w po³¹czeniu z PHP oraz dynamicznymi mo liwoœciami technologii AJAX. W pierwszej kolejnoœci zapoznasz siê z mo liwoœciami skalowania rozwi¹zañ korzystaj¹cych z JavaScriptu i PHP. Nastêpnie nauczysz siê wykorzystywaæ obiekt XMLHttpRequest, a st¹d ju tylko krok do opanowania technologii AJAX. Ponadto dowiesz siê, jak manipulowaæ elementami w modelu DOM oraz pracowaæ zdalnie z obiektami PHP. Autorzy ksi¹ ki w wyczerpuj¹cy, a równoczeœnie przejrzysty i przyjazny sposób wprowadz¹ Ciê w tajniki administrowania bazami Oracle oraz pos³ugiwania siê sk³adni¹ jêzyków SQL i PL/SQL, wykorzystywanych w tej bazie. Ksi¹ ka ta w umiejêtny sposób ³¹czy wiedzê na temat projektowania przyjaznego i dynamicznego interfejsu u ytkownika oraz zastosowania najlepszych rozwi¹zañ w dziedzinie baz danych. Skalowalnoœæ JavaScriptu i PHP Obiektowoœæ w tych jêzykach Mo liwoœci i sposoby wykorzystania obiektu XMLHttpRequest Manipulowanie modelem DOM za pomoc¹ JavaScriptu Zdalne wywo³ania w PHP i HTTP-RPC Obs³uga przycisku Cofnij w AJAX-ie Zalecenia przy tworzeniu skalowalnych i elastycznych aplikacji Udostêpnianie VOIP oraz IM Wykaz znaczników HTML Podstawy jêzyka PHP Administrowanie bazami danych Oracle Sk³adnia i wykorzystanie jêzyka SQL oraz PL/SQL Projektuj skalowalne i elastyczne aplikacje!
Spis tre ci 5 Spis tre ci O autorach...9 O redaktorze technicznym...11 Wprowadzenie...13 Cz I Tworzenie podstaw... 17 Rozdzia 1. Skalowalno JavaScript i PHP...19 Skalowalno...20 Redukcja obci enia procesora i pami ci...21 Skalowanie struktur kontrolnych...22 Skalowanie przetwarzania ci gów znaków...26 Skalowanie prostych operacji matematycznych...28 Wp yw obiektów i ich metod na skalowanie...33 Wp yw wielokrotnych da wydruku na skalowanie...35 Redukcja obci enia sieci...36 Wykorzystanie AJAX do zmniejszenia obci enia sieci...36 Wykorzystanie kompresji do zmniejszenia obci enia...38 Podsumowanie...40 Rozdzia 2. Modularno PHP i JavaScript...41 Modularno...41 Projektowanie w rzeczywistym wiecie...42 G ówny modu i kontrolery...49 Kontroler aplikacji i odwzorowania...50 Modularno JavaScript z kontrolerami i odwzorowaniami...52 Podsumowanie...54 Rozdzia 3. Obiekty JavaScript i PHP...55 Definiowanie i tworzenie klas...55 Dziedziczenie...59 Konstruktory...61 Publiczne, chronione i prywatne...63 Atrybuty i metody w JavaScript...66 Obiekty modelu, kontrolera i obiekty kontrolne w PHP...69 Obiekty modelu, kontrolera i obiekty kontrolne w JavaScript...74 Podsumowanie...76
6 Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP Cz II Dynamiczna prezentacja: komunikacja mi dzy interfejsem u ytkownika i serwerem... 77 Rozdzia 4. Obiekt XMLHttpRequest...79 Tworzenie dania i obs uga jego rezultatów...79 Tworzenie modu u Server Access Object...83 Podsumowanie...90 Rozdzia 5. AJAX, zaawansowany HTML i komunikacja HTTP...93 Tworzenie rozwijanych tabel HTML...93 Nag ówki HTTP, b dy i komunikacja z serwerem...102 Podsumowanie...108 Rozdzia 6. Modyfikowanie DOM za pomoc JavaScript...109 Obiektowy model dokumentu (DOM)...110 Przeci gnij i upu...112 Biblioteka...112 Obiekty kontrolne w PHP...122 Obiekty kontrolne JavaScript...125 Zapisywanie informacji z mechanizmu przeci gnij i upu w bazie danych...130 Podsumowanie...133 Cz III Zaawansowane zagadnienia dynamicznej prezentacji i komunikacji... 135 Rozdzia 7. Dost p do danych z innych aplikacji...137 Zdalne wywo ania w PHP i HTTP-RPC...138 Zdalne wywo ania za pomoc klientów i us ug XML-RPC z PEAR...142 Podsumowanie...152 Rozdzia 8. AJAX, tworzenie wykresów i proste przesy anie danych...155 Korzystanie z biblioteki SimplePlot...155 Generowanie danych do wykresu...159 Pobieranie danych za pomoc AJAX...162 Podsumowanie...165 Rozdzia 9. Przycisk cofania w AJAX...167 Dodawanie ledzenia historii...167 Korzystanie z historii iframe...175 Sesje po stronie klienta...177 Podsumowanie...179 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji... 181 Rozdzia 10. Sesje po stronie klienta i po stronie serwera...183 ledzenie i wykorzystywanie stanu logowania po stronie klienta...183 ledzenie i wykorzystywanie stanu logowania po stronie serwera...192 Definiowanie i przechowywanie preferencji u ytkownika mi dzy sesjami...197 Wykorzystanie preferencji zapisanych przez u ytkownika...201 JSON...204 Podsumowanie...205
Spis tre ci 7 Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup... 207 Tworzenie prostej strony typu mashup...208 Wbudowanie mashupa do systemu obs ugi danych medycznych...211 Jak to dzia a...214 Podsumowanie...218 Rozdzia 12. Wielowymiarowa komunikacja: VOIP, IM oraz predefiniowane raporty...219 Udost pnianie VOIP i IM...220 Rozproszone, ukierunkowane, raportowane...225 Podsumowanie...243 Dodatki... 245 Dodatek A Indeks znaczników HTML...247 Dodatek B Wprowadzenie do PHP...255 Historia i t o...256 Czym jest PHP?...256 Czym jest Zend?...257 Tworzenie aplikacji internetowych...257 Co z czym czy i dlaczego?...257 Co Oracle wnosi do PHP?...258 Dlaczego PHP 5 jest wa ny?...259 Jak korzysta z PHP?...259 Jak za pomoc PHP i OCI8 korzysta z bazy danych Oracle?...278 Podsumowanie...299 Dodatek C Wprowadzenie do administracji baz danych Oracle...301 Architektura baz danych Oracle...302 Uruchamianie i wy czanie bazy danych Oracle...307 Operacje w systemie Linux...307 Operacje w systemie Windows...311 Uruchamianie i wy czanie procesu nas uchuj cego...314 Korzystanie z programu SQL*Plus...319 Interfejs wiersza polece...321 Zmienne cz ce...323 Podsumowanie...323 Dodatek D Wprowadzenie do SQL...325 Typy danych Oracle SQL...326 J zyk definicji danych (DDL)...329 Zarz dzanie tabelami i ograniczeniami...330 Zarz dzanie widokami...333 Zarz dzanie procedurami sk adowanymi...334 Zarz dzanie sekwencjami...335 Zarz dzanie w asnymi typami...336 J zyk pobierania danych (DQL)...338 Zapytania...338 J zyk modyfikacji danych (DML)...342 Polecenia INSERT...342 Polecenia UPDATE...344 Polecenia DELETE...345 J zyk sterowania danymi (DCL)...345 Podsumowanie...346
8 Oracle Database. Tworzenie aplikacji internetowych w AJAX i PHP Dodatek E Wprowadzenie do PL/SQL...347 Struktura bloków PL/SQL...348 Zmienne, przypisania i operatory...352 Struktury steruj ce...354 Instrukcje warunkowe...355 P tle...358 Procedury sk adowane, funkcje sk adowane oraz pakiety...360 Funkcje sk adowane...361 Procedury...364 Pakiety...366 Wyzwalacze bazodanowe...369 Wyzwalacze DDL...370 Wyzwalacze DML...370 Wyzwalacze zamiast...372 Wyzwalacze systemowe lub bazodanowe...372 Kolekcje...373 Typ danych VARRAY...374 Typ danych NESTED TABLE...375 Tablica asocjacyjna...376 Interfejs kolekcji...379 Wykorzystanie pakietu DBMS_LOB...379 Konfiguracja i weryfikacja rodowiska dla typów LOB...379 Zapis i odczyt typu danych CLOB...381 Podsumowanie...386 Skorowidz...387
Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup Gdy wydajne komputery sta y si popularniejsze, u ytkownicy zacz li postrzega je jako narz dzia do agregacji informacji. Wp yn o to bezpo rednio na rozwój funkcjonalno ci serwisów web. Takie serwisy pozwalaj u ytkownikom wybiera informacje do przegl dania. Dzisiejsze przegl darki umo liwiaj te wy wietlanie kana ów RSS w postaci odno ników na stronie lub zak adek. E-mail ju dawno zosta po czony z przegl dark. Wszystko to, cznie z aplikacjami AJAX, prowadzi u ytkownika do wniosku, e skoro przegl darka s u y do agregacji danych, to takie jest te najwa niejsze zastosowanie komputera. Poniewa u ytkownicy wymagaj coraz wi kszej elastyczno ci aplikacji internetowych, te musz si dostosowa. Jednym ze sposobów na to jest wykorzystanie serwisów typu mashup wy wietlaj cych kilka cz ci ró nych stron na jednej stronie. Przyk adow definicj tego, czym jest mashup, mo na znale w angielskiej Wikipedii pod adresem http://en.wikipedia.org/wiki/ Mashup_ (web_application_hybrid). Przeczytanie tego rozdzia u pozwoli tworzy strony umo liwiaj ce u ytkownikom po czenie danych z ró nych zdalnych serwisów internetowych lub aplikacji w jedn, opart na AJAX aplikacj internetow. B d oni mogli zdefiniowa, jakie cz ci stron wy wietli i gdzie maj si one znale na stronie. W tym rozdziale zostan poruszone zagadnienia takie jak: wykorzystanie JavaScript do definiowania i wy wietlania wielu fragmentów stron internetowych na jednej stronie, wykorzystanie JSON do zapisywania i pobierania danych, API biblioteki mashup. Dynamiczne us ugi typu mashup umo liwiaj u ytkownikowi dostosowanie aplikacji przy ma ym wysi ku zarówno ze strony samego u ytkownika, jak i programisty.
208 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji Tworzenie prostej strony typu mashup Piel gniarze opiekuj cy si pacjentami w domu nie maj tak du ej kontroli nad otoczeniem swoich pacjentów jak piel gniarze w szpitalu. Dlatego potrzebuj narz dzia do kontroli temperatury i jako ci powietrza w okolicy, w której mieszka pacjent. Cho istnieje wiele serwisów, które mog dostarczy cz ci tych informacji dla dowolnej lokalizacji, niewiele z nich lub wr cz aden nie dostarcza wszystkich. Aby mie aktualne informacje i dzia a profilaktycznie, piel gniarze musieliby regularnie odwiedza kilka serwisów w ci gu dnia. Du e ograniczenia czasowe, jakie ludzie ci maj w pracy, i potencjalne zagro enie zdrowia lub ycia pacjentów w wypadku ignorowania tego typu informacji powoduj, e potrzebny jest prosty sposób wybrania preferowanych róde informacji i ich wy wietlania. Serwis typu mashup nadaje si do tego idealnie. Serwis typu mashup sk ada si z fragmentów innych stron internetowych umieszczonych na jednej stronie. W swojej najprostszej postaci mashup jest definiowany przez programist lub in yniera i nie pozwala u ytkownikowi na dodawanie nowych stron. Plik mashupexample.html, który mo na pobra z ftp://ftp.helion.pl/przyklady/ordatw.zip, pokazano na rysunku 11.1. Stanowi on przyk ad takiego prostego serwisu mashup i wy wietla informacje o parametrach powietrza z obszaru Salt Lake City w ameryka skim stanie Utah. Rysunek 11.1. Prosta strona typu mashup w przegl darce Firefox Ramki mashupa sk adaj si z wy wietlanych stron i daj u ytkownikowi mo liwo zmiany rozmiaru, wybrania cz ci strony ród owej do wy wietlenia, przesuni cia wy wietlanej ramki i jej usuni cia. Strona mashupexample.html zawiera równie przycisk pozwalaj cy u ytkowni-
Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup 209 kowi na dodanie nowych ramek do mashupa. Wszystkie zmiany na tej stronie maj charakter tymczasowy, poniewa nie s przesy ane do zapisania na serwerze. Sposób zapisywania tych informacji w bazie danych Oracle zosta opisany w dalszej cz ci tego rozdzia u. Poniewa ramki mashupa odwo uj si do ród owych stron przez sie, zawsze wy wietlaj informacje z aktualnej strony zdalnego serwera. Dlatego gdy strona ród owa si zmienia, zmienia si tak e zawarto ramki wy wietlanej w mashupie. Umo liwia to utrzymanie aktualno ci danych. Z tego powodu jedyny czynnik do wzi cia pod uwag przy wybieraniu strony ród owej dla ramki mashupa stanowi stabilno wygl du strony. Poniewa wy wietlany jest tylko wybrany obszar strony ród owej, je li zmieni si uk ad tej strony w obszarze wybranym do wy wietlania, w ramce mashupa b dzie znajdowa a si inna tre. Opisane w tabeli 11.1 API wykorzystywane do tworzenia mashupów zawiera trzy funkcje i zale y od biblioteki dostarczaj cej mechanizm przeci gnij i upu, opisanej w rozdziale 6. Te trzy funkcje umo liwiaj programi cie zdefiniowanie ramek mashupa i pobranie opisu stanu ka dej z nich. Biblioteka mashup znajduj ca si w pliku mashup.js do pobrania z ftp://ftp.helion.pl/przyklady/ ordatw.zip zosta a napisana w taki sposób, by obs ugiwa najnowsze wersje przegl darek Firefox i Safari na OS X oraz Firefox i IE w Windows. Dopracowania wymaga wsparcie przegl darki Firefox dla systemu Linux. Plik mashupexample.html korzysta z dwóch funkcji API opisanych w tabeli 11.1. Sk ada si on z czterech ramek mashupa rozmieszczonych w ró nych miejscach i maj cych ró ne rozmiary wy wietlaj cych aktualn temperatur i informacje o jako ci powietrza w Salt Lake City w ameryka skim stanie Utah. <html> <head> <link rel="stylesheet" type="text/css" href="mashup.css" /> <script src="util.js" type="text/javascript"></script> <script src="mashup.js" type="text/javascript"></script> <script src="json_util.js" type="text/javascript"></script> <script> function init(){ new MashFrame('www.intermountainallergy.com/pollen.html', 'displaydiv',0,30,550,200,300,60); new MashFrame('http://www.airquality.utah.gov/slc.html', 'displaydiv',0,295,700,250,210,200); new MashFrame('www.ksl.com/index.php?nid=88', 'displaydiv',625,30,400,230,850,0); new MashFrame('www.ksl.com/index.php?nid=88', 'displaydiv',740,310,380,220,550,40); </script> </head> <body id='mainbody' onload='init()'> <input type = 'button' value='add New Page' onclick='requestnewmashframe("displaydiv")' /> <div id='displaydiv' style='width: 1000px; height: 3000px; top: 50px;' > </div> </body> </html></div> </body> </html>
210 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji Tabela 11.1. API biblioteki mashup Funkcja MashFrame (aurl, parentid, xloc, yloc, width, height, scrolldown, scrollright) requestnewmashframe(parentid) getmashupdescriptor() Opis Ta funkcja konstruuje ramk mashupa. Wymaga podania dwóch parametrów, ale mo e przyjmowa sze dodatkowych parametrów opcjonalnych. Wymagane parametry: aurl URL ród a strony. Nie musi zawiera prefiksu http://. Wszystkie URL powinny korzysta z protoko u HTTP, a nie FTP czy innego. parentid Identyfikator elementu HTML, który b dzie zawiera ramk mashupa. Jest to zazwyczaj element div HTML. Opcjonalne parametry: xloc Poziome przesuni cie lewej kraw dzi ramki mashupa od brzegu zajmowanego elementu HTML. Domy lna warto to 0 pikseli. yloc Pionowe przesuni cie górnej kraw dzi ramki mashupa w stosunku do górnej kraw dzi zajmowanego elementu HTML. Domy lna warto to 0 pikseli. width Szeroko wy wietlanej ramki mashupa w pikselach. Domy lna warto to 300 pikseli. height Wysoko wy wietlanej ramki mashupa w pikselach. Domy lna warto to 294 piksele. scrolldown Pionowe przesuni cie w dó widocznego obszaru strony ród owej w pikselach. Domy lna warto to 0 pikseli. scrollright Poziome przesuni cie w prawo widocznego obszaru strony ród owej w pikselach. Domy lna warto to 0 pikseli. Ta funkcja opakowuje konstruktor MashFrame, korzystaj c z warto ci domy lnych wszystkich opcjonalnych parametrów. Po uruchomieniu funkcja ta pyta u ytkownika o URL strony ród owej. Wymaga podania jednego parametru. parentid Identyfikator elementu HTML, który b dzie zawiera ramk mashupa. Jest to zazwyczaj element div HTML. Ta funkcja zwraca tablic opisów ramek mashupów. Ka dy deskryptor zawiera wszystkie aktualne warto ci ramki mashupa. Zwrócona tablica jest wykorzystywana do zapisywania aktualnego stanu wszystkich ramek mashupa na serwerze. Nale y zauwa y, e element displaydiv ma ustawion du szeroko i wysoko. Jest to niezb dne, poniewa gdy ramka mashupa jest przenoszona lub zmieniany jest jej rozmiar, czasem kursor mo e opu ci szary pasek wykorzystywany do przeci gania lub zmiany rozmiarów ramki mashupa. Jest to typowe zjawisko w przegl darkach z powodu ilo ci czasu potrzebnego do interpretowania i wykonywania kodu JavaScript, a nast pnie rysowania zmian. Aby to pokona, biblioteka mashup, za pomoc biblioteki przeci gnij i upu util.js, dodaje funkcj obs uguj c zdarzenia myszy do elementu nadrz dnego, co powoduje, e ramka mashupa przechwytuje mysz. Czasem ten sam problem wyst puje te w obszarze wy wietlania ramki mashupa. We wszystkich przegl darkach oprócz IE ramka mashupa ponownie czy si z mysz. Przy przemieszczaniu lub zmianie rozmiaru ramki mashupa w IE nale y zachowa ostro no i przesuwa mysz do wolno, by nie wesz a w obszar wy wietlania ramki. Powodem tego jest fakt, e w IE wiele aktywnych komponentów, takich jak odno niki, zawsze ma najwy szy priorytet w kolejno ci wy wietlania, niezale ny od priorytetu deklarowanego dla nich przez elementy nadrz dne, i dlatego kod przechwytuj cy nie mo e by zaimplementowany.
Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup 211 Poniewa biblioteka mashup.js korzysta z pustego, przykrywaj cego obszar wy wietlania znacznika div, nazywanego te glass pane, mo e wykrywa opuszczone ruchy myszy i zatrzymywa ramk mashupa. W IE obiekt glass pane zosta usuni ty, poniewa aktywne komponenty wy wietlanej strony i tak by yby powy ej niego. Z powodu takiej implementacji priorytetów kolejno ci wy wietlania w IE pojedyncze aktywne komponenty przechwytuj zdarzenia zwi zane z ruchem myszy i ramka mashupa nie jest przywi zywana do kursora myszy. Dla zachowania spójno ci warstwa glass pane zosta a tutaj usuni ta. W bibliotece mashup pojawiaj si te inne ograniczenia. Je li wy wietlana strona zawiera Flash lub inne wbudowane interpretery, mo e si zdarzy, e film lub inna zawarto tego typu b dzie widoczna nawet poza ramk mashupa. Problem ten wyst puje cz ciej w Windows, zarówno w przegl darce Firefox, jak i IE, ni w OS X i nie zosta przetestowany w systemie Linux. Wydaje si bardziej zale ny od wy wietlanej strony ni od przegl darki, dlatego nale y ostro nie wybiera wy wietlane w mashupie strony. Innym ograniczeniem s menu w JavaScript. Niektóre serwisy maj menu, które automatycznie pojawiaj si po za adowaniu strony. Takie menu równie mog czasem si pojawia nawet wtedy, gdy znajduj si poza obszarem wy wietlania ramki mashupa. Istnieje równie ró nica w funkcjonalno ci pomi dzy tym, jak biblioteka mashup dzia a w systemie Windows, i w innych systemach operacyjnych. Rysunek 11.1 pokazuje prosty przyk ad w przegl darce Firefox pracuj cej pod kontrol systemu Linux. Nale y zauwa y, e okna mashupów nie maj tam pasków przewijania. Przeci ganie zawarto ci w ramce mashupa zmienia wy wietlany tam obszar strony ród owej. Przy takim podej ciu do wy wietlania strony ród owej w Firefoksie i IE pod systemem Windows obie przegl darki le odrysowywa y wy wietlany obszar i poza oknem wy wietlania pojawia y si widoczne pozosta o ci. Problem ten znik przy u yciu pasków przewijania pokazanych na rysunku 11.2. Te widoczne pozosta o ci nie pojawiaj si w przegl darkach Firefox i Safari dzia aj cych w systemach OS X i Linux, dlatego wygl da na to, e problem dotyczy biblioteki MFC Windows wykorzystywanej do wy wietlania grafiki w obu tych przegl darkach pod Windows. Jest nadzieja, e z czasem biblioteka mashup zostanie usprawniona oraz rozbudowana, a problemy te zostan pokonane. Wbudowanie mashupa do systemu obs ugi danych medycznych Jak ju wspomniano na pocz tku poprzedniego podrozdzia u, wykorzystanie mashupa bardzo pomog oby piel gniarzom opiekuj cym si lud mi w ich w asnych domach. W tej sytuacji wa ne jest, aby mashup by prosty w u yciu oraz pami ta ustawienia. Je li takie same komponenty interfejsu u ytkownika s stosowane w innych cz ciach systemu obs ugi danych medycznych, u ytkownik mo e atwo wykorzysta t funkcjonalno. Wykorzystuj c takie samo podej- cie projektowe jak w innych rozdzia ach tej ksi ki, programista mo e atwo do czy potrzebn funkcjonalno. Rysunek 11.3 pokazuje ramki mashupa umieszczone na g ównej stronie.
212 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji Rysunek 11.2. Prosta strona mashup wy wietlona w przegl darce Firefox pod Windows W rozdziale 10. zosta o omówione, jak obiekty sesji po stronie klienta s zapisywane i pobierane z bazy danych Oracle za pomoc AJAX. Poniewa ustawienia mashupa wprowadzone przez u ytkownika musz zosta zapisane, mo na je doda do obiektu sesji w taki sam sposób jak informacj o wybranej stronie startowej w poprzednim rozdziale. Proces logowania z rozdzia u 10. w tej sytuacji powinien pobra te ustawienia i umie ci je w obiekcie sesji, tak aby by y dost pne, gdy u ytkownik za da wy wietlenia mashupa. Aby wykorzysta kod s u cy do zapisywania obiektu sesji, musi by stworzone BCO wed ug wzoru opisanego w rozdziale 3. Obiekt savemashupbco znajduje si w pliku CO.js, który mo na pobra z ftp://ftp.helion.pl/przyklady/ordatw.zip. function savemashupbco(){ //utwórz atrybut lub zast p nowym session.addattribute('mashupdesc', getmashupdescriptor()); //umie ci g opisuj cy sesj na serwerze bez korzystania z VCO thesao.makecall('post', null, 'Text', true, '', 'cmd=store&sessdef='+session.tojsonstring()); Obiekt savemashupbco wstawia opisy wszystkich ramek zdefiniowanego przez u ytkownika mashupa, dopisuj c rezultat dzia ania funkcji getmashupdescriptor API jako atrybut obiektu Session. Nast pnie, wykorzystuj c funkcj, która s u y do zapisywania sesji klienta i któr
Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup 213 Rysunek 11.3. System obs ugi danych medycznych po wybraniu opcji Poka Mashup stworzono w rozdziale 10., generuje widoczne tutaj danie HTTP POST. Spowoduje to, e opisy zostan zapisane w polach bazy danych zawieraj cych sesj w postaci ci gu znaków JSON. Wi cej o JSON mo na dowiedzie si z ostatniego podrozdzia u rozdzia u 10. Jak widzieli my w poprzednich rozdzia ach, w sytuacji, gdy u ytkownik chce wy wietli mashup, musi zosta wywo any BCO i odpowiadaj cy mu VCO. Obiekt mashupbco pokazany w poni szym kodzie i w pliku CO.js ró ni si od wi kszo ci omawianych dotychczas obiektów BCO w JavaScript tym, e nie pobiera danych z serwera. Gdy u ytkownik jest zalogowany, utworzony obiekt Session zawiera wszystkie zapisane informacje na temat mashupa. function mashupbco(){ //nie jest potrzebne po czenie z serwerem, poniewa //informacje o sesji zosta y pobrane przy logowaniu var mashupdescriptorarray = session.getattribute('mashupdescre'); var avco = new mashupvco(); avco.notify(mashupdescriptorarray); Z tego powodu BCO musi tylko pobra te informacje z obiektu sesji i wywo a bezpo rednio odpowiedni VCO, przekazuj c dane jako parametr. Oba te obiekty s bardzo proste. Obiekt mashupvco znajduj cy si w CO.js jest równie bardzo prosty dzi ki wykorzystaniu biblioteki mashup. function mashupvco(){ this.notify = function(data){ var displaystring = "<div>";
214 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji displaystring += "<input type='button' value='dodaj kolejn stron ' onclick='requestnewmashframe(\"mashupcontainer\")' />"; displaystring += "<input type='button' value='zapisz zmiany w mashupie' onclick='savemashupbco()' />"; displaystring += "<div id='mashupcontainer' style='height: 4000px; width: 2000px;'></div></div>"; document.getelementbyid('content').innerhtml = displaystring; MashFrame.mashCount = 0; MashFrame.mashArray = new Array(); if(data!= null){ var numframes = data.length; for(var i = 0; i < numframes; i++){ var adescription = data[i]; new MashFrame(aDescription.URL, 'mashupcontainer', adescription.left, adescription.top, adescription.width, adescription.height, adescription.scrolldown, adescription.scrollright); Obiekt mashupvco powoduje wy wietlenie dwóch obiektów div. Pierwszy zawiera przyciski umo liwiaj ce dodawanie nowych ramek mashupa oraz zapisanie opisów mashupów na serwerze. Drugi div zawiera same ramki mashupa. Dodatkowo ten VCO tworzy obiekt MashupFrame dla ka dego zapisanego opisu i umieszcza go w odpowiednim miejscu. Jak to dzia a Biblioteka mashup znajduj ca si w pliku mashup.js do pobrania z ftp://ftp.helion.pl/przyklady/ ordatw.zip wymaga zrozumienia najwa niejszej koncepcji, modyfikowania elementów za pomoc JavaScript, aby zmieni atrybuty stylów CSS. Aby nie odkrywa ko a na nowo, wiele z tych modyfikacji jest wykonywanych za pomoc biblioteki obs uguj cej mechanizm przeci gnij i upu opisanej w rozdziale 6. Dzi ki wykorzystaniu gotowej biblioteki znajduj cej si w pliku util.js dzia ania takie jak modyfikacja lokalizacji, szeroko ci i wysoko ci ramek mashupa s obs ugiwane za pomoc gotowych funkcjonalno ci. Gdy klient jest uruchomiony w systemie OS X, równie przesuwanie wy wietlanej strony w ramce mashupa jest wykonywane za pomoc przeci gania i upuszczania, a nie za pomoc pasków przewijania jak w Windows. Poza tym aby zrozumie, co dzieje si w bibliotece mashup, trzeba wiedzie, e ka da ramka mashupa sk ada si z dwóch g ównych cz ci ramki iframe wy wietlaj cej dan stron oraz div przechowuj cego t ramk oraz maj cego styl CSS overflow ustawiony na hidden. Aby pomóc w zrozumieniu, jak to dzia a, utworzono stron mashupbasics.html niekorzystaj ca z biblioteki przeci gnij i upu. Strona ta, pokazana na rysunku 11.4, umo liwia u ytkownikowi modyfikowanie tych samych atrybutów CSS co biblioteka przeci gnij i upu, ale za pomoc pól do wprowadzania danych.
Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup 215 Rysunek 11.4. Prosta strona typu mashup Na podstawie tego przyk adu, umo liwiaj cego bezpo rednie modyfikowanie atrybutów stylu CSS zamiast u ycia biblioteki przeci gnij i upu, mo na zrozumie le c u podstaw prostot wbudowywania ramek mashupa. Plik mashupbasics.html pokazany w poni szym kodzie mo na pobra z ftp://ftp.helion.pl/ przyklady/ordatw.zip. Zawiera on g ównie kod HTML s u cy do definiowania wy wietlania. Funkcjonalno JavaScript sk ada si z dwóch funkcji, updateembeddedpage oraz getupperleft Point. Wa ne jest, by zrozumie, e funkcja updateembeddedpage nie jest wykorzystywana w bibliotece mashup, ale zosta a utworzona, aby umo liwi takie same modyfikacje jak ta biblioteka za pomoc biblioteki przeci gnij i upu. <html> <head> <title>podstawowy mashup</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <style> #containerdiv{ width: 1px; height: 1px; #maskdiv{ width: 350px; height: 220px; border: solid; position: absolute; top: 150px; left: 10px; overflow: hidden; background-color: white; #display{ width: 1000px;
216 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji height: 5000px; border: none; position: absolute; </style> <script> function updateembeddedpage(){ var basepoint = getupperleftpoint(document.getelementbyid('containerdiv')); var aurl = document.getelementbyid('url').value 'http://www.byui.edu/cit'; var locx = document.getelementbyid('locx').value 0; var locy = document.getelementbyid('locy').value 0; var visx = document.getelementbyid('visx').value 0; var visy = document.getelementbyid('visy').value 0; var width = document.getelementbyid('width').value 350; var height = document.getelementbyid('height').value 220; //ustaw URL ramki iframe if(document.getelementbyid('display').src!= aurl){ document.getelementbyid('display').src = aurl; //ustaw po o enie góry i lewego brzegu sekcji div z zawarto ci var maskdiv = document.getelementbyid('maskdiv'); maskdiv.style.top = (basepoint.topvalue+(locy*1))+'px'; maskdiv.style.left = (basepoint.leftvalue+(locx*1))+'px'; //ustaw szeroko i wysoko sekcji div z zawarto ci maskdiv.style.width = width+'px'; maskdiv.style.height = height+'px'; //ustaw po o enie górnego i lewego brzegu ramki iframe var display = document.getelementbyid('display'); display.style.top = visy+'px'; display.style.left = visx+'px'; //ustal odleg o elementu w pikselach od góry i lewej strony, //gdzie 0,0 jest lewym górnym rogiem strony, //a nie innego elementu nadrz dnego function getupperleftpoint(anode){ var apoint = new Object() apoint.leftvalue = anode.offsetleft; apoint.topvalue = anode.offsettop; while((anode = anode.offsetparent)!= null){ apoint.leftvalue += anode.offsetleft; apoint.topvalue += anode.offsettop; return apoint; </script> <body> <table> <tr> <td>url: </td> <td><input id='url' value='http://www.byui.edu/cit'</td> </tr> <tr> <td>wspó rz dna X: </td> <td><input id='locx' value='0'/></td> <td>wsp. widoku X: </td> <td><input id='visx' value='0'/></td> </tr>
Rozdzia 11. Tworzenie modyfikowanych przez u ytkowników serwisów typu mashup 217 <tr> <td>wspó rz dna Y: </td> <td><input id='locy' value='0'/></td> <td>wsp. widoku Y: </td> <td><input id='visy' value='0'/></td> </tr> <tr> <td>szeroko : </td> <td><input id='width' value='350'/></td> <td>wysoko : </td> <td><input id='height' value='220'/></td> </tr> </table> <input type='button' value='update Display' onclick='updateembeddedpage()'; <hr/> <div id='containerdiv'> <div id='maskdiv'> <iframe id='display' src="http://www.byui.edu/cit" ></iframe> </div> </div> <div style='position: absolute; top: 500px;'> </div> </body> </html> Funkcja updateembeddedpage rozpoczyna si od pobrania wszystkich warto ci z wej cia strony i zapisania ich w zmiennych wewn trz JavaScript. Je li u ytkownik nie wprowadzi odpowiednich warto ci, do zmiennych przypisywane s domy lne warto ci. Gdy zostanie to wykonane, rozpoczyna si proces modyfikacji stylów CSS. Jak zosta o powiedziane wcze niej, istniej dwa g ówne elementy: zawieraj cy ramk element div nazwany maskdiv oraz ramka iframe nazwana display. Atrybut iframe src przechowuj cy lokalizacj strony do wy wietlenia jest ustawiony na warto odnalezion w polu URL. Jak w przypadku ka dej ramki iframe, po wprowadzeniu modyfikacji strona jest od wie ana. Góra i lewy brzeg strony wy wietlanej w ramce iframe s ustawiane wzgl dem górnego, lewego rogu ca ej strony. Umo liwia to umieszczanie maskdiv w dowolnym miejscu. Mo e to sugerowa, e zawarto przemieszczana jest w elemencie maskdiv, ale w rzeczywisto ci przesuwana jest po ca ej stronie. Z tego powodu ramka umieszczona jest w maskdiv, z warto ci hidden ustawion w atrybucie overflow stylu CSS elementu maskdiv. Dzi ki temu ca a zawarto iframe znajduj ca si poza maskdiv jest ukrywana. Takie zachowanie powoduj ce, e zawarto strony poza iframe jest ukrywana, daje ramce mashupa szczególne w a ciwo ci. Plik mashupbasics.html umo liwia eksperymentowanie z pozycj i rozmiarami elementów, co pozwala na zrozumienie, co komponenty biblioteki przeci gnij i upu zastosowane w bibliotece mashup musz robi. Przygotowuje to te do samodzielnego analizowania samej biblioteki mashup.
218 Cz IV Tworzenie bardzo elastycznych, skalowalnych aplikacji Podsumowanie Dzi ki wykorzystaniu biblioteki mashup oraz obiektów sesji po stronie serwera i ich zapisywania z rozdzia u 10. wstawianie ramek mashupa do aplikacji obs uguj cej dane medyczne, jak te i umieszczanie ich na innych stronach lub w innych aplikacjach jest atwe. Umo liwia to u ytkownikowi do czanie dodatkowych danych, które s mu potrzebne, do aplikacji bez zmiany jej kodu. Robi c to, u ytkownik staje si partnerem w wi kszym stopniu ni kiedykolwiek wcze- niej w historii aplikacji sieciowych i uzyskuje pewnego rodzaju poczucie wspó uczestnictwa w tworzeniu aplikacji bez konieczno ci zapoznawania si z kodem czy nawet po wi cania na to minimalnej ilo ci czasu. Do czenie mashupów do aplikacji zmniejsza obci enie jej twórców i wyra nie zwi ksza ilo pozytywnych do wiadcze u ytkowników.