You are on page 1of 39

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Delphi 6. Vademecum

profesjonalisty. Tom II
Autorzy: Xavier Pacheco, Steve Teixeira
Tumaczenie: Andrzej Grayski
ISBN: 83-7197-745-X
Tytu oryginau: Delphi 6 Developers Guide
Format: B5, stron: 496
oprawa twarda
Zawiera CD-ROM

Drugi tom Delphi 6. Vademecum profesjonalisty, ktry oddajemy do rk Czytelnikw,


powicony jest zaawansowanym mechanizmom Delphi, zwizanym z programowaniem
systemowym, nowoczesn obsug baz danych i tworzeniem aplikacji internetowych.
Jego tre wyranie oddaje specyficzn rol Delphi 6 jako wiadectwa coraz
cilejszego integrowania si trzech najwaniejszych filarw wspczesnych zastosowa
komputerw i zdobyczy informatyki: wizualnego projektowania aplikacji, efektywnego
przetwarzania duej iloci danych o coraz wikszej zoonoci oraz Internetu.
Tre ksiki rozpoczyna si od omwienia podstawowych zasad tworzenia
i wykorzystywania pakietw Delphi. Aplikacje dawno ju przestay by pojedynczymi
programami ich postpujca zoono wymusza raczej budow moduow, ktrej
najwaniejszymi konsekwencjami s: atwo utrzymania i rozbudowy oraz
sprawniejsza dystrybucja. Pakiety stanowi take podstawowy budulec IDE, bdc
nonikami jego kluczowych elementw, jak komponenty, edytory komponentw
i waciwoci oraz zintegrowane narzdzia rozszerzajce.
Mimo, i Delphi uwalnia programist od mnstwa nucych, niskopoziomowych
szczegw Windows, nie jest ono w stanie zapewni elastycznoci wystarczajcej do
wykorzystania wszystkich moliwoci Windows; programista zmuszony jest wic
niekiedy do bezporedniego posugiwania si funkcjami Win32 API, w czym Delphi mu
bynajmniej nie przeszkadza, a raczej oferuje dodatkowe mechanizmy wspomagajce.
Czytelnicy znajd w niniejszej ksice kilka praktycznych przykadw wykorzystania
Win32 API: obsug zasobnika, zarzdzanie paskami aplikacji, tworzenie i obsug
cznikw powoki oraz aplikacje rozszerzajce jej funkcjonalno.
Jedn z najwikszych zalet IDE Delphi jest moliwo jego rozbudowy przez
uytkownika. Oprcz (wynikajcej z obiektowego modelu programowania) moliwoci
definiowania nowych komponentw, moliwe jest take tworzenie specjalizowanych
edytorw wsppracujcych z projektantem formularzy; ich integracj ze rodowiskiem
umoliwia interfejs Open Tools API, ktrego unowoczenion bo bazujc ju
cakowicie na interfejsach COM wersj opisujemy w jednym z rozdziaw.



 
 






      
 

Rozdzia 14.  


Korzyci zwizane z uywaniem pakietw........................................................................... 19
Redukcja kodu wynikowego ........................................................................................... 19
Zmniejszenie rozmiaru dystrybuowanych plikw .......................................................... 20
Pakiety jako zasobniki z komponentami......................................................................... 20
Kiedy nie opaca si uywa pakietw?................................................................................ 20
Typy pakietw ....................................................................................................................... 21
Pliki pakietu........................................................................................................................... 21
Kompilacja aplikacji z podziaem na pakiety........................................................................ 21
Instalowanie pakietw w rodowisku IDE ............................................................................ 22
Tworzenie i instalowanie wasnych pakietw....................................................................... 23
Edytor pakietw .............................................................................................................. 23
Scenariusze projektowania pakietw .............................................................................. 24
Wersjonowanie pakietw ...................................................................................................... 27
Dyrektywy kompilacji zwizane z tworzeniem pakietw..................................................... 28
Sabe wizanie moduu w pakiecie ................................................................................. 28
Konwencje nazewnictwa pakietw ....................................................................................... 29
Pakiety rozszerzajce funkcjonalno aplikacji .................................................................... 30
Generowanie formularzy rozszerzajcych ...................................................................... 30
Eksportowanie funkcji i procedur z pakietw ....................................................................... 36
Wywietlanie formularza zawartego w pakiecie............................................................. 36
Uzyskiwanie informacji o pakiecie ....................................................................................... 39
Podsumowanie....................................................................................................................... 42

Rozdzia 15.  !" #$ %


Podstawy COM ..................................................................................................................... 43
COM model obiektu-komponentu ............................................................................. 43
COM kontra ActiveX kontra OLE.................................................................................. 44
Nieco terminologii .......................................................................................................... 45
C wspaniaego jest w ActiveX?................................................................................... 45
OLE 1 kontra OLE 2 ....................................................................................................... 45
Pami strukturalna......................................................................................................... 46
Jednolity transfer danych ................................................................................................ 46
Modele wtkowe obiektu COM ...................................................................................... 46
COM+ ............................................................................................................................. 47


  


Technologia COM a Object Pascal ....................................................................................... 47


Interfejsy ......................................................................................................................... 47
Szczegy korzystania z interfejsw COM w Delphi 6 .................................................. 50
Typ HRESULT ............................................................................................................... 55
Klasy COM i obiekty-producenci ......................................................................................... 57
Klasy TComObject i TComObjectFactory ..................................................................... 57
Wewntrzprocesowe serwery COM ............................................................................... 58
Zewntrzprocesowe serwery COM................................................................................. 61
Agregacja obiektw COM .............................................................................................. 62
Rozproszona realizacja COM (DCOM) ................................................................................ 63
Automatyzacja COM............................................................................................................. 64
Interfejs IDispatch........................................................................................................... 64
Informacja o typie obiektu automatyzacji....................................................................... 66
Wczesne wizanie kontra pne wizanie ...................................................................... 66
Rejestracja ....................................................................................................................... 67
Tworzenie przykadowego serwera automatyzacji ......................................................... 67
Tworzenie aplikacji-kontrolerw automatyzacji............................................................. 80
Zaawansowane techniki automatyzacji ................................................................................. 87
Zdarzenia automatyzacji ................................................................................................. 87
Kolekcje automatyzacji................................................................................................. 100
Nowe typy interfejsw w bibliotece typu ..................................................................... 108
Wymiana danych binarnych.......................................................................................... 109
Za kulisami, czyli elementy COM wbudowane w Object Pascal ................................. 111
TOleContainer ..................................................................................................................... 121
Elementy podstawowe prosta aplikacja demonstracyjna......................................... 122
Mechanizmy zaawansowane nieco wiksza aplikacja ............................................. 123
Podsumowanie..................................................................................................................... 132

Rozdzia 16. &'( 


Wsppraca aplikacji z zasobnikiem systemowym ............................................................. 133
Funkcja Shell_NotifyIcon ............................................................................................. 133
Zarzdzanie komunikatami ........................................................................................... 136
Ikony i podpowiedzi...................................................................................................... 136
Wspdziaanie myszy z zasobnikiem .......................................................................... 137
Ukrywanie i odkrywanie aplikacji ................................................................................ 140
Paski narzdziowe aplikacji na pulpicie.............................................................................. 147
Formularz TAppBar enkapsulacja paska aplikacji................................................... 148
Przykad wykorzystania paska aplikacji ....................................................................... 157
czniki powoki (shell links) ............................................................................................. 159
Uzyskiwanie instancji interfejsu IShellLink ................................................................. 160
Zastosowanie interfejsu IShellLink............................................................................... 160
Przykadowa aplikacja .................................................................................................. 168
Serwery rozszerzajce powoki (shell extensions) .............................................................. 175
Tworzenie obiektw COM serwerw rozszerzajcych................................................. 176
Rozszerzenia typu Copy Hook...................................................................................... 177
Rozszerzenia typu Context Menu ................................................................................. 182
Rozszerzenia typu Icon ................................................................................................. 191
Rozszerzenia typu Info Tip ........................................................................................... 199
Podsumowanie..................................................................................................................... 205

Rozdzia 17. ) * +,Interfejsy Open Tools .......................................................................................................... 207


Przykady zastosowa ......................................................................................................... 210
Prymitywny kreator (Dumb Wizard)......................................................................... 210
Kreator kreatorw ......................................................................................................... 213
DDG SEARCH ............................................................................................................. 223



Kreatory formularzowe ....................................................................................................... 233


Podsumowanie..................................................................................................................... 240



 
        !

Rozdzia 18.  ./!"01")2 +%


Co to jest COM+?................................................................................................................ 243
Dlaczego COM? .................................................................................................................. 243
Usugi .................................................................................................................................. 244
Transakcje ..................................................................................................................... 244
Bezpieczestwo............................................................................................................. 245
Aktywacja natychmiastowa .......................................................................................... 250
Komponenty kolejkowane ............................................................................................ 250
Komasacja obiektw ..................................................................................................... 257
Zdarzenia....................................................................................................................... 258
Mechanizmy wykonawcze .................................................................................................. 265
Baza rejestracyjna ......................................................................................................... 265
Komponenty konfigurowane......................................................................................... 265
Kontekst wykonawczy .................................................................................................. 266
Neutralno wtkowa .................................................................................................... 266
Tworzenie aplikacji COM+................................................................................................. 266
Cel: skalowalno.......................................................................................................... 266
Kontekst wykonawczy .................................................................................................. 267
Obiekty stanowe i bezstanowe ...................................................................................... 267
Czas ycia obiektu a interfejsy...................................................................................... 268
Organizacja aplikacji COM+ ........................................................................................ 269
Transakcje ..................................................................................................................... 269
Zasoby ........................................................................................................................... 270
COM+ w Delphi.................................................................................................................. 270
Kreatory obiektw COM+ ............................................................................................ 270
Szkielet aplikacji wykorzystujcej COM+.................................................................... 271
Przykadowa aplikacja .................................................................................................. 273
ledzenie aplikacji COM+ ............................................................................................ 288
Podsumowanie..................................................................................................................... 289

Rozdzia 19. !34 +


Moliwoci CORBA ........................................................................................................... 291
Architektura CORBA .......................................................................................................... 292
OSAgent........................................................................................................................ 293
Interfejsy ....................................................................................................................... 294
IDL jzyk opisu interfejsw ........................................................................................... 294
Typy podstawowe ......................................................................................................... 295
Typy definiowane przez uytkownika .......................................................................... 296
Aliasy ............................................................................................................................ 296
Wyliczenia..................................................................................................................... 296
Struktury........................................................................................................................ 296
Tablice........................................................................................................................... 296
Sekwencje ..................................................................................................................... 297
Argumenty wywoania metod ....................................................................................... 297
Moduy .......................................................................................................................... 297
Przykad: prosta aplikacja bankowa .................................................................................... 298
Zoone typy danych ........................................................................................................... 307
Delphi, CORBA i Enterprise Java Beans (EJBs) ................................................................ 313
Troch teorii .............................................................................................................. 313
EJB s specjalizowanymi komponentami..................................................................... 314


  


EJB rezyduj wewntrz pojemnika............................................................................... 314


EJB posiadaj predefiniowane API............................................................................... 314
Interfejsy Home i Remote ............................................................................................. 314
Rodzaje EJB .................................................................................................................. 314
Dostosowanie JBuildera 5 do tworzenia EJB ............................................................... 315
Prosta aplikacja EJB...................................................................................................... 316
CORBA a usugi sieciowe................................................................................................... 321
Tworzenie usugi sieciowej........................................................................................... 322
Tworzenie aplikacji-klienta SOAP ............................................................................... 323
Umieszczenie klienta CORBA w serwerze WWW ...................................................... 325
Podsumowanie..................................................................................................................... 328

Rozdzia 20. 42 2 '  +


Czym s usugi sieciowe?.................................................................................................... 329
SOAP................................................................................................................................... 330
Tworzenie usugi sieciowej ................................................................................................. 330
Definiowanie interfejsu wywoywalnego ..................................................................... 332
Implementowanie interfejsu wywoywalnego .............................................................. 333
Testowanie usugi sieciowej ......................................................................................... 334
Wywoywanie usugi sieciowej z aplikacji-klienta ............................................................. 336
Generowanie moduu importowego dla zdalnego obiektu............................................ 337
Konfigurowanie komponentu THTTPRIO ................................................................... 338
Podsumowanie..................................................................................................................... 339

Rozdzia 21. 52#"*52 %


Zasady tworzenia aplikacji wielowarstwowych.................................................................. 341
Korzyci wynikajce z architektury wielowarstwowej............................................................ 342
Centralizacja logiki biznesowej .................................................................................... 342
Architektura uproszczonego klienta .......................................................................... 343
Automatyczne uzgadnianie bdw .............................................................................. 343
Model aktwki .............................................................................................................. 343
Odporno na bdy....................................................................................................... 343
Rwnowaenie obcienia serwera............................................................................... 344
Typowa architektura DataSnap ........................................................................................... 344
Serwer ........................................................................................................................... 344
Klient............................................................................................................................. 347
Tworzenie aplikacji DataSnap............................................................................................. 349
Tworzenie serwera ........................................................................................................ 349
Tworzenie klienta.......................................................................................................... 351
Dodatkowe techniki optymalizowania aplikacji ................................................................. 357
Techniki optymalizacji aplikacji-klienta....................................................................... 357
Techniki optymalizacji serwera aplikacji...................................................................... 359
Przykadowe aplikacje......................................................................................................... 368
Zczenia ....................................................................................................................... 368
Zaawansowane moliwoci komponentu TClientDataSet .................................................. 378
Aplikacje dwuwarstwowe ............................................................................................. 378
Klasyczne bdy................................................................................................................... 379
Udostpnianie i instalacja aplikacji DataSnap .................................................................... 380
Licencjonowanie DataSnap........................................................................................... 380
Konfigurowanie DCOM................................................................................................ 380
Pliki wymagane przez aplikacj.................................................................................... 381
Kopot z Internetem zapory...................................................................................... 382
Podsumowanie..................................................................................................................... 384



 "
     
  #$%
Rozdzia 22.  #2#  6Active Server Objects.......................................................................................................... 387
Active Server Pages ...................................................................................................... 387
Kreator obiektw ASO ........................................................................................................ 389
Edytor biblioteki typu ................................................................................................... 391
Obiekt Response............................................................................................................ 394
Pierwsze uruchomienie ................................................................................................. 395
Obiekt Request .............................................................................................................. 395
Rekompilacja obiektw ASO........................................................................................ 396
Ponowne uruchomienie serwera ASP ........................................................................... 397
Obiekty Session, Server i Application................................................................................. 398
Obiekty ASO i bazy danych ................................................................................................ 399
Obiekty ASO a NetCLX...................................................................................................... 402
ledzenie obiektw ASO..................................................................................................... 403
ledzenie obiektw ASP za pomoc MTS.................................................................... 404
Debugging ASO w Windows NT ................................................................................. 405
Debugging ASO w Windows 2000............................................................................... 406
Podsumowanie..................................................................................................................... 407

Rozdzia 23. (72 %,


Moliwoci WebSnap.......................................................................................................... 409
Wiele moduw danych................................................................................................. 409
Techniki skryptowe....................................................................................................... 409
Komponenty-adaptery................................................................................................... 410
Wielokierunkowe zarzdzanie stronami ....................................................................... 410
Komponenty-producenci............................................................................................... 410
Zarzdzanie sesjami ...................................................................................................... 410
Usugi logowania .......................................................................................................... 411
Zarzdzanie informacj o uytkownikach .................................................................... 411
Zarzdzanie zasobami rozproszonymi .......................................................................... 411
Usugi adowania plikw............................................................................................... 411
Tworzenie aplikacji WebSnap............................................................................................. 411
Projektowanie aplikacji................................................................................................. 411
Rozbudowa aplikacji..................................................................................................... 418
Menu nawigacyjne ........................................................................................................ 419
Logowanie..................................................................................................................... 422
Zarzdzanie informacj o preferencjach uytkownikw .............................................. 423
Przechowywanie informacji pomidzy sesjami uytkownikw ................................... 427
Przetwarzanie obrazw i obsuga grafiki ...................................................................... 429
Wywietlanie zawartoci bazy danych.......................................................................... 430
Konwertowanie aplikacji do postaci ISAPI DLL ......................................................... 434
Zagadnienia zaawansowane ................................................................................................ 435
Komponent LocateFileService...................................................................................... 435
adowanie plikw......................................................................................................... 436
Wykorzystanie specyficznych szablonw..................................................................... 438
Wsppraca komponentu TAdapterPageProducer z komponentami
tworzonymi przez uytkownikw.............................................................................. 438
Podsumowanie..................................................................................................................... 440

Rozdzia 24.  .87. %%


Ewolucja oprogramowania skd przychodzimy?........................................................... 441
Przed rokiem 1980: ....................................................................................................... 442
Pne lata 80.: biurkowe aplikacje bazodanowe........................................................... 442


  


Wczesne lata 90.: aplikacje klient-serwer..................................................................... 442


Pne lata 90.: aplikacje wielowarstwowe i Internet .................................................... 442
Wiek XXI: ruchoma informatyka.............................................................................. 443
Ruchome urzdzenia bezprzewodowe ................................................................................ 443
Telefony komrkowe .................................................................................................... 443
Urzdzenia z systemem PalmOS .................................................................................. 443
PocketPC ....................................................................................................................... 444
RIM BlackBerry............................................................................................................ 444
czno radiowa ................................................................................................................ 444
GSM, CDMA i TDMA ................................................................................................. 444
CDPD ............................................................................................................................ 444
3G.................................................................................................................................. 445
GPRS............................................................................................................................. 445
BlueTooth...................................................................................................................... 445
802.11............................................................................................................................ 445
Serwerowe technologie bezprzewodowe ............................................................................ 446
SMS............................................................................................................................... 446
WAP.............................................................................................................................. 446
I-mode ........................................................................................................................... 456
PQA............................................................................................................................... 456
Uytkowe aspekty aplikacji bezprzewodowych.................................................................. 459
Komutacja obwodw kontra komutacja pakietw........................................................ 459
Bezprzewodowy nie znaczy internetowy............................................................... 460
Czynniki geometryczne................................................................................................. 460
Wprowadzanie danych i techniki nawigacji ................................................................. 460
M-commerce ................................................................................................................. 460
Podsumowanie..................................................................................................................... 461

& '   !(#


Dodatek A

29 :  %;

Dodatek B

2 %;-

2+ %6

Rozdzia 23.

Jedn z nowoci Delphi 6 jest technologia WebSnap, czca wszelkie zalety byskawicznego projektowania aplikacji (RAD) z mechanizmami charakterystycznymi dla aplikacji
serwera WWW. W zwizku z jej wszechstronnoci, przejawiajc si m.in. we wsppracy
z dowolnym niemal rdem bazami danych, grafik, surowymi plikami itp. oraz
w obsudze jzykw skryptowych, programici zyskali wspania moliwo przeniesinia swego dorobku i dowiadcze na platform internetow, co nadaje now jako procesowi tworzenia aplikacji serwerw WWW i programowaniu rozproszonemu w oglnoci.

WebSnap nie jest technologi cakowicie now jest ona wynikiem integracji dwch istniejcych technologii: WebBrokera i  . Dziki temu przenoszenie istniejcych
aplikacji na platform WebSnap nie jest zbytnio skomplikowane. Technologia WebSnap
daje wiele uytecznych moliwoci, z ktrych najwaniejsze teraz w skrcie omwimy.


 
W poprzednich wersjach Delphi aplikacje WebBroker i InternetExpress posiaday pojedynczy modu danych (
 ). Uycie kilku moduw danych w ramach pojedynczej
aplikacji byo niemoliwe na etapie projektowania i wymagao dynamicznego tworzenia
tyche w kodzie programu. WebSnap eliminuje to ograniczenie, dopuszczajc dowoln
liczb moduw danych w ramach jednej aplikacji; kady z tych moduw reprezentuje
pojedyncz stron WWW. Pozwala to na rwnoleg prac kilku projektantw nad rnymi
fragmentami aplikacji.

 
WebSnap umoliwia wykorzystanie technik skryptowych w tworzonych aplikacjach, co
znacznie uatwia tworzenie i konfigurowanie aplikacji i dokumentw HTML. Komponentem odpowiedzialnym za obsug skryptw po serwerowej stronie aplikacji jest 
(i jego komponenty pochodne).




u    

  
Komponenty wywodzce si z klasy  definiuj interfejs pomidzy skryptowymi
mechanizmami serwera i klienta. Stanowi one jedyny rodek udostpniania klientom skryptw serwera, co chroni te skrypty przed przypadkow lub zamierzon modyfikacj i jednoczenie pozwala na ukrycie tych funkcji, ktre nie powinny by wyeksponowane dla
aplikacji-klientw.
Definiujc komponent pochodny do  zapewniamy sobie zarzdzanie specyficzn
zawartoci, stanowic materia rdowy na wynikow stron WWW; materia ten dostpny jest take na etapie projektowania aplikacji. Taki komponent moe zawiera dane
oraz wykonywa okrelone akcje; na przykad komponent  moe wywietla rekordy ze zbioru danych oraz wykonywa rozmaite czynnoci zwizane z tym zbiorem, jak przewijanie, dodawanie, aktualizacja i usuwanie rekordw.

     


WebSnap oferuje kilka sposobw obsugi da HTTP. Zawarto strony WWW moe
by identyfikowana przez nazw tej strony, przez akcj komponentu  (lub pochodnego) lub przez zwyk akcj (na mod WebBrokera). Umoliwia to elastyczn realizacj
wyboru strony do wywietlenia wywietlenie takie moe nastpi wskutek nacinicia
przycisku   lub wskutek wybrania cznika (z menu cznikw zbudowanego na
podstawie zestawu dostpnych stron).

 
Integraln czci aplikacji tworzonych z udziaem WebBrokera byy komponentyproducenci stron, ktrych zadaniem byo generowanie zawartoci strony wynikowej (w formacie HTML) na podstawie rnorodnych rde danych (na przykad zbioru danych lub wybranego rekordu). InternetExpress rozszerza t koncepcj o komponent    
(w Delphi 6 zastpiony przez   por. rozdzia 21.), a WebSnap idzie
jeszcze dalej, oferujc zestaw nowych komponentw wykorzystujcych zawarto komponentu  oraz danych w formacie XSL/XML. Najwaniejszym z tych komponentw jest  , generujcy zawarto strony wynikowej na podstawie
akcji i pola komponentu  (lub pochodnego).

   
Aplikacje WebSnap posiadaj wbudowany mechanizm zarzdzania sesjami, umoliwiajcy
ledzenie akcji danego uytkownika wrd wielu da HTTP. Poniewa HTTP jest protokoem bezstanowym (ang. stateless), aplikacja musi zapewni sobie we wasnym zakresie rodki do utrzymywania informacji o biecym stanie sesji kadego uytkownika; do
rodkw tych nale m.in. cookies, odwoania do URL lub ukryte pola. WebSnap upraszcza
to zadanie, udostpniajc komponent   , sprawujcy kontrol nad wszystkimi
daniami, niezalenie dla kadej sesji; informacja o sesji dostpna jest zarwno dla skryptu
obecnego w serwerze, jak i dla kodu samej aplikacji.

  ! u "#$




 
Wzgldy bezpieczestwa aplikacji WebSnap wymagaj logowania kadego uytkownika;
WebSnap automatyzuje proces logowania, dostarczajc w tym celu odpowiednich komponentw-adapterw (   i     ) realizujcych
dialog logowania i, w poczeniu z mechanizmami zarzdzania sesjami, wykonujcych
uwierzytelnianie zgodne z wybranym modelem bezpieczestwa aplikacji. Kady uytkownik prbujcy uzyska dostp do nieautoryzowanych stron odsyany jest automatycznie
na stron logowania.

     !  


Integraln czci zarzdzania sesjami jest nadzr nad uytkownikami i ich uprawnieniami w stosunku do aplikacji (lub jej elementw). WebSnap umoliwia przechowywanie
rnorodnych informacji o kadym z uytkownikw (jak uprawnienia, preferencje itp.)
i wykorzystywanie ich na potrzeby aplikacji.

   " 


Strony HTML wykorzystywane, a take generowane, przez aplikacj mog by zalene
od wielu rnych plikw i zasobw, czsto generowanych w sposb dynamiczny. Aby
uatwi zarzdzanie takimi rozproszonymi zasobami, WebSnap udostpnia tzw. usugi
lokalizacyjne (ang. location services).



  
Zarzdzanie adowaniem plikw przez serwer (ang. file uploading) wymaga zazwyczaj
do duej iloci specjalizowanego kodu. WebSnap uwalnia programist od tego problemu,
oferujc odpowiedni komponent-adapter sprawujcy kontrol nad adowanymi plikami
i udostpniajcy zwizane z tym formularze.

Najefektywniejszym i najbardziej pouczajcym sposobem poznania moliwoci oferowanych przez technologi WebSnap bdzie z pewnoci samodzielne stworzenie przykadowej aplikacji.

#   


Tworzenie aplikacji WebSnap staje si prostsze, gdy uywa si paska narzdziowego IDE
o nazwie  (rys. 23.1); jeeli nie jest on widoczny, kliknij prawym przyciskiem
myszy ktrykolwiek z widocznych paskw i w wywietlonym menu kontekstowym zaznacz opcj .




u    



Pasek narzdziowy Internet

Kliknij nastpnie przycisk New WebSnap Application (ten z rk trzymajc globus)


spowoduje to wywietlenie okna przedstawionego na rysunku 23.2.


Kreator nowej
aplikacji WebSnap

Okno to zawiera opcje okrelajce charakter tworzonej aplikacji WebSnap. Opcje w sekcji
Server Type okrelaj typ serwera, ktry bdzie uruchamiany przez aplikacj; ich znaczenie jest nastpujce:
n ISAPI/NSAPI Dynamic Link Library wybranie tej opcji spowoduje utworzenie

projektu aplikacji-rozszerzenia serwera WWW, przeznaczonej do uruchomienia


pod kontrol serwera ISS (lub innego serwera obsugujcego aplikacje ISAPI,
np. Personal Web Servera lub serwera Netscape z adapterem ISAPI). Wynikiem
kompilacji projektu jest biblioteka DLL, wykonywana w przestrzeni adresowej
serwera WWW.
n CGI Stand-alone executable opcja ta reprezentuje niezalen aplikacj

konsolow CGI, dokonujc zapisu do standardowych portw wejcia-wyjcia


i odczytu z nich, zgodnie ze specyfikacj CGI (Common Gateway Interface).
Niemal wszystkie serwery WWW obsuguj aplikacje CGI.
n Win-CGI Stand-alone executable ta opcja zwizana jest z mao popularnym

(i nie zalecanym) typem aplikacji CGI, przeznaczonej dla Windows i komunikujcej


si z serwerem za porednictwem tekstowych plikw .INI.
n Apache Shared Module (DLL) projekt inicjowany w wyniku wybrania tej opcji

generuje bibliotek DLL przeznaczon dla serwera Apache; szczegowe informacje


na temat tego serwera moesz znale na stronie http://www.apache.org.
n Web App Debugger executable jeeli wybierzesz t opcj, utworzon aplikacj

bdzie mona uruchomi w rodowisku specjalnego debuggera Delphi o nazwie


Web App Debugger (rys. 23.3); wynikowy modu aplikacji bdzie
zewntrzprocesowym serwerem COM, kontrolowanym i uruchamianym przez ten

  ! u "#$



debugger. Stwarza to okazj do penego wykorzystania Delphi w zakresie ledzenia


aplikacji programista nie jest ju skazany na testowanie aplikacji metod prb
i bdw, wymuszajce wielokrotne zatrzymywanie i ponowne uruchamianie serwera.



Web App Debugger
debugger aplikacji
WebSnap

Aby nasza przykadowa aplikacja bya jak najbardziej pouczajca, wybierzemy wariant
Web App Debugger executable.
Web App Debugger uruchamiany jest za pomoc polecenia   
   .
Aby mg on funkcjonowa prawidowo, konieczne jest zarejestrowanie aplikacji
! ", znajdujcej si w podkatalogu Bin zainstalowanego Delphi 6
naley po prostu uruchomi jednokrotnie t aplikacj np. z poziomu wiersza polece.
Web App Debugger spenia rol serwera dla testowanej aplikacji, symuluje wic
niejako rzeczywiste warunki jej pracy. Projekt stworzony w wyniku wybrania opcji
Web App Debugger executable kreatora z rysunku 23.2 zawiera formularz i sieciowy
modu danych (ang. Web module). Formularz peni rol rodowiska dla serwera COM,
ktry zostaje automatycznie zarejestrowany przy pierwszym uruchomieniu aplikacji
i staje si osigalny za porednictwem przegldarki WWW. Poniewa testowana
aplikacja jest wykonywalnym moduem .EXE, mona j zaadowa w zwyky sposb
do IDE i ustawi punkty przerwa (ang. breakpoints) w interesujcych miejscach kodu.
Aby uruchomi testowan aplikacj za porednictwem przegldarki WWW, naley
uruchomi Web App Debugger i klikn hipercze zatytuowane Default URL;
spowoduje to uruchomienie programu udostpniajcego list zarejestrowanych
w systemie zewntrzprocesowych serwerw COM, z ktrej mona wybra aplikacj
do uruchomienia. Za pomoc opcji View Details moemy pozna systemowe
szczegy wskazanej aplikacji, a take usun j z rejestru, jeeli nie bdzie duej
potrzebna. Nie naley wyrejestrowywa aplikacji ! " jeeli dokonamy
jej wyrejestrowania przez pomyk, trzeba bdzie zarejestrowa j ponownie, przez
uruchomienie jej z wiersza polece.

Kolejna sekcja opcji kreatora (Application Module Components) umoliwia okrelenie


typu moduu danych oraz zawartych w nim komponentw. Wybranie opcji Page Module
spowoduje utworzenie sieciowego moduu danych (Web module) reprezentujcego stron
HTML; wybranie opcji Data Module spowoduje utworzenie tradycyjnego moduu danych
(data module) funkcjonujcego identycznie z moduem w zwykej aplikacji klient-serwer.
Dla naszej aplikacji wybierzemy sieciowy modu danych (Page Module).




u    

Po klikniciu przycisku Components ujrzymy okno przedstawione na rysunku 23.4.




Okrelenie zestawu
komponentw
umieszczanych
automatycznie
w module danych

Kreator zaoferuje nam do wyboru nastpujce komponenty:


n Application Adapter zarzdza polami i akcjami obiektu skryptowego
w serwerze; jego najbardziej interesujc waciwoci jest .
n End User Adapter zarzdza informacjami o aktualnie zalogowanym uytkowniku:

jego nazw, przywilejami, identyfikatorem sesji itp. Moe rwnie zajmowa si


procesem logowania i wylogowania uytkownika.
n Page Dispatcher zajmuje si obsug da HTTP zwizanych ze stron

jako caoci (inaczej mwic z nazw strony). Udostpnia on dan stron


na podstawie cznika HREF lub odwoania z wntrza akcji.
n Adapter Dispatcher zarzdza daniami wygenerowanymi przez akcje

komponentw-adapterw. Najczciej s to dania wysyki formularzy HTML.


n Dispatcher Actions ta opcja zwizana jest z komponentem 
  #,

dobrze znanym uytkownikom WebBrokera. Zajmuje si on obsug da


bazujcych na adresach URL i moe by uyty do definiowania dodatkowych
akcji, na wzr WebBrokera.
n Locate File Service zdarzenia tego komponentu generowane s kadorazowo,

gdy sieciowy modu danych wymaga wprowadzania danych HTML. Umoliwia


to przechwycenie operacji wczytywania danych i zastpienie lub uzupenienie
standardowych operacji, czyli w praktyce wczytanie strumienia HTKL
z dowolnego urzdzenia. Komponent ten wykorzystywany jest bardzo czsto
do tworzenia standardowych stron na podstawie zawartoci innych stron i szablonw.
n Session Service ten komponent zajmuje si zarzdzaniem sesjami uytkownika,

umoliwiajc utrzymywanie informacji o stanie kadej sesji uytkownika pomidzy


kolejnymi daniami HTTP. Ma on rwnie moliwo przerwania sesji uytkownika
po przekroczeniu przez niego ustalonego okresu bezczynnoci. Moliwe jest rwnie
dodawanie specyficznej informacji zwizanej z dan sesj odpowiedzialna
za to jest waciwo   "$, bdca waciwoci tablicow, indeksowan

  ! u "#$

%

acuchami znakw1. Fizycznie, komponent    wykorzystuje cookies


(na komputerze klienta) do przechowywania informacji o stanie sesji, moliwe
jest jednak stworzenie klasy pochodnej wykorzystujcej w tym celu inne rodki,
jak zmienne URL lub ukryte pola.
n User List Service komponent ten utrzymuje list uytkownikw uprawnionych

do logowania si do aplikacji oraz przechowuje niektre informacje o tych


uytkownikach.
Z kad z opcji okna z rys. 23.4 zwizana jest rozwijana lista, oferujca do wyboru
dostpne komponenty. List t mona poszerzy o samodzielnie tworzone
komponenty naley je tylko zarejestrowa w WebSnap. Moliwe jest na przykad
stworzenie komponentu pochodnego do   , wykorzystujcego inny
ni cookies mechanizm do przechowywania informacji o stanie sesji.

By wybra wszystkie dostpne kategorie komponentw, zaznacz wszystkie pola opcji.


Nastpnie z listy towarzyszcej opcji End User Adapter wybierz komponent TEndUserSessionAdapter; komponentowi temu zostanie automatycznie przypisany identyfikator
sesji uytkownika kocowego. Kliknij przycisk OK.
Kolejna opcja zwizana jest z generowan stron HTML i umoliwia okrelenie jej nazwy
w naszym przykadzie bdzie to Home. Za pomoc przycisku Page Options mona
okreli waciwoci tworzonej strony Delphi udostpnia w tym celu kreator, ktrego
okno jest przedstawione na rysunku 23.5.


Okno waciwoci
docelowej strony HTML

Opcje sekcji   umoliwiaj wybranie odpowiedniego komponentu-producenta


strony, stosownie do rda danych, na podstawie ktrego generowany bdzie strumie
HTML stanowicy zawarto strony wynikowej. Wybierz komponent  .
W polu Script Engine mona wybra jeden z dwch oferowanych przez Delphi 6 jzykw
skryptowych: JScript i VBScript; pozostaw domyln warto JScript.
Opcje z grupy HTML umoliwiaj okrelenie charakteru strony docelowej. Delphi 6 domylnie oferuje standardow stron z prostym menu nawigacyjnym (Standard) oraz stron
1

To stwierdzenie jest mocno uproszczone:   "$ jest tak naprawd kolekcj, posiada bowiem licznik
elementw $%  i ich tablic $ &'; dla uproszczenia mona jednak przyj, i istotnie mamy
do czynienia z tablic uproszczenie to nie dotyczy oczywicie kodu rdowego aplikacji! przyp. tum.

&


u    

cakowicie pust (Blank), moliwe jest jednake zarejestrowanie w WebSnap wasnego


szablonu strony i uycie go w tym miejscu. Dla naszej aplikacji uyjemy strony standardowej (Standard).
Pola Name i Title w sekcji Page powinny zawiera nazw strony Home (nadan jej w oknie
gwnym kreatora). Upewnij si ponadto, e zaznaczone jest pole Published, a pole Login
Required pozostaje niezaznaczone.
Po klikniciu przycisku OK powrcisz do okna gwnego kreatora; po klikniciu jego przycisku OK powiniene zobaczy wygenerowany modu danych, przypominajcy wygldem
ten z rysunku 23.6.


Sieciowy modu
danych aplikacji
WebSnap

Nie powiedzielimy jeszcze ani sowa na temat komponentu


 %   . Peni
on rol koordynatora wicego ze sob wszystkie pozostae komponenty moduu danych,
umoliwiajc im wzajemne odwoywanie si do swych instancji oraz komunikowanie si
ze sob. Spojrzawszy w okno inspektora obiektw nietrudno zauway, i wikszo jego
waciwoci to referencje do pozostaych komponentw.
Na tym etapie projekt nadaje si do zapisania; nadaj moduowi sieciowemu nazw () 
(zamiast proponowanej *+), formularzowi gwnemu   (zamiast proponowanej *,), a projektowi -. .
Zawarto okna edytora kodu dla moduu ()  te wyglda cokolwiek niecodziennie
(rys. 23.7). Po pierwsze, od razu rzucaj si w oczy zakadki u dolnej krawdzi okna. Kady
sieciowy modu danych jako e reprezentuje stron WWW oprcz kodu pascalowego posiada take skryptowy odpowiednik w formacie HTML, dostpny za porednictwem drugiej (liczc od lewej) zakadki. Poniewa w oknie edytora z rysunku 23.5 wybrae standardowy szablon dla strony WWW, wygenerowana strona zawiera podstawowe

  ! u "#$

'

menu nawigacyjne uwzgldniajce wszystkie opublikowane strony aplikacji; menu to bdzie


automatycznie uzupeniane w miar dodawania nowych stron do aplikacji.


Skrypt strony
HTML zwizanej
z sieciowym
moduem danych

Domylny kod HTML, wygenerowany dla moduu () , przedstawiamy na wydruku
23.1. Oprcz regularnych instrukcji HTML zawiera on take elementy JavaScriptu.

Skrypt strony generowanej przez sieciowy modu danych

 


 
 


 
 
 


 

   !" # "$ % 

   &
' # (($ % 
)    &
' 
 * 

   !" $ % 
   +   !",-. +!"
 * 

   !
.  $ % 
      !
. ,-. !

 * 
 * 
/ 
 /
 
 +0+ 
 +0+
 
  1 "  $
 ((
 0
 2 # $2 3'4$$

(


u    
%

 
$"
 $
%

 0$  5 (62762(

 ' # 
$'$
 5 (   +( 5 
$,-. 5 (+( 5 
$
 5 ((

 5 
$

55
*
*

 $ -)
$

 


.8' 9:; +5+ <8!8- +- +)
 1 
=>
)9#.8'


=>   ?"> 1 @
1A
&
B 1 ?= 
 1 ?
 
=>

 1 )9



 


Zwr uwag, i Delphi rozpoznaje skadni pliku HTML, wyrniajc elementy charakterystyczne dla jzyka skryptowego (szczegy zwizane z wyrnianiem skadni przez
edytor kodu konfigurowalne s z poziomu opcji edytora Tool/Editor Options na
stronie Color). Moliwe jest take uycie wasnego edytora stron HTML, na przykad
HomeSite, i zintegrowanie go z IDE integracji takiej dokonuje si za porednictwem
karty Internet opcji rodowiskowych (Tools/Environment Options). W oknie Internet File
Types zaznacz pozycj HTML i kliknij przycisk Edit, a nastpnie w polu Edit Action (okna
Edit Type) wpisz (lub wybierz z listy) odpowiedni akcj zarejestrowan w systemie dla
plikw HTML2. W wyniku kliknicia zakadki HTML Result pojawi si kod strony wynikowej w czystym HTML-u, natomiast kliknicie zakadki Preview udostpnia ostateczn, graficzn posta strony.

$"    


Przystpimy teraz do rozbudowy projektu wygenerowanego przez kreator. Na pocztek
przejd do moduu danych Home, wybierz komponent ApplicationAdapter i zmie jego
waciwo ApplicationTitle na Delphi 6 Vademecum profesjonalisty aplikacja demonstracyjna WebSnap; gdy klikniesz zakadk Preview (u dou okna edytora kodu) zauwaysz,
i zmiana ta odzwierciedlona zostaa automatycznie w wygldzie strony. Dzieje si tak
za spraw nastpujcego elementu skryptowego:
 


 

powodujcego wczenie tytuu aplikacji ( ) do kodu HTML.


2

Podobnie jak dla innych typw plikw, dla plikw *.HTM i *.HTML sterowanie dostpnymi akcjami
odbywa si z poziomu okna Typy plikw opcji folderw; naley wrd zarejestrowanych typw plikw
odnale kategori HTML Document przyp. tum.

  ! u "#$

)

Nastpnie kliknij zakadk HTML, przejd w poblie koca pliku i po znaczniku / 0
wstaw nastpujc sekcj kodu:

Przejd nastpnie na zakadk Preview, by zobaczy nowy tekst w graficznym widoku


strony.
Uruchom teraz projekt; ukae si pusty formularz to wanie jest serwer COM aplikacji.
Jeeli nie jest on jeszcze zarejestrowany, uruchomienie to dokona jego rejestracji. Zamknij
ten formularz (koczc w ten sposb wykonywanie aplikacji) i uruchom Web App Debugger (za pomoc odpowiedniego polecenia z menu Tools). Kliknij jego hipercze Default
URL (powinno wskazywa aplikacj ServerInfo) i z wywietlonej listy zarejestrowanych
serwerw COM wybierz pozycj DDG6DEMO.DDG6TestApp, a nastpnie kliknij przycisk
Go; w przegldarce WWW powinna pojawi si wynikowa strona w formacie zblionym
do prezentowanego na rysunku 23.8.


Strona HTML
wygenerowana
przez aplikacj
WebSnap

%   
Dodamy teraz do aplikacji nastpn stron ilustrujc funkcjonowanie menu nawigacyjnego.
Przejd do paska menu gwnego IDE i z paska narzdziowego Internet (por. rysunek 23.1)
wybierz drugi przycisk (New WebSnap Page Module). Spowoduje to uruchomienie kreatora New WebSnap Page Module pozostaw standardow zawarto wszystkich jego
pl z wyjtkiem pola Name, w ktre powiniene wpisa nazw . Spowoduje to
utworzenie nowego moduu danych, zawierajcego pojedynczy komponent  .




u    

Ustawianie opcji tworzenia i buforowania moduu danych


Kreator New WebSnap Page Module zawiera (w sekcji Module Options) dwa pola: Create, okrelajce zasady tworzenia instancji moduu danych oraz Caching, okrelajce, co stanie si z instancj moduu danych, gdy zakoczy on obsug dania.
Instancje moduu danych mog by tworzone zawsze (ang. Always) albo na danie (ang. On Demand), czyli wwczas, gdy pojawi si danie obsugiwane przez ten modu. T drug moliwo
stosuje si do stron wywietlanych bardzo rzadko, moduy odpowiadajce stronom czsto wywietlanym powinny korzysta z wariantu Always.
Gdy modu zakoczy obsug dania, jego instancja moe by zwolniona (opcja Delete Instance)
lub przeniesiona do puli tzw. instancji oczekujcych (opcja Cache Instance). Gdy pojawi si nowe
danie dotyczce danego moduu, a we wspomnianej puli znajduje si jego instancja, to ona
wanie zostanie uyta przez system (zamiast tworzenia nowej instancji); naley jedynie mie na
uwadze fakt, i stan wszystkich pl moduu bdzie taki, jak w momencie zakoczenia jego pracy
w poprzednim wcieleniu.

Kod HTML tego moduu jest identyczny z tym, ktry widziae przed chwil (dla pierwszej
strony). Zapisz modu pod nazw wmSimple.
Dodaj teraz jaki przykadowy tekst przy kocu moduu na przykad taki:

Skompiluj i uruchom aplikacj za porednictwem Web App Debuggera (jak poprzednio).


W obrazie strony gwnej pojawi si teraz menu zawierajce tytuy wszystkich innych
stron. To menu jest rezultatem wykonania nastpujcego fragmentu skryptu:
  1 "  $
 ((
 0
 2 # $2 3'4$$
%

 
$"
 $
%

 0$  5 (62762(

 ' # 
$'$
 5 (   +( 5 
$,-. 5 (+( 5 
$
 5 ((

 5 
$

55
*
*

 $ -)
$


Fragment ten realizuje iteracj po wszystkich stronach zarejestrowanych w obiekcie  ,


tworzc menu z ich nazw. Opcja menu zostaje uczyniona cznikiem, jeeli strona reprezentowana przez t opcj nie jest stron biec (innymi sowy, adna strona nie zawiera

  ! u "#$



cznika do siebie samej). Nic oczywicie nie stoi na przeszkodzie, by to proste w gruncie
rzeczy menu przystosowa do bardziej specyficznych wymogw konkretnej aplikacji.
Gdy przyjrzysz si uwanie ekranowi komputera w momencie przeczania stron,
zobaczysz migoczcy w tle formularz gwny aplikacji. Jest to spowodowane
traktowaniem aplikacji przez Web App Debugger: przy kadym nowym daniu
uruchamia on aplikacj zawierajc serwer COM, przekazuje jej danie, odbiera
odpowied i zamyka aplikacj.

Generowan stron WWW mona uczyni dostpn jedynie dla zalogowanych uytkownikw naley w tym celu zaznaczy opcj Login Required w oknie kreatora New
WebSnap Page Module. Utwrz now stron, nadaj jej nazw LoggedIn i zaznacz wspomnian opcj. Zapisz wygenerowany modu pod nazw wmLoggedIn. Nastpnie dodaj
fragment tekstu powitalnego dla zalogowanego uytkownika:

Pomidzy kodem pascalowym stron Simple i LoggedIn istnieje niewielka rnica w kodzie rejestracyjnym, znajdujcym si w sekcji 1  moduu:




?


 )-C",   


)-C",   )D ". 
)D ". < ! :E
):< F1"
 E!
-C"
 GE (($E
 8& E <$ $2

Kod ten dokonuje rejestracji stron w obiekcie


 23 ), sprawujcym nadzr
nad wszystkimi stronami i udostpniajcym ich kod HTML w razie potrzeby. Modu ten
zarzdza take instancjami poszczeglnych moduw danych. Parametrami konstruktora
obiektu 
 ! s opcje zwizane z publikowaniem strony ((  #) i wymogami logowania ( 23); jeeli ktra z tych opcji nie jest zaznaczona w oknie
kreatora, odpowiadajcy jej atom jest w kodzie rejestracyjnym wykomentowany, jak na
przykad w przypadku strony Simple:




?


 )-C",   


)-C",   )D ". 
)D ". < 9
E
):< =YR2WDNKUJGF]YR.QIKP4GSWKTGF_?E (($E
 8& E <$$2

Uatwia to pniejsz zmian opcji strony bezporednio w kodzie, bez potrzeby uruchamiania kreatora.




u    

& 
Logowanie uytkownika przeprowadzane bdzie za pomoc kolejnej strony. W przeciwiestwie do dotychczas utworzonych Simple i LoggedIn nie powinna ona pojawia si w menu nawigacyjnym, a wic nie powinna by publikowana; naley w zwizku
z tym usun zaznaczenie opcji Published w oknie kreatora New WebSnap Page Module.
Naley oczywicie pozostawi niezaznaczon opcj Login Required nie mona przecie wymaga wczeniejszego zalogowania w celu logowania si!
Nazwij now stron Login i wybierz TAdapterPageProducer jako klas jej komponentu-producenta. Zachowaj j pod nazw wmLogin. Nastpnie umie w jej module danych
komponent    (ze strony
  palety komponentw).
Komponent   jest specjalizowanym komponentem generujcym kod
HTML wynikowej strony WWW na podstawie zawartoci komponentu  (lub pochodnego). W naszym przykadzie komponentem rdowym bdzie komponent  4
  zawierajcy wszystko, co potrzeba do pobrania nazwy i hasa uytkownika,
bez potrzeby pisania jakiegokolwiek kodu.
Aby jednak logowanie w ogle miao jaki sens, naley wpierw zdefiniowa uytkownikw i ich hasa. W tym celu przejd do moduu Home i kliknij dwukrotnie komponent
WebUserList; w wywietlonym oknie (rys. 23.9) masz moliwo dodawania i usuwania
zdefiniowanych uytkownikw, za pomoc klawiszy (odpowiednio Ins i Del). W wersji
znajdujcej si na zaczonym CD-ROM-ie aplikacja rozpoznaje dwch uytkownikw:
56  i 17 ich hasa s tosame z nazwami.


Definiowanie
uytkownikw
za pomoc
komponentu
WebUserList

Przejd teraz do komponentu *    i ustaw jego waciwo  
na   (to nazwa strony logowania). Nastpnie przejd do moduu wmLogin i kliknij
dwukrotnie komponent  . Spowoduje to otwarcie edytora Web Surface
Designer, przedstawionego na rysunku 23.10.
Wybierz pozycj AdapterPageProducer w lewym grnym oknie i kliknij przycisk New
Item. Wybierz AdapterForm i kliknij OK. Nastpnie wybierz (w lewym grnym oknie)
pozycj AdapterForm1 i ponownie kliknij przycisk New Item i wybierz pozycj AdapterErrorList; powtrz t czynno dwukrotnie, dodajc pozycje AdapterFieldGroup i AdapterCommandGroup. Nastpnie ustaw waciwo Adapter komponentu - ,
na   ,.
Wybierz nastpnie pozycj AdapterFieldGroup1 i dodaj do niej dwie pozycje podrzdne
typu AdapterDisplayField; ustaw ich waciwoci FieldName na (odpowiednio) UserName
i Password, za tytuy (waciwo % ) na Uytkownik i Haso.

  ! u "#$





Web Surface Designer

Wybierz pozycj AdapterCommandGroup i ustaw jej waciwo DisplayComponent


na AdapterFieldGroup1. Widok w oknie edytora powinien by podobny do tego z rysunku 23.10. Gdy otworzysz modu (  w oknie edytora kodu (na zakadce Preview),
przekonasz si, i na stronie pojawi si formularz logowania.
Uruchom teraz aplikacj i pozostaw j uruchomion poniewa wykorzystujemy informacj o sesjach uytkownikw, aplikacja powinna pozosta w pamici, by dania poszczeglnych uytkownikw mogy by rejestrowane.
Za pomoc Web App Debuggera wywoaj aplikacj i przejd do strony Simple, wymagajcej, jak wiesz, logowania. Zostaniesz skierowany na stron logowania; wpisz poprawn
nazw i haso uytkownika, kliknij przycisk Login w rezultacie powiniene ujrze dan
stron Simple. To samo bdzie si dzia z kad stron wymagajc logowania zauwa,
i osignlimy to wszystko bez napisania chociaby jednej linijki kodu pascalowego!
Moesz take sprawdzi tzw. idiotoodporno aplikacji przez podanie nazwy nieistniejcego
uytkownika lub niepoprawnego hasa; obsug bdw logowania zajmie si komponent
  , kolekcjonujcy informacj o wystpujcych bdach i wywietlajcy
zwizane z nimi komunikaty.
Zwr uwag, i aplikacja pamita nazw zalogowanego uytkownika i wywietla jego
nazw w powitalnym zwrocie na kadej wywietlanej stronie. Jest to wynikiem nastpujcego fragmentu skryptu moduu danych:

   !" # "$ % 

   &
' # (($ % 
)    &
' 
 * 

       ! 


Kolejn funkcj naszej aplikacji bdzie przechowywanie rozmaitych informacji na temat
preferencji uytkownikw. To do powszechna funkcja dzisiejszych aplikacji biznesowych sprzedawcy chc o swych klientach wiedzie jak najwicej: od numeru karty




u    

kredytowej, poprzez numer obuwia, do ulubionego koloru szczoteczki do zbw. WebSnap


wychodzi naprzeciw potrzebom programistw tworzcych aplikacje speniajce takie
funkcje tym razem konieczne bdzie jednak napisanie kilku linijek kodu.
Stwrz kolejn stron i nazwij j PreferenceInput; zakwalifikuj j jako wymagajc logowania. Zapisz j pod nazw wmPreferenceInput. Dodaj do nowego moduu danych komponent  i zmie jego waciwo Name na PrefAdapter (rys. 23.11).


Modu danych
strony zwizanej
z preferencjami
uytkownikw

Kliknij nastpnie dwukrotnie komponent ! i za pomoc wywietlonego edytora


dodaj do niego jedno pole 8  i dwa pola . Nazwij dodane
pola (odpowiednio) LikesChocolate, FavoriteMovie i PasswordHint, opatrujc jednoczenie
tytuami (DisplayLabel) Czy lubisz czekolad?, Ulubiony film i Ulubione powiedzonko.
Komponent ! bdzie przechowywa zawarto wspomnianych pl, ktre jednoczenie dostpne bd dla innych stron. Komponenty klasy  s komponentami
skryptowymi, zdolnymi do magazynowania i udostpniania informacji, lecz wymaga to
stworzenia niezbdnego kodu pascalowego. Trzy pola, ktre dodalimy do komponentu
adaptera udostpniaj sw zawarto w ramach zdarzenia 9-$, generowanego
za kadym razem, gdy zawarto pola niezbdna jest przy przetwarzaniu skryptu. Poniewa informacja stanowica zawarto pl nie moe zagin pomidzy kolejnymi daniami, jest przechowywana we waciwoci   "$ jest to waciwo tablicowa, indeksowana acuchami znakw; nadaje si wic idealnie do przechowywania
informacji w postaci klucz-warto.
Komponenty-adaptery umoliwiaj take wykonywanie akcji na swoich danych, co najczciej bywa wykorzystywane do wysyania formularzy HTML. Wybierz komponent
!, przejd do inspektora obiektw i kliknij dwukrotnie waciwo Actions.
Dodaj pojedyncz akcj i nazwij j SubmitAction oraz opatrz tytuem Wylij informacj.
Przejd nastpnie do karty Events inspektora obiektw i dodaj procedur obsugi zdarzenia 9 dla tej akcji, zgodnie z wydrukiem 23.2.

Obsuga zdarzenia OnExecute akcji SubmitAction
  "    :"9"

4"9  H 8>2
 H 9
$2
3
I"H :
.
 I"2


I" H .3
D3
.
 
I"2

 I"I"<"  0 


9
I"F.3
D3
G H I"I"F0G2
 2

  ! u "#$

%

I" H 1 ,
.
 
I"2

 I"I"<"  0 


9
I"F1 ,
G H I"I"F0G2
 2
I" H !
=<.
 
I"2

 I"  
 



 I"I"<"  0 


9
I"F!
=<G H I"I"F0G2
 2
 


9
I"F!
=<G H ((2
 22
 2

Powysza procedura pobiera wartoci pl formularza HTML i przypisuje je odpowiednim


elementom tablicy   "$; dzieje si to w odpowiedzi na kliknicie przycisku
Submit przez uytkownika. Oczywicie wartoci te musz by dostpne na kade danie
komponentu skryptowego, std konieczno oprogramowania zdarze 9-$ dla
kadego pola komponentu ! (patrz wydruk 23.3).


Udostpnianie zawartoci pl komponentu-adaptera
J

.3
D3
 (.3
D3
(2
1 ,
 (1 ,
(2
!
=< (!
=<(2
:
.
' (&&KB&

(2
J
J
  "    :"!
=<.
 KI"9  H 8>2
3 I"H L$2
3
9H 
2


9 H 9
I"F!
=<G2
I" H 9 ( "(2
 2
  "    :".3
D3
.
 KI"9  H 8>2
3 I"H I
$2


I" H 9
I"F.3
D3
G2
 2
  "    :"1 ,
.
 KI"9  H 8>2
3 I"H I
$2


I" H 9
I"F1 ,
G2
 2

&


u    

Prcz moliwoci przechowywania i udostpniania preferencji uytkownikw konieczne


jest oczywicie ich wprowadzanie za pomoc odpowiedniego formularza. Wykorzystamy
w tym celu komponent  , podobnie jak uczynilimy to na stronie
Login. Dodaj wic rzeczony komponent do moduu danych i kliknij go dwukrotnie w celu
uruchomienia edytora Web Surface Designer. Dodaj do komponentu pozycj  ,
a do niej pozycje -  i % - . Ustaw waciwo
- ," na ! oraz waciwo % - ,"4
6%   na - ,.
Kliknij prawym przyciskiem myszy pozycj - , i z jej menu kontekstowego wybierz opcj Add All Fields. Za pomoc inspektora obiektw ustaw odpowiednio
waciwo : kadego z pl (LikesChocolateField, FavoriteMovieField i PasswordHintField) oraz tytuy (Czy lubisz czekolad?, Ulubiony film i Ulubione powiedzonko).
Wybierz pozycj % -  i za pomoc kliknicia prawym przyciskiem myszy
wybierz z menu kontekstowego opcj Add All Commands. Ustaw nazw (ActionName)
jedynej akcji na   , a nastpnie ustaw waciwo  8 ,"4
: na ! .
Po uruchomieniu aplikacji i zalogowaniu si moesz obejrze wygld nowego formularza;
nie klikaj jednak przycisku Wylij, poniewa aplikacja nie posiada jeszcze moliwoci
wywietlania przechowywanych danych.
W zwizku z tym stwrz kolejn stron, nazwij j PreferencesPage i zachowaj pod nazw
wmPreferences. Przejd do skryptu strony (wmPreferences.html) i dodaj przy kocu nastpujcy fragment tekstu:

Po skompilowaniu i uruchomieniu aplikacji preferencje zalogowanego uytkownika bd


mogy by wprowadzane i wywietlane. Bd one jednoczenie dostpne dla skryptu
w kodzie dowolnej strony aplikacji za porednictwem komponentu-adaptera pobierajcego je z informacji o sesji.

  ! u "#$

'

Kada ze stron aplikacji posiada swj odrbny plik HTML, ktry moe by atwo
edytowany bez potrzeby adowania aplikacji do IDE Delphi. Oznacza to moliwo
atwej modyfikacji aplikacji bez koniecznoci jej rekompilowania czy uruchamiania
serwera. W dalszym cigu rozdziau poznasz inne moliwoci przechowywania stron
HTML i uzyskiwania ich zawartoci.

#    '  ! 


W zwizku z przechowywaniem danych uytkownika pozostaje do rozwizania jeszcze
jeden problem s one przechowywane tylko w czasie sesji i zostaj utracone w momencie wylogowania si uytkownika. Rozwizaniem tego problemu jest zapis danych
w pliku w momencie wylogowywania si uytkownika i ich odczyt w momencie logowania. W naszej aplikacji czynnoci te wykonywane s w ramach zdarze 9  komponentu    (logowanie) i 9   komponentu    (wylogowanie). Szczegy obsugi tych zdarze przedstawiamy na wydruku 23.4.

Zarzdzanie preferencjami uytkownika w momencie logowania i wylogowania
J
  "  !
!
.   !
9  H 8>2  :&H I
$2
3
:
.
H :
.
2
'H 
2


  ?1M  >

)<4  &


'2
' H ,) !
 :.
  :& : $ '2
,<"  ' H '2
!=L
- 2
 
:
.
 H :
.
< :
.
'$2
 
9
I"F.3
D3
G H :
.
- 9
'E .3
D3
E
(($2
9
I"F1 ,
G H :
.
- 9
'E 1 ,
E
(($2
9
I"F!
=<G H :
.
- 9
'E !
=<E
(($2


:
.
. 2
 2


!= - 2
 2
 2
J
  "  ,9
9 3
 9
9  H 8>2
9
H  )9
2 -H  9
-$2
3
:
.
H :
.
2

(


u    


?
?   > "@=1
=
!=L
)
2

 .<"  '  (( 


 
:
.
 H :
.
< :
.
'$2
 
:
.
)
9
.<"  'E .3
D3
E
9
I"F.3
D3
G$2
:
.
)
9
.<"  'E ) ,
E
9
I"F1 ,
G$2
:
.
)
9
.<"  'E !
=<E
9
I"F!
=<G$2


:
.
. 2
 2


!= )

 2
 2
 2

Dla prostoty przykadu preferencje uytkownikw przechowywane s w pliku .INI, nic


jednak nie stoi na przeszkodzie, by przechowywa je w bazie danych lub innym trwaym
medium.
Uyta w przykadzie zmienna  5 jest globalnym obiektem typu  2 4

6# 1, a jego instancja tworzona jest w sekcji 1  moduu
) . Zapewnia on bezpieczestwo wtkowe pliku w sytuacji, gdy kilka rnych sesji
chciaoby rwnoczenie odczytywa zawarto pliku lub zapisywa j.
Musisz wic doda nastpujc deklaracj do publicznej czci moduu wmHome.pas:
3
!=H D"
- 4"
3)
9 
? 2

Musisz take utworzy egzemplarz obiektu  5 w sekcji 1 


!= H D"
- 4"
3)
9 
? < 2

i zwolni go w sekcji !1 :


!=. 2

Potrzebna jest jeszcze funkcja zwracajca nazw pliku:



:
.
' (&&KB&

(2
J
"
 :
.
'H 
2


-" H 4 .
KD "',:$$ 5 :
.
'2
 2

Jak atwo zauway, plik .INI tworzony jest w katalogu, w ktrym znajduje si modu
wykonywalny aplikacji.

  ! u "#$

)

#  "  "


  
Nie sposb wyobrazi sobie nowoczesnej aplikacji bez moliwoci wywietlania grafiki,
poprawiajcej wygld i funkcjonalno. Nie mogo wic zabrakn w technologii WebSnap
rodkw do przetwarzania obrazw umoliwia ona obrbk grafiki w rnej postaci:
plikw, zasobw, strumieni danych itp. Generalnie jeeli obraz moe by zapisany
do strumienia, moe by przetwarzany przez WebSnap.
Dodaj do aplikacji kolejn stron Images i zapisz j pod nazw wmImages. Jako
jej komponentu-producenta uyj  , opublikuj j i zaznacz opcj
wymuszajc logowanie. Dodaj do jej moduu danych komponent  i nazwij go
. Kliknij go dwukrotnie (by uruchomi edytor Web Surface Designer) i dodaj
do niego dwa pola typu  kade z nich bdzie wywietla grafik
w rny sposb.
Jednym ze sposobw odwoania si do obrazka jest jego URL. Kliknij pierwsze z pl
 i ustaw jego waciwo )2 na dowolny, kompletny URL; w naszym
przykadzie zerkamy na wykres rocznych waha cen akcji Borlanda, dostpny pod adresem
http://chart.yahoo.com/c/1y/b/borl.gif.
Kliknij dwukrotnie komponent  , dodaj do niego pozycj  ,
a do niej pozycj - . Ustaw waciwo - ,"
na . Kliknij prawym przyciskiem myszy pozycj - , i wybierz z jej menu kontekstowego opcj Select All Fields. Ustaw na  waciwo 4
"296 (jeeli waciwo ta ma warto , na stronie wywietlany
bdzie obrazek; w przeciwnym razie zamiast obrazka ujrzymy kontrolk edycyjn do
wpisania nazwy pliku i towarzyszcy jej przycisk Przegldaj). Gdy ujrzymy obrazek po
raz pierwszy, bdzie mu towarzyszy zbdny, szpeccy tytu; aby go usun, musimy ustawi waciwo  6  pola  na pojedyncz spacj usunicie
wszystkich znakw spowoduje bowiem automatyczne przyjcie tytuu domylnego. Po
wykonaniu opisanych czynnoci okno edytora Web Surface Designer powinno wyglda
podobnie do tego na rysunku 23.12.
Aby na etapie projektowania zapewni wywietlenie obrazkw identyfikowanych przez
cieki wzgldne, naley doda do cieki # # w opcjach projektu katalog,
w ktrym rezyduje
   .

Oprcz obrazkw identyfikowanych przez URL, WebSnap potrafi take obsugiwa grafik przechowywan w strumieniu (stream). Wybierz drugie z pl 
(komponentu ) i za pomoc inspektora obiektw wygeneruj szkielet procedury obsugi zdarzenia 9-. Umie jaki obrazek w tym samym katalogu, w ktrym znajduje si projekt aplikacji (wersja na zaczonym CD-ROM-ie wykorzystuje obrazek
athena.jpg) i uzupenij nastpujco wspomnian procedur zdarzeniow:
  "  :  :.
 /K:9  H 8>2
 H 9
2 3 D
H 9
2 3 :H 9 2
3 81 H L$2


D
 H (
N>(2
: H .
9 < (>(E 8- $2
 2

 


u    



Wywietlanie obrazka
identyfikowanego
przez URL

Wszystko wyglda tu niesychanie prosto: binarny strumie skadajcy si na zawarto


obrazka przypisywany jest do parametru . Poniewa aplikacja nie posiada adnych
informacji na temat typu zawartoci tego strumienia, naley jej ten typ wskaza do tego
suy parametr 6. Strumie plikowy  nie jest co prawda niczym nadzwyczajnym, jeli chodzi o przechowywanie grafiki, jednak WebSnap potrafi z rwn atwoci dobiera si do obrazkw przechowywanych w dowolnym strumieniu, jak np.
8 , czy nawet strumie pamiciowy o zawartoci tworzonej ad hoc.
Po uruchomieniu aplikacji powiniene na stronie  zobaczy, poniej prezentowanego
ju wykresu, portret (znanej z Delphi 2) bogini Ateny.

(   ("  


Wrd bogatych moliwoci oferowanych przez WebSnap nie mogo oczywicie zabrakn
obsugi baz danych. Zawarto dowolnego zbioru danych moe by wywietlana na stronie
WWW zarwno w formie tabelarycznej, jak i w postaci oddzielnych rekordw. Zawarto kadego rekordu moe by atwo modyfikowana, mona take usuwa rekordy i dodawa nowe.
Wywietlanie kolejnych rekordw zbioru danych (po jednym na stronie) jest bardzo atwe.
Dodaj do aplikacji nowy modu danych kliknij trzeci przycisk na pasku Internet i zaakceptuj domylne wartoci ustawie. Dodaj do utworzonego moduu danych komponent
 (ze strony
  palety komponentw) i komponent   (ze strony
BDE). Skojarz komponent   z tabel 8 ! bazy danych 8 9, a nastpnie przypisz sam komponent do waciwoci  komponentu . Otwrz tabel
bazy danych przez ustawienie na  waciwo  komponentu  . Na koniec
nadaj nowemu moduowi nazw 8 ! i zapisz go pod nazw (8 !.

  ! u "#$

 

W naszym przykadzie wykorzystalimy pojedyncz tabel bazy danych Paradox,


jednak komponent  moe wsppracowa z dowolnym komponentem
wywodzcym si z klasy . Ponadto trzeba przyzna, i wykorzystanie tabeli
  w aplikacji
  bez jawnego obsugiwania sesji nie jest dobrym
posuniciem, zwaywszy na warunki pracy wielowtkowej (por. rozdzia 5.)
zdecydowalimy si na takie posunicie, by nie komplikowa przykadu.

Dla odmiany otwrz okno Object TreeView (za pomoc kombinacji klawiszy Shift+Alt+
F11). Kliknij prawym przyciskiem myszy pozycj Actions komponentu  ,
i z menu kontekstowego wybierz opcj Add All Actions; w podobny sposb wybierz
opcj Add All Fields z menu kontekstowego pozycji Fields. Przejd nastpnie do komponentu  , i za pomoc edytora pl dodaj do moduu danych wszystkie jego pola
(Add All Fields).
Poniewa WebSnap operuje na zbiorach danych w trybie bezstanowym, konieczne jest
istnienie klucza gwnego dla zbioru danych, by nawigacja wrd jego rekordw i modyfikacja jego danych w ogle byy moliwe. WebSnap oferuje atwe rozwizanie tego problemu: w oknie Object TreeView wybierz pozycj Fields (podporzdkowan komponentowi
 ,) i dla pola  ;: ustaw opcj !<6 we waciwoci   .
Dodaj do aplikacji now stron, zakwalifikuj j jako wymagajc logowania, nadaj jej
nazw BioLife i zapisz pod nazw wmBiolife. Poniewa jej modu rdowy bdzie si
odwoywa do moduu (8 !, umie nazw tego ostatniego na licie uses.
Przejd do okna Object TreeView i z menu kontekstowego pozycji WebPageItems wybierz
polecenie New Component, po czym dodaj komponent  . W analogiczny sposb
dodaj do pozycji  , komponenty    i -; ustaw waciwo  tych komponentw na ,. Za pomoc menu kontekstowego komponentu -, dodaj wszystkie jego kolumny (Add All Columns).
Przejd do moduu 8 ! i z menu kontekstowego pozycji Actions (podporzdkowanej komponentowi  ,) wybierz polecenie Add All Actions; w ten sam
sposb wybierz polecenie Add All Fields dla pozycji Fields.
Powr do moduu 8 ! i kliknij dwukrotnie komponent  ; powiniene zobaczy okno edytora Web Surface Designer z uwidocznion zawartoci rekordw
tabeli (rys. 23.13); jeeli rekordy si nie uka, prawdopodobnie zbir nie zosta otwarty
zmie wwczas na  waciwo  komponentu  ,.
Poniewa pole :  spycha na prawo nastpne pola, przejd do komponentu 4
-, (w oknie Object TreeView) i usu pozycj % :  .
Web Surface Designer nie wywietla zawartoci pl graficznych, bd one jednak widoczne na stronie wynikowej o czym mona si przekona, gdy skompiluje si i uruchomi
ponownie aplikacj. Zauwa, e znowu wszystko odbyo si bez napisania jakiegokolwiek
kodu pascalowego.
Oczywicie obsuga baz danych nie byaby w peni uyteczna, gdyby sprowadzaa si
jedynie do przegldania danych; WebSnap umoliwia wic dodawanie, przegldanie,
edytowanie i usuwanie poszczeglnych rekordw tabeli.

 


u    




Zawarto tabeli
BioLife wywietlana
w oknie Web
Surface Designera
uruchomionego
przez komponent
TDataSetAdapter

W oknie Web Surface Designera przejd do pozycji AdapterGrid i dodaj pozycj podrzdn AdapterCommandColumn; za pomoc polecenia  %  jej menu kontekstowego dodaj cztery pozycje %2 (, %2 (, %8 ( 2 ( i %:(2 (, posugujc si oknem przedstawionym na rysunku 23.14 (zaznaczajc drug i kolejne opcje,
trzymaj nacinity klawisz Ctrl).


Dodawanie polece
do komponentu
AdapterCommandColumn

Po zamkniciu okna Add Commands przejd do inspektora obiektw i zmie standardowe tytuy (% ) utworzonych przyciskw na (odpowiednio) Usu rekord, Edytuj
rekord, Przegldaj rekord i Wstaw rekord. Wymu pionowe uoenie przyciskw przez
ustawienie na , waciwoci  6%  komponentu % % ,3. Gdy
przewiniesz w poziomie zawarto dolnego okna Web Surface Designera, zobaczysz ostatni kolumn tabeli zawierajc dodane przed chwil przyciski (rys. 23.15).

Waciwo ta okrela, w ilu kolumnach maj by wywietlane wygenerowane obiekty przyp. tum.

  ! u "#$



Przyciski polece
TAdapterActionButton
w oknie Web
Surface Designera

Same przyciski jednak nie wystarcz aby moliwe byo przegldanie, edycja i dodanie
rekordu, potrzebna jest dodatkowa strona wywietlajca formatk rekordu, czyli czytelny
ukad jego zawartoci. Dodaj wic do projektu kolejn stron o nazwie EditBioLife i zapisz j pod nazw wdmBioLife. Umie na niej komponent  , dodaj
do niego podporzdkowan pozycj  , do tego ostatniego dodaj komponenty
  , -  i % - . Za pomoc menu kontekstowych dodaj wszystkie pola (Add All Fields) komponentu -  i wszystkie
polecenia (Add All Commands) komponentu % - . W oknie Web Surface
Designera powinna pojawi si zawarto konkretnego rekordu, jak na rysunku 23.16.
Musisz jeszcze dokona powizania przyciskw widocznych w ostatniej kolumnie tabeli (na
stronie 8 !) ze stron EditBioLife. Zaznacz przyciski CmdEditRow, CmdBrowseRow
i CmdNewRow (trzymajc nacinity klawisz Ctrl) i za pomoc inspektora obiektw przypisz ich waciwoci : warto 8 !.
Kiedy zadasz przegldania rekordu, wywietlona zostanie strona EditBioLife prezentujca dane rekordu w paskim ukadzie tekstowym; kiedy zadasz edycji lub wstawienia
rekordu, wywietlona zostanie ta sama strona, jednak dane rekordu widoczne bd w edytowalnych polach; pole zwizane z grafik pozwala nawet na zmian obrazka w rekordzie
przez wskazanie odpowiedniego pliku.
Ponownie wszystko odbyo si bez pisania jakiegokolwiek kodu.
Pole edycyjne zwizane z polem :  rekordu jest zwyk kontrolk edycyjn,
w zwizku z czym edytowany tekst jest w duej czci niewidoczny. Mona zmieni
ten stan rzeczy przez odpowiednie ustawienie waciwoci 
,
 62 ( i  6
# komponentu :  .

 


u    



Zawarto rekordu
tabeli w oknie Web
Surface Designera

     )*+#),&&


Nasza aplikacja zostaa zaprojektowana specjalnie dla celw jej ledzenia przez Web App
Debugger; nie da si jej wic zastosowa jako rozszerzenie ISAPI serwera WWW, bowiem
rozszerzenia takie maj posta bibliotek DLL. Na szczcie problem ten stosunkowo atwo
da si rozwiza.
Mianowicie, naley stworzy nowy projekt aplikacji ISAPI, usun z niego wszystkie moduy (oczywicie z wyjtkiem pliku *.dpr) i doda do niego wszystkie moduy znajdujce
si w rdowej aplikacji .EXE, z wyjtkiem formularza gwnego. Po zapisaniu i skompilowaniu, utworzona biblioteka .DLL bdzie jak najbardziej poprawnym moduem ISAPI.
Koncepcj t mona rozszerzy, posugujc si dwiema wersjami aplikacji: do ledzenia
przez Web App Debugger (*.EXE) oraz do docelowego zastosowania w serwerze WWW
(ISAPI DLL) obydwie wersje korzystayby oczywicie z tych samym moduw. Na
zaczonym CD-ROM-ie, w podkatalogu przeznaczonym dla niniejszego rozdziau, znajduj si dwa pliki projektu DDG6Demo.dpr i DDG6DEmoISAPI.dpr, co jest wyrazem
tej wanie koncepcji.
Podczas uruchamiania aplikacji ISAPI DLL nie naley tylko zapomnie o jednej istotnej
rzeczy: wszelkie wykorzystywane przez aplikacj pliki HTML powinny znajdowa si
w tym samym katalogu, w ktrym znajduje si jej biblioteka DLL.

  ! u "#$

 %

Przedstawione dotychczas przykady ilustrujce m.in. zarzdzanie informacjami o uytkownikach i ich preferencjach, nadzorowanie sesji uytkownikw, wywietlanie i manipulowanie danymi itp. s do intuicyjne i stanowi wymowne wiadectwo moliwoci
technologii WebSnap. WebSnap potrafi jednak jeszcze wicej, dajc uytkownikom
jeszcze wiksz kontrol nad tworzonymi aplikacjami.

& -*.
Tworzenie aplikacji WebSnap wie si zazwyczaj z operowaniem wieloma plikami i zasobami jak pliki HTML, skrypty serwera, moduy pascalowe, zbiory danych i komponenty sterownikw, grafika, itp.; wszystko to musi oczywicie by w logiczny sposb
powizane ze sob, by aplikacja moga funkcjonowa poprawnie. Najczciej czynnikiem
koordynujcym s same strony HTML, w ktre wbudowuje si powizane zasoby;
WebSnap umoliwia wprawdzie przechowywanie stron HTML niezalenie od skompilowanego moduu wynikowego, jednak musz one znajdowa si w tym samym katalogu, w ktrym jest w modu wynikowy. Nie zawsze jest to moliwe i nie zawsze wygodne podana byaby moliwo przechowywania stron HTML np. w zasobach czy bazach danych.
Na tak okazj WebSnap oferuje komponent  , umoliwiajcy pobieranie stron HTML z dowolnego rda, ktre moe by reprezentowane w formie strumienia danych (stream). rdem takim mgby by na przykad zasb binarny, skonsolidowany z moduem wynikowym. Zaprezentujemy to rozwizanie umiecimy we
wspomnianym zasobie kopi strony wmLogin.html, nazwan embed.html i uzupenion
stosownym tekstem wyjaniajcym, z ktr stron mamy faktycznie do czynienia.
Najprostszym rodkiem implementowania zasobw s w Delphi pliki *.RC. Umieszczone
w projekcie, podlegaj automatycznej kompilacji i konsolidacji z wynikowym moduem
wykonywalnym. Plik .RC reprezentujcy zasb-stron HTML w naszym przykadzie ma
nastpujc zawarto:
O 
 ,D! /P 

= ?"
DL&&&,D! ,D! DL&,D!

Po skompilowaniu aplikacji strona EMBED.HTML zostanie doczona do moduu wykonywalnego jako zasb  8) .
Dodaj do naszej aplikacji kolejn stron, nazwij j Embedded i zapisz pod nazw wmEmbedded. Przejd do strony Home, wybierz komponent   i korzystajc
z inspektora obiektw stwrz nastpujc procedur obsugi zdarzenia :
  "  ,!.
9 3
.
 9 9  H 8>2
<H <2  .
'H 9
2
3 ." 9 H 9 2 3 81 E ,  H L$2



 ">Q  = 
=
?1
 >Q 1 ?1
 +1  +

 ()DDL&&&(E  <.
'$$  0 


." 9  H -" 9 < :E (DL&&&,D!(E (,D!($2
,  H  "2  
= ?R ??

 2
 2

 &


u    

Parametr : zawiera niekwalifikowan nazw poszukiwanej strony HTML, za


parametrowi   przypisywany jest strumie utworzony na podstawie zasobu
 8) . Zwr uwag, i zasb ten udostpniany bdzie na kade danie, ktre
dotyczy strony posiadajcej wbudowany w nazw czon wmembedded (niezalenie
od wielkoci liter); komponent   zapewnia wic pewien stopie uniwersalizmu, polegajcego na moliwoci zastosowania tego samego pliku lub zasobu dla
rnych da. Wynikowa warto  parametru ) oznacza, i danie zostao
obsuone i parametr   reprezentuje strumie wynikowy.

/  
Jednym z najtrudniejszych zada w aplikacjach internetowych jest obsuga przesyania
pliku od klienta do serwera, polegajca na pieczoowitej kontroli kadego nadchodzcego bajtu. WebSnap znacznie upraszcza to zadanie, powierzajc wikszo jego skomplikowanych szczegw komponentowi-adapterowi, a uytkownikowi pozostaje jedynie
umieszczenie wspomnianego pliku w strumieniu.
Stwrz now stron o nazwie Upload i zapisz j pod nazw wmUpload. Umie w jej module danych komponent  i dodaj do niego jedno pole , ktre
bdzie suy do wybierania przez klienta plikw do zaadowania. Dodaj take pojedyncz akcj i nazwij j *  .
Dodaj do komponentu  komponent  , a do tego ostatniego trzy komponenty:   , -  i % - . Pocz dwa pierwsze z komponentem , (przez waciwo ), natomiast % - 
pocz z -  (przez waciwo  6%  ). Nastpnie dodaj
wszystkie pola komponentu - , i wszystkie akcje komponentu 4
% - . Zmie tytu przycisku na Zaaduj plik. Rysunek 23.17 przedstawia
obraz strony w edytorze Web Surface Designer.


Wygld strony
dokonujcej
zaadowania pliku

Konieczne jest ponadto dodanie kodu w dwch miejscach moduu. Pierwszym jest procedura obsugi zdarzenia 9*  komponentu ," przedstawia j wydruk 23.5.

  ! u "#$

 '


 Obsuga zdarzenia OnFileUpload
  "     .
.
  .
9  H 8>2
.
H  .
!
$2
3

H
 2
<" &
H 
2
.
H 
2
.9H .
9 2


 ?R "> 
=

 .
<"  0 


       ('
 1  
="  ?R 1
($2
4
2
 2

H 0  .
<" S  


 1
> 
TE @ 
=  ?? ?
 > " >

 < 44 .
4.
.
F:G.
'$E (>($  0$
 < 44 .
4.
.
F:G.
'$E (>($  0$



       (D"
? 1 M 
= UK  UK($2
 


<" &
H 4 .
KD "',:$$ 5 (UK.
(2
. &

<" &
$2
.
' H <" &
5 (N( 5 4 .
'.
.
F:G.
'$2
.9 H .
9 < .
E <   9 &)
$2
 
.9<. .
.
F:G9 E 0$2  =
"> R 
=


.9. 2
 2
 2
 2
 2

Poniszy kod dokonuje sprawdzenia, czy wybrano jaki plik i czy plik ten ma rozszerzenie .jpg albo .jpeg, po czym sprawdza, czy katalog docelowy istnieje, czy te naley go
utworzy (funkcja    ). Nastpnie tworzony jest strumie plikowy i do
tego strumienia kopiowane s kolejno zawartoci wyspecyfikowanych plikw. Faktyczne
dziaania zwizane z adowaniem plikw nie s widoczne na wydruku, skrywaj si bowiem wewntrz klasy * .
Drugim zdarzeniem wymagajcym oprogramowania jest zdarzenie 9 akcji * 4
  komponentu ,:
  "    
4"9  H 8>2  H 9
$2


   - 2
 2

Zdarzenie to wymusza odwieenie rekordw komponentu , i zwizane z tym


pobranie danych plikw.

 (


u    

   "


Kreatory WebSnap oferuj uytkownikowi tylko dwa szablony okrelajce pocztkow
posta strony HTML: Blank i Standard. Jest to w zupenoci wystarczajce dla aplikacji
ilustrujcych oglne zasady dziaania WebSnap (jak ta opisywana w niniejszym rozdziale),
jednak w przypadku zada bardziej skomplikowanych same szablony te s na og bardziej skomplikowane i przede wszystkim specyficzne dla danego zastosowania.
Standardowy zestaw szablonw HTML dla WebSnap mona poszerzy przez zdefiniowanie
klasy pochodnej do    i zarejestrowanie jej w module umieszczonym
w pakiecie rodowiskowym. Szczegy tej operacji moesz pozna studiujc przykadow
aplikacj znajdujc si w podkatalogu Demos\WebSnap\ Producer Template zainstalowanego Delphi. Aby zarejestrowa wasne szablony, naley doda reprezentujce je pozycje do pliku .RC, skompilowa projekt i zainstalowa w IDE wygenerowany pakiet.
Do skompilowania tego projektu bdzie jednak potrzebny inny pakiet 2
ktrego pliki rdowe znajduj si w podkatalogu Demos\WebSnap\Util.


   + # # 
   ! 
W niniejszym rozdziale wikszo pracy zwizanej z wywietlaniem stron HTML wykonywana bya przez komponent   i komponenty jemu podporzdkowane. Zestaw tych ostatnich nie jest bynajmniej zamknity WebSnap umoliwia
tworzenie wasnych, na potrzeby tworzonych aplikacji. Kady komponent przeznaczony
do wsppracy pod nadzorem komponentu   musi wywodzi si
z klasy 
 % %   i implementowa interfejs 
 % . Stanowi to dobr
okazj do stworzenia klasy bazowej speniajcej te wymagania (patrz wydruk. 23.6).

 Klasa bazowa dla komponentw pracujcych pod nadzorem TAdapterPageProducer

 BL)9< )<
 <E :)<$
 
% :)< *
"
 <8
H )<8
2  !"H !"$H 
2
"
 K,D!H 
2 3
"2  2
 2
J
J
"
  BL)9<<8
H )<8
2
 !"H !"$H 
2
3
:H :!")<2



 9"  !"E :!")<E :$ 
-" H :!".
 K,D!E 
$

-" H K,D!2
 2

  ! u "#$

 )

Klasa .8 
 %   implementuje tylko jedn metod interfejsu % .
Metoda ta sprawdza, czy komponent nadrzdny jest zgodny z klas 6 - ; jeli tak,
to traktowany jest zgodnie z reguami tej klasy, w przeciwnym razie metoda pobiera sw
warto z metody -) . Ta ostatnia jest abstrakcyjna, a wic kady komponent pochodny musi j implementowa. Na zaczonym CD-ROM-ie znajduje si definicja dwch
klas, ktre dostarczaj komponentowi   zawarto strony HTML
w postaci (odpowiednio) pliku i listy acuchw. Definicj drugiej z nich przedstawiamy
na wydruku 23.7.

 Komponent dostarczajcy zawarto strony HTML w postaci listy acuchw

 B,D!<   BL)9<$

3
.,D!H 9
2
  "  9,D! I"H 9
$2
 
"
 K,D!H 
2 3
2
"

 " < 81 H <$2 3
2
 " & 2 3
2
"

   ,D!H 9
  .,D! 1
 9,D!2
 2
J
J
 "  B,D!< < 81 H <$2




 2
.,D! H 9
!
< 2
 2
 "  B,D!< & 2


.,D!. 2


 2
 2
"
  B,D!< K,D!H 
2


-" H .,D!42
 2
  "   B,D!< 9,D! I"H 9
$2


.,D!
I"$2
 2

Klasa .) %  posiada waciwo HTML, przechowujc list acuchow. Zawarto tej listy udostpniana jest (przez metod -) ) komponentowi  
w postaci acucha, stanowicego konkatenacj acuchw skadowych poprzedzielanych znakami nowego wiersza (=,>=,?). W ten sposb mona przekaza kad zawarto,




u    

ktra da si skonwertowa do postaci acucha obrazek, plik itp. Aby jednak nowo
zdefiniowany komponent mg by zauwaony przez Web Surface Designer, musi zosta
zarejestrowany przez procedur 2 
 %   , umieszczon wewntrz procedury
2 , jak w module WebSnapComps.pas na zaczonym CD-ROM-ie:
  "  -
 2


-
 )<F B).
E  B,D!< GE B, $2
 2

Po zarejestrowaniu i zainstalowaniu, nowe komponenty staj si dostpne w oknie dialogowym opcji New Component (w edytorze Web Surface Designer rys. 23.18).


Zestaw nowych
komponentw
do wyboru w oknie
dialogowym opcji
New Component

W niniejszym rozdziale przedstawilimy podstawy technologii WebSnap, efektywnie


czcej zalety szybkiego tworzenia aplikacji (RAD) z mechanizmami serwera WWW.
Przedstawilimy przykadow aplikacj, prezentujc rozmaite sposoby generowania wynikowych stron HTML, zajlimy si take kilkoma bardziej zaawansowanymi zagadnieniami zwizanymi z wykorzystaniem technologii WebSnap. Przy okazji zademonstrowalimy zastosowanie Web App Debuggera do ledzenia aplikacji i uruchamiania ich
pod jego nadzorem, omwilimy take krtko problem konwersji aplikacji z testowej
wersji .EXE do wymaganej przez rzeczywisty serwer WWW postaci ISAPI DLL.
WebSnap stwarza fascynujce moliwoci w zakresie tworzenia aplikacji internetowych,
lecz jak miae okazj si przekona, studiujc zakoczony wanie rozdzia jest
to technologia charakteryzujca si pewnym stopniem komplikacji i wymaga zrozumienia
oraz pewnej wprawy. Poyteczne uzupenienie lektury niniejszego rozdziau stanowi
bd z pewnoci przykadowe projekty znajdujce si w podkatalogu Demos\WebSnap
zainstalowanego Delphi 6.

You might also like