You are on page 1of 335

Spis Treci

SPIS TRECI.........................................................................................................................................................1 ROZDZIA 1. TWORZENIE DYNAMICZNYCH APLIKACJI INTERNETOWYCH........................................................6 CZYM BYA SIE WWW.........................................................................................................................................6 Specyfikacja HTML 2......................................................................................................................................7 Specyfikacja HTML 3.2...................................................................................................................................8 Specyfikacja HTML 4......................................................................................................................................9 ZAWARTO STATYCZNA A ZAWARTO DYNAMICZNA....................................................................................................9 TWORZENIE SKRYPTW PO STRONIE KLIENTA I PO STRONIE SERWERA..............................................................................11 Tworzenie skryptw po stronie klienta..........................................................................................................11 Tworzenie skryptw po stronie serwera........................................................................................................15 SKADNIKI DYNAMICZNYCH ROZWIZA INTERNETOWYCH............................................................................................18 Przejcie przez stron quizu..........................................................................................................................19 HTML............................................................................................................................................................19 Skadnik bazy danych ...................................................................................................................................20 Komponenty serwera.....................................................................................................................................23 Kod ASP (Active Server Page)......................................................................................................................27 Wsppraca z serwerem internetowym.....................................................................................................29 NIE TYLKO IIS SYSTEMU NT..................................................................................................................................30 ROZDZIA 2. SERWER IIS WIDZIANY Z PERSPEKTYWY TWRCY STRON...........................................................31 CZYM JEST IIS?....................................................................................................................................................31 OTRZYMYWANIE KOPII IIS......................................................................................................................................32 KONSOLA ZARZDZANIA MICROSOFTU......................................................................................................................32 WACIWOCI USUG WWW.................................................................................................................................34 Waciwoci witryny WWW...........................................................................................................................35 Waciwoci zwizane z wydajnoci...........................................................................................................37 Waciwoci filtrw ISAPI............................................................................................................................38 Waciwoci katalogu macierzystego............................................................................................................38 Dokumenty....................................................................................................................................................39 Bdy klienta..................................................................................................................................................40 WITRYNY WWW W SERWERZE IIS.........................................................................................................................41 DODAWANIE WITRYNY WWW................................................................................................................................43 WACIWOCI WITRYNY WWW.............................................................................................................................46 Wiele witryn pod jednym adresem IP...........................................................................................................46 Zakadka waciwoci witryny WWW...........................................................................................................48 Waciwoci katalogu macierzystego............................................................................................................49 EKSPLORACJA WITRYNY..........................................................................................................................................50 Katalogi wirtualne........................................................................................................................................50 Waciwoci folderu i pliku...........................................................................................................................52 APLIKACJE ASP....................................................................................................................................................53

Spis Treci

Zmienne trwae i zakresowe..........................................................................................................................53 Zdarzenia......................................................................................................................................................54 Tworzenie aplikacji ASP...............................................................................................................................54 Konfigurowanie aplikacji ASP......................................................................................................................56 WITRYNY FTP.....................................................................................................................................................59 ROZDZIA 3. NARZDZIA PRACY........................................................................................................................................61 PRZEGLD APLIKACJI DO TWORZENIA STRON...............................................................................................................61 NOTATNIK............................................................................................................................................................61 FRONTPAGE 2000.................................................................................................................................................63 rodowisko pracy..........................................................................................................................................63 Tworzenie sieci Web......................................................................................................................................69 Przegldanie strony......................................................................................................................................71 Dodawanie strony.........................................................................................................................................72 Praca ze stron.............................................................................................................................................73 NETOBJECTS FUSION..............................................................................................................................................75 rodowisko pracy..........................................................................................................................................75 Tworzenie witryny WWW przy uyciu programu Fusion..............................................................................81 Praca ze stron.............................................................................................................................................82 NETOBJECTS SCRIPTBUILDER..................................................................................................................................82 rodowisko programowe...............................................................................................................................82 Praca z kodem w programie ScriptBuilder...................................................................................................89 Weryfikacja kodu w programie ScriptBuilder..............................................................................................94 MICROSOFT VISUAL INTERDEV 6.0.........................................................................................................................95 OSTATNIE SOWO O NARZDZIACH............................................................................................................................97 ROZDZIA 4. PODSTAWY ASP...............................................................................................................................................98 KONSTRUKCJA KODU ASP......................................................................................................................................98 Znacznik <% = X %>...................................................................................................................................98 <% Pojedyncza linia kodu %>.....................................................................................................................99 <% Blok kodu %>......................................................................................................................................100 < Script> Kod </Script>............................................................................................................................101 HTML w kodzie...........................................................................................................................................102 SKRYPT W SKRYPCIE.............................................................................................................................................104 Dyrektywa przetwarzania...........................................................................................................................106 Pliki Include................................................................................................................................................107 Po co ich uywa.....................................................................................................................................107 Wczanie pliku.......................................................................................................................................107 Plik Include struktura i przykad........................................................................................................108 Wywoywanie procedur..........................................................................................................................109 KOD ASP W UYCIU............................................................................................................................................109 Komentarze, puste miejsca i wielko liter.................................................................................................109 Zmienne.......................................................................................................................................................112 Typy danych................................................................................................................................................113 Zakres i trwao.........................................................................................................................................114 Operatory....................................................................................................................................................115 Warunki.......................................................................................................................................................117 Ptle............................................................................................................................................................122 Konwersja zmiennych.................................................................................................................................126 Funkcje daty i czasu....................................................................................................................................128 Zatwierdzanie obecnoci i typw danych....................................................................................................132 Techniki zatwierdzania danych...................................................................................................................134 Formatowanie liczb, dat i kwot pieninych...............................................................................................136

ASP Kompendium programisty

Operowanie cigami...................................................................................................................................140 Liczby losowe..............................................................................................................................................146 Procedury....................................................................................................................................................147 ROZDZIA 5. OBIEKT REQUEST.........................................................................................................................................149 HIERARCHIA I MODELE OBIEKTW ASP...................................................................................................................149 Czym s hierarchie obiektw?....................................................................................................................149 Model obiektw ASP...................................................................................................................................150 ODBIERANIE INFORMACJI OD ODWIEDZAJCEGO.........................................................................................................152 Zbiory obiektu Request................................................................................................................................152 Zbir Form..............................................................................................................................................152 Zbir QueryString...................................................................................................................................155 Zbir ServerVariables.............................................................................................................................158 Zbir Cookies..........................................................................................................................................160 Zbir ClientCertificate............................................................................................................................161 WACIWO OBIEKTU REQUEST............................................................................................................................162 Waciwo TotalBytes................................................................................................................................162 METODA OBIEKTU REQUEST..................................................................................................................................163 Metoda BinaryRead....................................................................................................................................163 OBIEKT REQUEST W DZIAANIU..............................................................................................................................164 Przykad certyfikatu klienta........................................................................................................................164 Procesor e-mail dla formularza..................................................................................................................169 Procesor bazy danych dla formularza........................................................................................................173 Witryna logowania......................................................................................................................................175 ROZDZIA 6. OBIEKT RESPONSE.......................................................................................................................................181 WYSYANIE INFORMACJI DO GOCI..........................................................................................................................181 ZBIR OBIEKTU RESPONSE.....................................................................................................................................181 Zbir cookie................................................................................................................................................182 WACIWOCI OBIEKTU RESPONSE.........................................................................................................................185 Waciwo Buffer.......................................................................................................................................186 Waciwo CacheControl..........................................................................................................................187 Waciwo Charset....................................................................................................................................187 Waciwo ContentType............................................................................................................................187 Waciwo Expires.....................................................................................................................................188 Waciwo ExpiresAbsolute.......................................................................................................................189 Waciwo IsClientConnected...................................................................................................................191 Waciwo PICS........................................................................................................................................192 Waciwo Status.......................................................................................................................................193 METODY OBIEKTU RESPONSE.................................................................................................................................193 Metoda AddHeader.....................................................................................................................................194 Metoda AppendToLog.................................................................................................................................194 Metoda BinaryWrite....................................................................................................................................194 Metoda Clear..............................................................................................................................................197 Metoda End.................................................................................................................................................197 Metoda Flush..............................................................................................................................................198 Metoda Redirect..........................................................................................................................................199 Metoda Write...............................................................................................................................................200 OBIEKT RESPONSE W DZIAANIU............................................................................................................................201 Readresowanie i obiekt wyboru..................................................................................................................201 Pasek zaawansowania.................................................................................................................................204 Strona preferencji.......................................................................................................................................209

Spis Treci

ROZDZIA 7. OBIEKT SERVER............................................................................................................................................214 WEJCIE NA SZCZYT.............................................................................................................................................214 WACIWO OBIEKTU SERVER..............................................................................................................................214 Waciwo ScriptTimeout..........................................................................................................................215 METODY OBIEKTU SERVER....................................................................................................................................217 Metoda CreateObject..................................................................................................................................217 Metoda HTMLEncode.................................................................................................................................220 Metoda MapPath.........................................................................................................................................222 Metoda URLEncode....................................................................................................................................224 OBIEKT SERVER W DZIAANIU................................................................................................................................225 Automatyzacja biura...................................................................................................................................225 ROZDZIA 8. OBIEKT SESSION, OBIEKT APPLICATION ORAZ PLIK GLOBAL.ASA..........................................235 APLIKACJE ASP..................................................................................................................................................235 TWORZENIE APLIKACJI ASP..................................................................................................................................236 OBIEKT SESSION..................................................................................................................................................238 Zbiory obiektu Session................................................................................................................................238 Zbir Contents.........................................................................................................................................238 Zbir StaticObjects..................................................................................................................................242 Waciwoci obiektu Session.......................................................................................................................243 Waciwo CodePage............................................................................................................................244 Waciwo LCID...................................................................................................................................245 Waciwo SessionID............................................................................................................................247 Waciwo TimeOut..............................................................................................................................247 Metoda obiektu Session...............................................................................................................................248 Metoda Abandon.....................................................................................................................................248 OBIEKT APPLICATION...........................................................................................................................................249 Zbiory obiektu Application..........................................................................................................................249 Zbir Contents.........................................................................................................................................250 Zbir StaticObjects..................................................................................................................................253 Metody obiektu Application........................................................................................................................254 Metoda Lock............................................................................................................................................254 Metoda Unlock........................................................................................................................................256 PLIK GLOBAL.ASA................................................................................................................................................256 Zdarzenia pliku global.asa..........................................................................................................................258 Zdarzenie Application_OnStart...............................................................................................................258 Zdarzenie Application_OnEnd................................................................................................................262 Zdarzenie Session_OnStart.....................................................................................................................262 Zdarzenie Session_OnEnd......................................................................................................................264 Deklaracje obiektw w pliku global.asa..................................................................................................266 APLIKACJE ASP W UYCIU...................................................................................................................................267 ROZDZIA 9. OBIEKTY CDO DLA WINDOWS NT SERVER ..............................................................270 UZUPENIENIE STRONY ASP O FUNKCJ WYSYANIA WIADOMOCI E-MAIL ...................................................................270 OBIEKT NEWMAIL..............................................................................................................................................271 Waciwoci obiektu NewMail....................................................................................................................272 Waciwo To........................................................................................................................................272 Waciwo From....................................................................................................................................273 Waciwo Subject.................................................................................................................................274 Waciwo Body....................................................................................................................................275 Waciwo CC.......................................................................................................................................277 Waciwo BCC ....................................................................................................................................278 Waciwo Importance..........................................................................................................................278

ASP Kompendium programisty

Waciwoci BodyFormat i MailFormat ................................................................................................279 Waciwoci ContentBase i ContentLocation.........................................................................................282 Waciwo Value...................................................................................................................................283 Waciwo Version................................................................................................................................285 Metody obiektu NewMail............................................................................................................................286 Metoda Send............................................................................................................................................286 Metoda AttachFile...................................................................................................................................287 Metoda AttachURL.................................................................................................................................289 Metoda SetLocaleID................................................................................................................................290 OBIEKT NEWMAIL W DZIAANIU............................................................................................................................290 ROZDZIA 10. SKADNIKI ASP..............................................................................................................................................292 OBIEKTY ZWIKSZAJCE MOLIWOCI STRON ASP....................................................................................................292 SKADNIK BROWSER CAPABILITIES.........................................................................................................................292 Modyfikacja pliku browser.ini ...................................................................................................................300 SKADNIK AD ROTATOR.......................................................................................................................................301 SKADNIK PAGE COUNTER....................................................................................................................................308 SKADNIK COUNTERS...........................................................................................................................................316 SKADNIK CONTENT LINKING................................................................................................................................321 SKADNIK CONTENT ROTATOR..............................................................................................................................329 SKADNIK MYINFO..............................................................................................................................................333

Rozdzia 1. Tworzenie dynamicznych aplikacji internetowych


Czym bya sie WWW
Przez minione lata Internet niesamowicie wpyn na nasze ycie. wiatowa sie jest teraz potnym zlepkiem informacji. Obecnie kiedy chcemy pozna adres firmy lub nawet jej lokalizacj, sprawdzamy to w Internecie. Chcesz wiedzie jaka sztuka jest wystawiana w miejscowym teatrze? Sprawd w Internecie. Musisz pozna ceny jakiego produktu? Zobacz w sieci WWW. Szukasz pracy w Des Moines? Znajdziesz j na sieci. Ale sie WWW nie bya tak nasycona informacjami od samego pocztku. Podstawowym przeznaczeniem Internetu bya wymiana informacji pomidzy badaczami naukowymi. Stworzenie jzyka HTML (HyperText Markup Language) byo podyktowane koniecznoci znalezienia powszechnej formy prezentowania informacji na rnorodnych platformach i systemach operacyjnych. Komputery uywane do przegldania stron HTML miay zainstalowane programy klienckie oraz przegldarki, ktre odczytyway i interpretoway kod HTML, a nastpnie przedstawiay jego interpretacj osobie ogldajcej stron. Te podstawowe przeznaczenie pozostao si Internetu, cho drastycznie zmieniy si sposoby prezentowania informacji. Wczesna wersja strony WWW wygldaa podobnie jak ta pokazana na rysunku 1.1.

ASP Kompendium

programisty

Rysunek 1.1. Pierwotna wersja HTML Zauwa, e pierwsza wersja HTML zawieraa jedynie podstawowe informacje, jak rwnie miaa moliwo odsyania do innych dokumentw. Ju wczesna wersja posiadaa zdolno zignorowania tych znacznikw, ktrych nie potrafia zrozumie. Jest to w dalszym cigu znaczca cecha HTML, z ktrej twrcy stron korzystaj przez cay czas. Ale w tej wersji z roku 1992 nie byo moliwoci prezentowania informacji graficznych, takich jak obrazy, tabele czy obiekty. Zauwa rwnie, e nie byo wtedy sposobu na uzyskanie informacji od osoby przegldajcej stron WWW.

Specyfikacja HTML 2
Kolejna wersja HTML zawieraa wspaniae ulepszenia. Rysunek 1.2. pokazuje niektre elementy, ktre moga zawiera wersja 2 specyfikacji HTML.

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

Rysunek 1.2. Przykadowa strona stworzona przy wykorzystaniu HTML 2 Prawdopodobnie najwaniejszymi nowymi skadnikami HTML 2 byy znaczniki tabeli, obrazu i formularza. Znacznik tablicy po raz pierwszy pozwoli na wywietlenie informacji w postaci tabeli. Byo to jednak jego pierwotne przeznaczenie. Szybko sta si spenieniem marze tych twrcw stron WWW, ktrzy potrzebowali lepszego rozmieszczenia elementw na stronie. Teraz twrcy stron czsto uywaj znacznikw tabeli do precyzyjnego rozoenia pozycji na stronie WWW. Znacznik obrazu pozwala twrcom na dekorowanie swych stron. Mogli umieszcza na nich logo firmy, zdjcia pracownikw oraz zdjcia okolicznociowe. Grafika rwnie moga by wykorzystywana do dekoracji ukadu strony. Dodatkowo uywano maych, niewidocznych obrazkw przy pomocy ktrych rozmieszczano inne elementy strony WWW. Na przykad niektrzy twrcy stron uywali pustych obrazkw o okrelonym rozmiarze do zaznaczenia akapitu. Specyfikacja HTML 2 dodatkowo zostaa wzbogacona w formularze. Przed uyciem formularzy kontakt z odwiedzajcymi stron by bardzo ograniczony. Dziki formularzom i ich standardowym elementom moliwe stao si gromadzenie informacji o gociach pozwalajcych na udostpnianie im waciwej strony, gromadzenie informacji osobistych oraz dodawanie goci do listy dystrybucyjnej lub wielu innych aplikacji. Zawarto formularzy bya udostpniana programom CGI (CGI Common Gateway Interface) do przetwarzania w postaci strumienia bajtw. Programy CGI, zwykle pisane w PERL lub C, mogy dokona analizy skadniowej danych w strumieniu, przetwarza je, aby pniej zwrci wyjciowe informacje przegldarce.

Specyfikacja HTML 3.2


Kolejn znaczc wersj HTML wydan przez W3C Consortium bya wersja 3.2, ktra ju w niewielkim stopniu rnia si od tego, czym HTML jest dzisiaj. Do istniejcych znacznikw dodano liczne parametry i unowoczenienia, jak rwnie wprowadzono nowe znaczniki, z ktrych najwaniejszym by znacznik apletu. Znacznik apletu pozwala twrcom na wczenie aplikacji Javy wprost do ich stron WWW. Takie dodatki jak aplety Javy mogy by penymi aplikacjami realizujcymi rnorakie zadania. Moge stworzy przy ich uyciu wysuwane obrazki, ktre odsyay goci do rnych miejsc, kiedy kliknli jeden z nich. Moge mie aplet Javy prezentujcy uaktualnione dane na temat cen produktw. Moge napisa applet Javy bdcy programem do rysowania dla dzieci. Liczba aplikacji, dla ktrych znacznik ten by wykorzystywany bya wielka, co spowodowao znaczny rozrost sieci WWW.

ASP Kompendium

programisty

Specyfikacja HTML 4
HTML 4 jest biec wersj wydan przez W3C Consortium. Znaczcymi dodatkami tej specyfikacji s znaczniki obiektu, skryptu oraz formularza stylw. Znacznik formularza stylw pozwala na tworzenie wsplnych stylw dla elementw strony WWW. Kiedy styl zostaje zdefiniowany, moe zosta przeniesiony na inn stron. Pozwala to na przykad na jednorazowe zdefiniowanie koloru, rozmiaru i czcionki nagwka. Nastpnie ten styl moe zosta zastosowany na wielu innych stronach. Jeli konieczna jest zmiana stylu nagwka, naley jej dokona tylko w jednym miejscu, w definicji elementu, a zmiana ta zostanie przeniesiona na inne strony korzystajce z tego znacznika. Znacznik skryptu pozwala na wczenie kodw zwanych skryptami po stronie klienta (client-side scripts). Oznacza to, e w HTML wbudowano kod, ktry jest uruchamiany przez przegldark zainstalowan na komputerze klienta. Przyjrzymy si skryptom po stronie klienta nieco dalej w tym rozdziale, podczas omawiania zalet i wad tego rodzaju tworzenia skryptw. Kolejnym znaczcym ulepszeniem w tej wersji jest wczenie do niej znacznika obiektu, ktry dostarcza mechanizmw pozwalajcych na umieszczenie multimediw i innych obiektw w granicach strony WWW. Na przykad znacznik obiektu moe by wykorzystany podczas odwiedzania witryny grupy dyskusyjnej w celu stworzenia na twoim komputerze potokowego wejcia audio-wideo, jak rwnie mona go uy przy przegldaniu trjwymiarowego elementu zamieszczonego na stronie i moliwego do obejrzenia po zainstalowaniu odpowiedniego plug-inu w przegldarce.

Zawarto statyczna a zawarto dynamiczna


Wczeniej wikszo zawartoci Internetu stanowiy skadniki statyczne, to znaczy, e odwiedzajc jak stron WWW za kadym razem moge spodziewa si dokadnie tej samej treci. Te same teksty, grafiki, formatowanie, po prostu wszystko. Aby zmieni zawarto strony twrca musia rcznie modyfikowa tekst strony i ponownie umieszcza j w Internecie. Wykorzystywanie tej techniki powodowao, e sie WWW bya nieco skostniaa. Uytkownicy sieci mogli odwiedzi twoj stron raz lub dwa, lecz jeli jej tre nie zmieniaa si, prawdopodobnie kolejne odwiedziny byy wymuszone. W ostatnich latach twrcy stron zdali sobie spraw z tego, e statyczna zawarto to troch za mao. Coraz wicej firm zaczo wystawia zawarto dynamiczn przynajmniej w czci swoich witryn WWW. Obecnie znalezienie duej witryny, ktra nie zawiera jakiego skadnika dynamicznego to wydarzenie naprawd niezwyke. Dynamiczna zawarto WWW to pojcie odnoszce si do stron, ktrych tre zmienia si przez cay czas. Na przykad strona pokazana na rysunku 1.3. ukazuje jedno z ustawie strony, kiedy aktualny dzie przypada na weekend, za kiedy aktualny dzie tygodnia to poniedziaek, wtorek, roda, czwartek lub pitek, wtedy strona wywietli zawarto pokazan na rysunku 1.4.

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

10

Rysunek 1.3. Prbna strona o zawartoci wywietlanej w czasie weekendw

Rysunek 1.4. Ta sama prbna strona pokazujca zawarto wywietlan w tygodniu Jak widzisz zawarto strony z rysunku 1.4. jest dynamiczna. Jej tre moe si zmienia przez cay czas. Zmiana moe nastpowa po kadorazowym przegldniciu strony lub w losowych bd staych odstpach czasowych. Te zmiany to znaczca kwestia. Tworzenie takich dynamicznych aplikacji internetowych to gwny temat tej ksiki. Kod wymagany podczas tworzenia zawartoci dynamicznej moe by zaimplementowany przez rozmaite mechanizmy. Kod poprzedniego przykadu by stworzony w VBScript na stronie ASP. Pokazany zosta poniej.
<% if weekday(Date) = 7 or weekday(Date) = 1 then %>

11

ASP Kompendium
<H1> Jest weekend id do domu!</H1> <% else %> <H1>Rzu surfing i do pracy!</H1> <% end if %>

programisty

Nie przejmuj si tym, jeli nie potrafisz przeczyta tego kodu teraz; szczegy poznamy w kolejnych rozdziaach ksiki. Jednak powyszy kod nie musia by napisany wykorzystujc ASP przy uyciu VBScript. Mg by zaimplementowany przez skadnik napisany w C++ lub przez biblioteki filtrujce wyszukujce strony z okrelonymi rozszerzeniami i przetwarzajce je odpowiednio. Mg by rwnie napisany w JavaScript. W nastpnym podrozdziale zobaczysz, e kod moe zosta napisany zarwno po stronie klienta, jak i po stronie serwera.

Tworzenie skryptw po stronie klienta i po stronie serwera


Tworzenie skryptw po stronie klienta
Tworzenie skryptw w tym kontekcie to pojcie odnoszce si do miejsca, w ktrym kod jest przetwarzany. Tworzenie skryptw po stronie klienta oznacza, e kod jest uruchamiany na komputerze klienta (bezporednio w przegldarce). Kiedy odwiedzajcy chce przegldn stron, HTML i kady inny kod strony jest pobierany przez przegldark odwiedzajcego. Nastpnie przegldarka dokonuje analizy skadniowej i realizuje kady rozpoznany kod strony. Rezultaty tych czynnoci przegldarka pokazuje odwiedzajcemu stron. Przykadem moe by tutaj grafika pokazana na rysunku 1.5. o treci Welcome to NetStats2000 NetStats Live.

Rysunek 1.5. Przykadowa grafika zrealizowana po stronie klienta. Teraz spjrz na t sam stron, kiedy kursor myszy znajduje si ponad wspomnian grafik, jak pokazano na rysunku 1.6. Zauwa, e teraz tre grafiki brzmi Click here to contact us. Jest to realizowane przez kod po

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

12

stronie klienta. Przegldarka wczytuje kady kod i przetwarza go. W tym przykadzie kod napisany zosta w JavaScript i przedstawia si nastpujco:
<SCRIPT LANG="Javascript"><!-browserName = navigator.appName; browserVer = parseInt(navigator.appVersion); if (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 3 )) || ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 ))) version = "ok", else version = "x", if (version == "ok") { img6off = new Image(); img6off.src = "./assets/images/baroff.jpg"; img6on = new Image(); img6on.src = "./assets/images/baron.jpg"; } function imgover(imgName) { if (version == "ok") { document[imgName].src = eval(imgName + "on.src"); } }

function imgoff(imgName) { if (version == "ok") { document[imgName].src = eval(imgName + "off.src"); } }

// ></SCRIPT>

Rysunek 1.6. Ta sama strona z kursorem myszy znajdujcym si nad obrazkiem Nastpnie w elemencie obrazka mamy poniszy kod korzystajcy z poprzednich funkcji i zmiennych:
<A HREF="mailto:info@netstats2000.com" onmouseover="imgover('img6')" onmouseout="imgoff('img6')"> <IMG HEIGHT=33 WIDTH=569 SRC="./assets/images/baroff.jpg"

13

ASP Kompendium
BORDER=0 ALT="Click here to contact us" name=img6></A>

programisty

Zauwa, e kod jest otoczony znacznikami skryptu, ktre informuj przegldark o typie zastosowanego kodu. Jednak bardzo wan okolicznoci jest fakt, e nie wszystkie przegldarki rozpoznaj dany kod. Wobec tego co si stanie, kiedy przegldarka, ktra nie rozpoznaje znacznika skryptu, prbuje dokona analizy skadniowej strony? Cay blok zostanie zignorowany, poniewa nie rozpoznane znaczniki s pomijane. W tym przykadzie nie ma to znaczenia. Jeli gocie nie zobacz naszej palety grafiki pojawiajcej si podczas przesuwania kursorem myszy nad obrazkiem nie zmieni to rzeczywistej funkcjonalnoci strony. Spjrzmy jednak na kolejny przykad, w ktrym pominicie bloku moe nie by takie proste (Rysunek 1.7).

Rysunek 1.7. Przykadowy skrypt strony klienta uywajcy pola zatwierdzenia W tym przykadowym skrypcie strony klienta korzystamy z kodu zatwierdzajcego wejcie uytkownika, zanim odwiedzajcy bdzie mg wystawi danie dostpu. Jeli uytkownik zostawi to pole nie wypenione, ujrzy wiadomo pokazan na rysunku 1.8.

Rysunek 1.8. Wiadomo, ktra ukae si tym odwiedzajcym stron, ktrzy nie wypeni przedoonego pola zatwierdzenia Gdy odwiedzajcy wpisze w pole warto, jest ona zatwierdzana, a uytkownik zostaje odesany do strony odpowiadajcej tej wartoci. Kod realizujcy zatwierdzanie jest nastpujcy:
<SCRIPT language="JavaScript"> <!-function IsPresent(PassedValue) { var ReturnTest = 0; var LocalPassedValue = PassedValue;

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych


if (LocalPassedValue) { for (var i=0; i<LocalPassedValue.length; i++) { if (LocalPassedValue.charAt(i) != " ") { ReturnTest = 1; } } } if (!ReturnTest) { return 0; } return 1; } function CheckForm() { var TheMessage = ""; if (!(IsPresent(document.sampleform.reqField.value))) { TheMessage += "Please enter a value.\n"; } if (TheMessage != "") { alert(TheMessage); } else { document.location.href = "result.htm"; } } // --> </SCRIPT>

14

Kod dla przycisku Submit Request:


<INPUT TYPE="button" NAME="submitButton" VALUE="Submit Request" onClick="CheckForm();">

Pamitaj co si stanie, kiedy przegldarka nie rozpozna znacznika skryptu lub jzyka uytego w skrypcie. Cay kod znajdujcy si pomidzy znacznikami skryptu zostanie zignorowany, tak wic strona stanie si bezuyteczna dla przegldarek, ktre nie obsuguj tych skryptw. Odwiedzajcy zobaczy stron, ale po naciniciu przycisku Submit Request nic si nie stanie. Jest to ryzyko, ktre musisz rozway. Oczywicie tworzenie skryptw po stronie klienta ma swoje korzyci. Poniewa przetwarzanie odbywa si po stronie klienta, twj serwer ma mniej pracy, mniejsza liczba przywoa redukuje ruch w sieci, a odwiedzajcy stron nie musi czeka na dodatkowe wywoania twojej przegldarki. Istnieje rwnie pewne niebezpieczestwo. Cay twj kod jest ujawniany gociom strony, jeli wic zechc oni pozna kod rdowy strony przy pomocy menu opcji swojej przegldarki, ujrz kady jego wiersz.

15

ASP Kompendium

programisty

Tworzenie skryptw po stronie serwera


Gwnym tematem tej ksiki jest tworzenie skryptw po stronie serwera. Ponownie bdziemy zajmowa si miejscem uruchamiania kodu. Podczas pisania skryptw po stronie klienta kod uruchamiany jest przez przegldark zainstalowan na komputerze odwiedzajcego stron. Podczas tworzenia skryptw po stronie serwera kod, zanim zostanie wysany do przegldarki gocia, przetwarzany jest najpierw na serwerze. Uytkownicy uzyskuj dostp do strony WWW przez wpisanie jej nazwy w oknie przegldarki lub klikajc odpowiednie cze. Serwer internetowy otrzymuje danie dostpu, a nastpnie wyszukuje stron. Kady kod strony serwera jest wtedy przetwarzany, a strona WWW moe zosta zwrcona w czystej postaci HTML. Przegldarka dokonuje analizuje skadniowej podstawowego jzyka HTML i prezentuje jej rezultat odwiedzajcemu. W ten sposb tworzenie skryptw po stronie serwera nie wymaga od przegldarki specjalnych moliwoci. Nie musi ona wiedzie jak przeczyta dany rodzaj skryptu, poniewa przetwarzanie odbywa si na serwerze, ktry zwraca jedynie podstawow posta HTML. Chroniony jest rwnie twj kod. Czsto zdarza si, e nie chcesz udostpnia caemu wiatu twojego kodu rdowego. Kod moe by prawnie zastrzeony dla twojej firmy lub moe zawiera ukryte informacje systemowe, ktre nie powinny by dostpne dla osb postronnych. Tworzenie skryptw po stronie serwera rozwizuje ten problem dziki zwracaniu nie samego kodu, lecz jedynie rezultatu wykonania kodu. Jeli wic uytkownik da dostpu do strony, ktra zawiera kod logowania do bazy danych, nie musisz mu pokazywa schematu dziaania twoich zapyta, nazw pl, techniki zatwierdzania, itd. Przy przetwarzaniu po stronie serwera, odwiedzajcy stron poznaje jedynie wynik dziaania kodu. Spjrzmy na kilka przykadw wykorzystania skryptu strony serwera. Strona pokazana na rysunku 1.9. zawiera standardowy formularz logowania firmy. Zatwierdza ona wejcie uytkownika na fikcyjn stron WWW. Strona pozwala gociom na wprowadzenie nazwy uytkownika oraz hasa. Jeli wprowadz niewaciwe haso, ujrz stron, ktr prezentuje rysunek 1.10.

Rysunek 1.9. Pierwszy widok strony logowania

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

16

Rysunek 1.10. Przykadowa witryna logowania wywietlajca wiadomo o prbie niewaciwego wejcia Odwiedzajcy otrzymuj wiadomo o tym, e wprowadzona informacja nie zostaa rozpoznana. Jeli wprowadz warto poprawn, wywietli si strona pokazana na rysunku 1.11.

Rysunek 1.11. Tekst widoczny na stronie logowania po udanym wejciu. Strona logowania jest implementowana jako pojedyncza strona ASP. Poniej pokazano jej kod. Rwnie w tym przypadku nie musisz przejmowa si tym, e nie rozumiesz jeszcze wszystkich jego szczegw po prostu przeczytaj go pobienie. Pniej omwimy tego typu kody do obszernie.
<%@ Language=VBScript %> <%

17

ASP Kompendium
if not isempty(Request.Form("LogIn")) then set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSUser = conn.Execute("select UserName from C1Login " _ & "where UserName = '" & Request.Form("UserName") _ & "' and Password = '" & Request.Form("Password") _ & "'") if RSUser.EOF then TheMessage = "You have entered an incorrect login. " _ & "Please try again." else TheMessage = "You are now logged in!" end if else TheMessage = "Please enter your user name and password below." end if %>

programisty

Po pierwsze kod sprawdza, czy nacinity zosta przycisk Log On. Jeli tak, kod zweryfikuje nazw uytkownika i jego haso z rekordami bazy danych. Jeli taki zapis istnieje oznacza to, e uytkownik wprowadzi waciwe wartoci i ukae si odpowiednia wiadomo. Gdyby rekord nie zosta odnaleziony, wywietlona zostaaby inna wiadomo mwica o niepoprawnym wejciu. Ostatnia wiadomo zawiera tre, jak pierwotnie zawieraa strona. Pomyl o tym, co by si stao, gdyby prbowa to zaimplementowa po stronie klienta. Po pierwsze mogoby to dziaa jedynie pod ostatnimi wersjami Internet Explorer, poniewa kod zosta zapisany w VBScript. Kolejnym problemem mgby by fakt ujawnienia hasa bazy danych w kodzie rdowym podczas wysyania go do przegldarki. Przy korzystaniu ze skryptu po stronie serwera nie mamy takich zmartwie. Kod zostanie przetworzony przez serwer i aden z blokw kodu nie bdzie widoczny dla odwiedzajcych; dodatkowo nie musimy martwi si o to, z jakiej przegldarki oni korzystaj, poniewa przegldarka otrzymuje jedynie wynik w postaci HTML. Kolejn du zalet tworzenia skryptw po stronie serwera jest moliwo korzystania przez serwer ze skadnikw, ktre mog by nieosigalne na komputerze klienta. Przykadowo zamy, e chc na mojej stronie WWW stworzy kalkulator obliczajcy kwot spaty poyczki. Mgby on wyglda tak, jak to pokazuje rysunek 1.12.

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

18

Rysunek 1.12. Przykadowa strona kalkulatora obliczajcego kwot spaty poyczki Odwiedzajcy stron wpisywaliby potrzebne do oblicze dane. Po naciniciu przycisku Calculate kodowaliby obliczenie kwoty spaty na podstawie wprowadzonych parametrw. Jak widzielimy, istnieje wiele moliwoci wyboru miejsca ulokowania tego kodu oraz sposobu jego implementacji. Teraz ju wiesz, e kod jest lepiej chroniony przed nielegalnym skopiowaniem przez innego twrc stron, jeli piszesz skrypty po stronie serwera. Wiesz, e nie musisz martwi si o to, czy przegldarka bdzie w stanie waciwie zinterpretowa napisany przez ciebie kod. Ale ponadto jeszcze trzecia korzy pynie z tej formy tworzenia skryptw. Jeli kiedykolwiek prbowae tworzy od zera kalkulator obliczajcy kwot spaty poyczki to wiesz, e to mudna i naraona na wiele bdw praca. Dlaczego nie skorzysta ze skadnikw (komponentw) znajdujcych si na twoim serwerze, ktre wykonuj obliczenia dla ciebie? Na przykad Microsoft Excel potrafi wykonywa wiele oblicze finansowych. Moesz wykorzysta te komponenty w skrypcie po stronie serwera i unikn w ten sposb powielania kodu, ktry ju posiadasz. Tak wic tworzc skrypty po stronie serwera moesz wykorzysta funkcje skadnikw serwera na potrzeby aplikacji nie martwic si o to, czy odwiedzajcy stron posiadaj odpowiednie skadniki na swoich komputerach.

Skadniki dynamicznych rozwiza internetowych


Do tej pory zastanawialimy si co decyduje o tym, e strona WWW jest statyczna lub dynamiczna. Przyjrzelimy si rnym sposobom tworzenia stron dynamicznych, jak rwnie ich wadom i zaletom. W tym podrozdziale zwrcimy uwag na rnorodne skadniki tworzce dynamiczne rozwizania i sposoby ich wspdziaania. Rozwizanie dynamiczne moe zawiera rozmaite skadniki. Po pierwsze, HTML. Nawet najbardziej dynamiczna strona posiada jaki statyczny skadnik HTML wicy ze sob elementy dynamiczne. Czsto dynamiczna strona lub witryna zawiera baz danych, ktrej tre jest rwnie dynamiczna. Bardziej zaawansowane rozwizania cz w sobie wszystkie skadniki, ktre znajduj si na serwerze. Niejednokrotnie elementy te zawieraj przepisy firmowe i porednicz midzy baz danych a czciami dynamicznymi strony WWW. Mog posiada rwnie jaki rodzaj kodu, ktry wstawia w stron tre dynamiczn, jak to jest w przypadku kodu ASP. Zwykle te rozwizania dynamiczne bd wykorzystyway jaki serwer WWW, na przykad internetowy serwer informacyjny, w celu odebrania dania od przegldarki, przetworzenia kodu na stronie i zwrcenia rezultatu.

19

ASP Kompendium

programisty

Przejcie przez stron quizu


Aby zademonstrowa jak funkcjonuje kady ze skadnikw rozwizania dynamicznego, na kilku kolejnych stronach zaprezentowano przykadowy quiz. Uywa on jzyka HTML dla statycznych elementw strony. Korzysta z bazy danych w celu zapamitywania pyta i odpowiedzi. Skadnik Visual Basic realizuje wezwania bazy danych pozwalajce na wyszukiwanie pyta i sprawdzanie poprawnoci odpowiedzi. Strona quizu implementowana jest jako strona ASP i zawiera kod dynamicznego wywietlania w oparciu o aktualne pytania; znajduje si ona na internetowym serwerze informacyjnym, ktry przetwarza kod i zwraca jego wynik przegldarce. Quiz wykonany jest jako pojedyncza strona WWW. Kiedy uytkownicy odwiedz j po raz pierwszy, ujrz widok przedstawiony na rysunku 1.13. Kiedy rozpoczn quiz, zobacz pytanie pierwsze. Wybior odpowied, ktr uwaaj za prawidow i nacisn przycisk Check Answer. Wtedy ukae si strona pokazana na rysunku 1.14. Proces ten powtarza si dopki uytkownicy nie odpowiedz na ostatnie pytanie quizu, po ktrym ukae si im strona przedstawiona na rysunku 1.15. Rysunek 1.13. Pierwsza strona quizu Rysunek 1.14. Drugie pytanie quizu Rysunek 1.15. Ostatnia strona quizu Zauwa, e po zakoczeniu quizu odwiedzajcy stron nie maj adnych dodatkowych pyta ani nie wida ju przycisku odpowiedzi na pytanie. Jak dowiesz si z dalszego omwienia, kod ASP steruje tym wyjciem na stronie.

HTML
W tym dynamicznym rodowisku internetowym, HTML jest poczeniem dowolnego statycznego skadnika pierwotnego dania oraz wyjcia kodu uruchamianego na serwerze. Kiedy wic odwiedzajcy stron poprosz o pierwsze pytanie quizu, otrzymaj w odpowiedzi sam HTML. Przykadowo, chocia pytania quizu s elementem dynamicznym, opartym na aktualnym daniu pytania, wyjciowym elementem jest nastpujcy kod HTML:
<P><B><FONT FACE="Arial,Helvetica"> With this type of scripting, the code runs in the browser. </B></FONT>

Lista rozwijana obiektu sterujcego wyborem zawiera moliwe odpowiedzi na zadane pytania, a jeli odwiedzajcy zdecyduje si na obejrzenie kodu rdowego strony, moe przykadowo zobaczy:
<SELECT NAME="Answer" > <OPTION VALUE="Server-Side">Server-Side</OPTION> <OPTION VALUE="Client-Side">Client-Side</OPTION> </SELECT>

Faktycznie z punktu widzenia odwiedzajcego, ta pojedyncza witryna zdaje si by czterema osobnymi stronami: po jednej na kade pytanie plus jedna kocowa. HTML w tym przykadzie obejmuje te formularz, ktry jest zgrupowaniem elementw HTML takich jak pola tekstowe (rwnie niesformatowane, zwane Textarea), obiekty sterujce wyborem, przyciski opcji oraz pola sprawdzajce. W naszym przykadzie formularz jest pojedynczym obiektem sterujcym wyborem, ktry zawiera zbir moliwych odpowiedzi na pytania. Ale formularz posiada rwnie wiele innych obiektw sterujcych, ktre zawieraj ukryte wartoci. Elementy ukryte nios w sobie wartoci, ktre chcesz przedoy wraz z

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

20

formularzem, ale nie chcesz, aby byy one widoczne dla odwiedzajcych stron. W kolejnej stronie przykadu uyte zostay trzy ukryte elementy.
<INPUT TYPE=HIDDEN NAME="CurrentQuestion" VALUE = "1"> <INPUT TYPE=HIDDEN NAME="QuestionsTaken" VALUE = "0"> <INPUT TYPE=HIDDEN NAME="NumberCorrect" VALUE = "0">

Pierwszy ukryty element zawiera numer biecego pytania. Potrzebujemy tej wartoci w celu sprawdzenia, czy odwiedzajcy wybra waciw odpowied na to pytanie. Element ukryty Question zapamituje liczb pyta, na ktre odpowiedzia go. Warto NumberCorrect informuje o liczbie poprawnych odpowiedzi. Te trzy ukryte wartoci oraz warto obiektu wyboru, ktre zawieraj odpowied uytkownika na dane pytanie, s przedkadane wraz z formularzem po naciniciu przycisku Check Answer. Oznacza to, e przegldarka wysya te pola w postaci strumienia bajtw pod adres okrelony w znaczniku formularza:
<FORM ACTION="./quiz.asp" METHOD=POST>

Tak wic wartoci s wysyane z powrotem do tej samej strony, ktra wczeniej stworzya omawian stron oto w jaki sposb uzyskujemy wiele stron z jednej. Za kadym razem kiedy odwiedzajcy odpowiadaj na pytanie, numer pytania wraz z odpowiedzi i dwoma innymi wartociami jest wysyany z powrotem do tej samej strony w celu przetworzenia. Jeszcze jedna rzecz jest przekazywana wraz ze stron podczas jej przedkadania. Jest to nazwa nacinitego przycisku:
<INPUT TYPE="submit" NAME="Calculate" VALUE="Check Answer" >

Czsto bdziesz spotyka si z tym kodem w dalszych czciach ksiki oraz sam bdziesz uywa go przy tworzeniu twoich wasnych kodw. Wykrywanie nacinicia tego lub jakiegokolwiek innego przycisku suy okreleniu dziaa, jakie naley podj. Kiedy strona jest przetwarzana, na stronie znajduje si czysty HTML tu obok jej kodu. Na przykad, na nieprzetworzonej stronie obiekt sterujcy wyborem, ktry zosta opisany wczeniej, wyglda nastpujco:
<SELECT NAME="Answer" ><% response.write AnswerText %></SELECT>

A HTML z kodem strony nieprzetworzonej dla elementw ukrytych przedstawia si tak:


<INPUT TYPE=HIDDEN NAME="CurrentQuestion" VALUE = " <% Response.Write CurrentQuestion %>"> <INPUT TYPE=HIDDEN NAME="QuestionsTaken" VALUE = " <% Response.Write QuestionsTaken %>"> <INPUT TYPE=HIDDEN NAME="NumberCorrect" VALUE = " <% Response.Write NumberCorrect %>">

W dalszej czci tego rozdziau przyjrzymy si jak kod ASP wsppracuje z HTML w celu realizacji dynamicznego wywietlania zawartoci.

Skadnik bazy danych


Wiele rozwiza internetowych i intranetowych, ktre stworzysz, bdzie zawierao w sobie jaki rodzaj bazy danych. Kiedy logujesz uytkownikw twojej witryny, bdziesz potrzebowa tabeli uytkownikw, ktra bdzie wykorzystywana podczas zatwierdzania ich wej. Jeli posiadasz firmowy katalog online, prawdopodobnie bdzie on skada si z tabel zawierajcych informacje o produktach: ich nazwy, opis, dostpno, ceny, zalety itd. Jeli na twojej stronie znajduj si informacje o aktualnych warunkach

21

ASP Kompendium

programisty

atmosferycznych w twoim miejscu zamieszkania, dane do wyszukiwania zapewne przechowywane s w bazie danych. Tak wic baza danych dynamicznej aplikacji internetowej czsto zawiera kod rdowy dla dynamicznej zawartoci. W naszym przykadowym projekcie quizu dania dla bazy danych pochodz od strony ASP. danie przechodzi przez komponent serwera, ktry wystosowuje zapytania do bazy danych. Baza danych zwraca danie do komponentu serwera, ktry nastpnie przesya dane z powrotem do naszej strony ASP. Jak si dowiesz dokadniej z rozdziau 13., kod dania dostpu do danych bazy, zarwno na stronie ASP jak i w skadniku serwera, musi zna pooenie bazy danych. Aby to osign, mona skorzysta z Otwartego cza baz danych (ODBC Open Database Connectivity). Poprzez Administratora rde danych ODBC (rysunek 1.16.) stworzymy Nazw rda danych (DSN Data Source Name). Klikajc przycisk Dodaj (Add) moemy skonfigurowa poczenie z kad osigaln baz danych, dla ktrej mamy sterownik ODBC.

Rysunek 1.16. Administrator rde danych ODBC W tej przykadowej witrynie czymy si z baz danych SQL Server 6.5 zwan ASPBook. Stworzona zostaje nazwa DSN w celu zapewnienia komunikacji pomidzy SQL Server a stron ASP. Kiedy to poczenie jest tworzone po raz pierwszy, zapamitywany jest typ i nazwa bazy danych oraz adres IP serwera. Niektre z tych elementw wida na rysunku 1.17.

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

22

Rysunek 1.17. Konfiguracja nazwy DSN ODBC. Dane w bazie naszego przykadu z quizem zawieraj tekst pytania, prawidow odpowied na nie oraz wszystkie inne moliwe odpowiedzi, ktre zostan wyszczeglnione w obiekcie wyboru strony WWW. Uywa si dwch tabeli dostarczajcych potrzebnych danych. Pierwsza z nich zwana jest C1Questions; zawiera ona dane samego pytania. Nazwy pl, typw i ich zastosowania pokazano w tabeli 1.1. Tabela 1.1. Pola C1Questions Nazwa pola Typ pola Przeznaczenie QuestionID int Klucz gwny Question varchar Tekst pytania Answer varchar Tekst poprawnej odpowiedzi QuestionID jest kluczem podstawowym dla tabeli. Oznacza to, e zawiera warto, ktra jest unikalna dla tego pola. Jeli wic ktry rekord posiada pole QuestionID o wartoci 45, nie moe jej mie aden inny rekord. Ta niepowtarzalno daje nam moliwo odczytywania waciwych odpowiedzi w kodzie. Typ danych to int, czyli warto pola musi by liczb cakowit. Pole Question zawiera tre samego pytania. Ta dana jest wywietlana na stronie WWW jako pytanie. Typ danych w tym wypadku to varchar, co znaczy, e w polu tym mog znale si litery wraz z cyframi. Dugo pola moe wynosi od 0 do 255 znakw. Pole Answer zawiera prawidow odpowied na pytanie. To pole tekstowe uywane jest do sprawdzania poprawnoci odpowiedzi podawanej przez biorcych udzia w quizie. Pole moe zawiera od 0 do 100 znakw. Druga tabela, z ktrej korzysta nasza przykadowa strona z quizem, zawiera wszystkie moliwe odpowiedzi na zadane pytania. Nazywa si C1Answers, a jej pola opisuje tabela 1.2. Tabela 1.2. Pola C1Answers Nazwa pola Typ pola Przeznaczenie AnswerID int Klucz gwny i kolumna tosamoci QuestionID int Klucz obcy Answer varchar Tekst poprawnej odpowiedzi Dane w tabeli 1.2. s wykorzystywane do wypenienia obiektu sterujcego wyborem na stronie WWW. Do kadego pytania mona przyporzdkowa jedn lub kilka odpowiedzi znajdujcych si w tabeli. W kodzie prosimy tabel o znalezienie odpowiedzi przyporzdkowanych do aktualnego pytania, a nastpnie wywietlamy je w obiekcie wyboru.

23

ASP Kompendium

programisty

Pole AnswerID jest kluczem gwnym tabeli. Jak wspomniano wczeniej klucz gwny jednoznacznie identyfikuje kady rekord tabeli. Pole jest rwnie okrelane pojciem kolumny tosamoci. To znaczy, e podczas dodawania do tabeli nowego rekordu moesz zostawi to pole puste, a SQL Server wypeni je automatycznie niepowtarzaln wartoci. Jak si dowiemy z rozdziau 13., tworzc pola takie jak te w SQL Server, moesz okreli numer pocztkowy i sposb inkrementacji tego numeru dla kolejnych rekordw. Pole QuestionID uywane jest jako klucz obcy tabeli, to znaczy bdzie wykorzystywany do poczenia pomidzy tabelami C1Questions i C1Answers. Kiedy wypeniamy obiekt wyboru moliwymi odpowiedziami, nie chcemy widzie odpowiedzi na inne pytania, interesuj nas jedynie dostpne odpowiedzi na biece pytanie. To pole umoliwia tak filtracj. Kiedy odpowied jest wprowadzana do tabeli, musi zosta rwnie wprowadzona warto pola QuestionID. To ostatnie pole odnosi si do waciwego pytania zwizanego z t odpowiedzi. Ostatnie pole tej tabeli to pole Answer, ktre zawiera sam tre odpowiedzi. Ta dana trafia do obiektu sterujcego wyborem. Jeden z rekordw tabeli C1Questions pokazuje tabela 1.3. Przykadowy rekord C1Answers prezentuje tabela 1.4. Tabela 1.3. Przykadowy rekord tabeli C1Questions Nazwa pola Warto QuestionID 1 Question Przy tym sposobie pisania skryptw kod uruchamiany jest w przegldarce. Answer Po stronie klienta Tabela 1.4. Przykadowy rekord tabeli C1Answers Nazwa pola Warto AnswerID 1 QuestionID 1 Answer Po stronie serwera

Komponenty serwera
Nie wszystkie twoje rozwizania internetowe i intranetowe potrzebuj komponentw serwera. Tak naprawd na samym pocztku moesz nie uywa ich wcale. Ale z upywem czasu zorientujesz si, e niektrych rozwiza nie uda ci si zrealizowa od rki stosujc jedynie technologi ASP; by moe stwierdzisz, e kod ASP staje si zbyt skomplikowany i naley podzieli go na obiekty; lub moe rozdzielisz te rnorodne zadania pomidzy programistw klasy podstawowej a tych bardziej zaawansowanych. Wykorzystanie czy utworzenie komponentu serwera czsto zaspokaja wiele wymaga. Komponenty serwera s moduami kodowymi, do ktrych uzyskujesz dostp poprzez twj kod ASP lub z innych rodowisk programowych w celu realizacji pewnych zada zwizanych z programowaniem. Niektre z tych skadnikw wbudowane s w twj system. Na przykad IIS (Internet Information Server) jest dostarczany wraz z CDO (Collaborative Data Objects) uatwiajcymi wysyanie poczty elektronicznej poprzez twj kod, co zostanie omwione w rozdziale 9. Kolejny skadnik dostarczany wraz z IIS to Browser Capabilities, ktry to komponent uywany jest do okrelania typu przegldarki i innych informacji dotyczcych goci strony (wicej informacji znajdziesz w rozdziale 10). Inne skadniki mona zakupi lub pobra ze stron sprzedawcw. Te produkty s zazwyczaj bardziej wyspecjalizowane w swoich zadaniach. Jeli na przykad wystpi potrzeba stworzenia kodu grafiki ukazujcej diagram koowy, znajdziesz odpowiednie ku temu skadniki. Czsto moesz oszczdzi sobie mnstwa czasu i pienidzy dziki zakupieniu skadnika wspierajcego programowanie. Inn moliwoci jest stworzenie wasnych skadnikw. Mona w ten sposb zaspokoi rnorodne potrzeby, w tym rwnie wydajno. Gdy tworzysz nowy skadnik zaimplementowany w postaci kompilowanego kodu, ktry rni si od kodu skryptu ASP tym, e musisz go przekompilowa za kadym razem, kiedy go uywasz. Innym wanym powodem tworzenia skadnikw jest oddzielenie od siebie czci strony powiconej sprawom firmowym od interfejsu twoich aplikacji. Zamy, e musisz stworzy witryn, ktra dodawaaby informacje o

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

24

nowych pracownikach do bazy danych. Moesz tego dokona na wiele rnych sposobw. Moesz stworzy aplikacj dostpu dla dziau zasobw ludzkich twojej firmy, przez ktr bdzie si wprowadza zapisy do bazy danych. Moesz rwnie uy w tym celu aplikacji ASP. Baza danych prawdopodobnie jest skonfigurowana w ten sposb, e pewne pola wymagaj wypenienia, inne musz by okrelonego typu i zasigu. Te zasady, zasady firmowe, mog by modyfikowane o wiele atwiej i dokadniej, jeli s umieszczone osobno. Komponent serwera zazwyczaj jest implementowany w ten sposb. Dodatkowym powodem tworzenia komponentw serwera jest pozbawienie niedowiadczonych programistw dostpu do pewnych zoonych blokw kodu. Moesz na przykad stworzy procedur obliczajc pewn przewidywan warto na podstawie zbioru parametrw i kalkulacji. Ten kod mgby by umieszczony we wszystkich miejscach, ktre z niego korzystaj. Ale programista, ktry nie jest z nim odpowiednio zaznajomiony mgby korzysta z niego w niewaciwy sposb. Jeli stworzysz skadnik serwera, umoliwisz swoim programistom wykonanie oblicze dziki jednemu poczeniu. W rozdziale 10. omwimy szczegowo komponenty serwera, tutaj natomiast ograniczymy si jedynie do ich wprowadzenia. Na potrzeby strony z quizem, stworzony zosta komponent przez kompilacj ActiveX DLL w Visual Basicu. Ten skadnik realizuje interfejs midzy baz danych a naszym kodem podstawowym, ASP. Tworzy si go poprzez wybranie projektu ActiveX DLL w oknie Visual Basic, co pokazano na rysunku 1.18.

Rysunek 1.18. Tworzenie ActiveX DLL w Visual Basic Kiedy zaznaczymy ikon ActiveX DLL, konfigurujemy szablon do tworzenia skadnika serwera biblioteki DLL. Szczeglne znaczenie ma tutaj nazwa projektu, poniewa bdzie ona uywana w naszym kodzie ASP w celu wywoywania procedur komponentu serwera. Robi si to przez wybranie Waciwoci projektu (Project Properties) z menu Projekt (Project). Ukae si okno dialogowe pokazane na rysunku 1.19, gdzie wpiszesz nazw projektu w pole tekstowe Nazwa projektu (Project Name).

25

ASP Kompendium

programisty

Rysunek 1.19. Nadawanie nazwy skadnikowi serwera Wewntrz ActiveX DLL znajduj si klasy, w ktrych procedury faktycznie dziaaj. Ilo klas nie jest ograniczona. Klasy tworzy si zazwyczaj przez umieszczenie razem tych procedur, ktre maj wsplne przeznaczenie. Na przykad komponent serwera naszej strony z quizem posiada jedn klas. Klasa ta zawiera procedury wyszukiwania pytania i sprawdzania odpowiedzi. Lecz jeli rozszerzymy t aplikacj, bdziemy mogli doda strony pozwalajce uytkownikom na uzupenianie quizu o wasne pytania. Procedury realizujce takie zadania znajdowayby si prawdopodobnie w osobnej klasie. By moe chciaby doda kolejn klas, ktra pozwalaaby uytkownikom logowa si w aplikacji quizu w celu ledzenia jej rozwoju. Procedury realizujce t funkcj znajdowayby si zapewne w osobnej klasie. Podobnie jak w wypadku projektu, klasa rwnie posiada sw nazw. Nazwa klasy jest wana, poniewa bdzie wykorzystywana przez nasz kod ASP do wywoywania procedur znajdujcych si na serwerze. Uywajc Visual Basic nazw klasy okreli moesz we waciwociach klasy pokazanych na rysunku 1.20.

Rysunek 1.20. Nadawanie nazwy klasie

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

26

Teraz, kiedy zdefiniowalimy ju nasz komponent oraz klas, jestemy gotowi do stworzenia procedury bd metody wewntrz klasy. Metody s blokami kodu napisanymi po to, aby realizowa pewne zadania programowe. S one wywoywane z kodu ASP, co zostanie omwione pniej. Klasa o nazwie Quiz, ktr stworzylimy poprzednio posiada trzy metody. Pierwsza z nich wyszukuje tekst pytania w oparciu o pole QuestionID przekazywane przez procedur. Kod procedury jest nastpujcy:
Public Function GetQuestion(QuestionID) Dim RSQuestion As ADODB.Recordset Set RSQuestion = Conn.Execute("select Question from C1Questions " _ & "where QuestionID = " & QuestionID) If RSQuestion.EOF Then GetQuestion = "NA" Else GetQuestion = RSQuestion("Question") End If End Function

Zauwa, e metoda ta nosi nazw GetQuestion. Tej nazwy bdziemy uywa w kodzie ASP do wywoywania procedury. Kod tej funkcji czy si z baz danych i wyszukuje w niej tekst pytania w oparciu o pole QuestionID. Jeli pole to nie jest waciwe, zwracany jest tekst NA; w przeciwnym wypadku zwracany jest tekst pytania. Kolejna procedura zwraca tekst moliwych odpowiedzi do wypenienia obiektu wyboru w formularzu HTML. Kod tej procedury:
Public Function GetAnswer(QuestionID) Dim RSAnswers As ADODB.Recordset Dim TempList As String Set RSAnswers = Conn.Execute("select Answer from C1Answers " _ & "where QuestionID = " & QuestionID) Do Until RSAnswers.EOF TempList = TempList & "<OPTION VALUE=""" _ & RSAnswers("Answer") & """>" _ & RSAnswers("Answer") & "</OPTION>" RSAnswers.MoveNext Loop GetAnswer = TempList End Function

Ta metoda nosi nazw GetAnswer. Kiedy jest wywoywana, przekazywane zostaje pole QuestionID. W bazie danych wyszukiwane s wszystkie moliwe odpowiedzi na dane pytanie. Nastpnie kod przechodzi kolejno lub w ptli przez kad z opcjonalnych odpowiedzi znajdujcych si w obiekcie sterujcym wyborem, budujc odpowiedni tekst HTML. Formatem zwracanym przez metod jest czysty HTML. Ostatni metod klasy Quiz serwera o nazwie SampleServer jest procedura CheckAnswer. Sprawdza ona poprawno udzielonej odpowiedzi. Kod procedury:
Public Function CheckAnswer(QuestionID, AnswerText) Dim RSAnswer As ADODB.Recordset Set RSAnswer = Conn.Execute("select Answer from C1Questions " _ & "where QuestionID = " & QuestionID) If RSAnswer("Answer") = AnswerText Then CheckAnswer = 1 Else CheckAnswer = 0

27

ASP Kompendium
End If End Function

programisty

Procedura CheckAnswer korzysta z dwch wartoci: pola QuestionID oraz Answer w celu sprawdzenia poprawnoci odpowiedzi. Kod czy si z baz danych przeszukujc j w celu odnalezienia poprawnej odpowiedzi na konkretne pytanie. Nastpnie ta odpowied jest porwnywana z odpowiedzi przekazywan przez procedur. Jeli obydwie s takie same, procedura zwraca warto 1, jeli tak nie jest wartoci wyjciow jest 0. Te wartoci oraz inne zwracane przez procedury bd wykorzystane przez kod ASP, co omwiono dalej. Klasa, ktr tworzymy w Visual Basic, posiada miejsce pozwalajce nam na okrelenie aplikacji, ktr chcemy uruchomi, kiedy po raz pierwszy klasa jest wywoywana, innymi sowy kiedy tworzona jest jej kopia. To miejsce nazywane okrelane jest mianem Inicjacji zdarzenia i zawiera nastpujcy kod:
Private Sub Class_Initialize() Conn.Open "ASPBook", "sa", "yourpassword" End Sub

Ten kod zapewnia nam poczenie z baz danych. Pamitaj o tym, e musielimy skonfigurowa nazw DSN, jak to omawialimy w podrozdziale powiconym bazie danych. Jedna z linii powyszego kodu korzysta z nazwy DSN, dziki ktrej moliwe jest poczenie z baz danych. Inne procedury tej klasy uywaj tego poczenia podczas wyszukiwania danych.

Kod ASP (Active Server Page)


Do tej pory przygldalimy si czystemu kodowi HTML wysyanemu do przegldarki, jak rwnie jego statycznemu wykorzystywaniu na naszej dynamicznej stronie. Przyjrzelimy si bazie danych zawierajcej pytania i odpowiedzi quizu, jak rwnie skadnikom stworzonym w Visual Basic, uywanym podczas czenia z baz. Teraz zwrcimy uwag na kod ASP. Kod ASP jest odczytywany i przetwarzany przez serwer IIS, kiedy nasi gocie odwiedzaj stron. Ten kod kompletuje wywoania potrzebne do stworzenia odpowiedniego wyjcia dla przegldarki. W naszym przykadzie quizu kod musi wyszukiwa pytania i odpowiedzi. Musi rwnie obserwowa aktualne pytanie oraz liczb poprawnych odpowiedzi oraz zadanych pyta. Kod powinien te formatowa stron w ten sposb, aby pole odpowiedzi i przycisk nie ukazyway si po zakoczeniu quizu. Szczegowo omwimy ukad tego kodu w rozdziale 4., a na razie przyjrzymy si mu tylko pobienie. Na pocztku strony ASP mamy nastpujcy kod:
<%@ Language=VBScript %> <% set objQuiz = server.CreateObject("SampleServer.Quiz") if isempty(Request.Form("Calculate")) then CurrentQuestion = 1 QuestionsTaken NumberCorrect = 0 else if objQuiz.CheckAnswer(Request.Form("CurrentQuestion"), _ Request.Form("Answer")) = 1 then NumberCorrect = Request.Form("NumberCorrect") + 1 else NumberCorrect = Request.Form("NumberCorrect") end if QuestionsTaken = Request.Form("QuestionsTaken") + 1 CurrentQuestion = Request.Form("CurrentQuestion") + 1 = 0

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych


end if QuestionText = objQuiz.GetQuestion(CurrentQuestion) if QuestionText = "NA" then TheMessage = "Quiz: Complete" else TheMessage = "Quiz: In Progress" AnswerText = objQuiz.GetAnswer(CurrentQuestion) end if %>

28

Pierwsza linia kodu informuje kompilator o rodzaju jzyka uytego podczas tworzenia skryptu, w tym przypadku jest to VBScript. Nastpnie tworzymy kopi klasy na serwerze, co opisane zostao w poprzednim podrozdziale. Innymi sowy czymy si ze skadnikiem serwera, poniewa chcemy wykorzysta procedury znajdujce si na nim:
set objQuiz = server.CreateObject("SampleServer.Quiz")

Zauwa, e kiedy stworzylimy procedur, uylimy nazw projektu i klasy SampleServer.Quiz. Przypomnij sobie podrozdzia dotyczcy HTML, gdzie omawialimy sposb okrelania dziaa, ktre naley podj przy uyciu przycisku Submit Request. To samo realizuje poniszy kod:
if isempty(Request.Form("Calculate")) then

Oznacza to, e jeli odwiedzajcy nie nacisn przycisku Calculate, to musia wej na stron. Jeli wystpi taki przypadek, bdziemy musieli skonfigurowa stron pierwszego pytania:
CurrentQuestion = 1 QuestionsTaken = 0 NumberCorrect = 0

Jeli przycisk Calculate jest nacinity, wtedy odwiedzajcym przedstawiane s pytania, na ktre naley odpowiedzie:
Else

Nastpnie kod wywouje skadnik sprawdzajcy, czy nasi gocie wpisali poprawn odpowied. Jeli tak, musimy wywietli potwierdzenie poprawnoci:
if objQuiz.CheckAnswer(Request.Form("CurrentQuestion"), _ Request.Form("Answer")) = 1 then NumberCorrect = Request.Form("NumberCorrect") + 1

W przeciwnym razie, aktualna liczba (NumberCorrect) oznacza ilo udzielonych do tej pory poprawnych odpowiedzi:
else NumberCorrect = Request. Form("NumberCorrect")

Teraz musimy wyszuka tekst kolejnego pytania poprzez wywoanie procedury GetQuestion ze skadnika serwera:
QuestionText = obj.Quiz.GetQuestion(CurrentQuestion)

29

ASP Kompendium

programisty

Jeli pytanie nie zostao znalezione, procedura zwraca warto NA, jak to okrelilimy w poprzednim podrozdziale.
if QuestionText = "NA" then

Oznacza to, e powinnimy przedstawi odwiedzajcym wiadomo informujc o zakoczeniu quizu:


TheMessage = "Quiz: Complete"

W innym razie wyszukalimy odpowiednie pytanie, a odpowiedzi na nie musz zosta znalezione przez procedur GetAnswer:
else TheMessage = "Quiz: In Progress" AnswerText = objQuiz.GetAnswer(CurrentQuestion)

end if

Po caym HTML rozsiane s dodatkowe linie skryptu, ktre wstawiaj zmienne stworzone wczeniej. Na przykad tekst pytania napisany w HTML przedstawia si nastpujco:
<P><B><FONT FACE="Arial,Helvetica"> <% response.write QuestionText %></B></FONT>

Odpowiedzi dla obiektu sterujcego wyborem s napisane w nastpujcej linii kodu:


<SELECT NAME="Answer" ><% response.write AnswerText %></SELECT>

A rejestr punktacji dla odwiedzajcego jest napisany w HTML w nastpujcy sposb:


<P><B><FONT FACE="Arial,Helvetica"> <% Response.Write The Message %><BR>Score <% Response.Write NumberCorrect %> out of <% Response.Write QuestionsTaken %></B></FONT>

Tak wic ASP realizuje naprawd wane zadania! Wsppraca z serwerem internetowym Wszystkie poprzednie kody cile wsppracuj z serwerem internetowym. Serwer czeka na dania dostpu od przegldarki. Serwer wyszukuje dan stron. Zalenie od typu strony, serwer internetowy sprawdzi rwnie kod ASP. Jeli taki kod znajduje si na stronie, serwer go przetworzy i poczy si z kadym skadnikiem, ktrego kod ASP potrzebuje. Kiedy przetwarzanie zostaje zakoczone, serwer internetowy wyle HTML do przegldarki. W naszym przykadzie korzystalimy z internetowego serwera informacyjnego (IIS) Microsoftu w systemie operacyjnym Windows NT. Kiedy kto w Internecie lub naszym Intranecie da dostpu do pliku quiz.asp, serwer IIS wyszukuje t stron. IIS zauwaa, e strona ma rozszerzenie .asp. W ten sposb jest informowany o tym, e dana strona jest wykonana w technologii ASP i naley przetworzy jej kod. Serwer IIS uruchamia ten kod na naszej stronie quizu. Tworzy kopie klasy o nazwie Quiz z serwera SampleServer. Nastpnie wynik w postaci HTML wysya do tej przegldarki, ktra daa dostpu do strony. W nastpnym rozdziale dokadniej przyjrzymy si serwerowi IIS. Dowiemy si, jak konfigurowa i wykorzystywa ten serwer z perspektywy twrcy strony.

Rozdzia 1 Tworzenie dynamicznych aplikacji internetowych

30

Nie tylko IIS systemu NT


Tematem gwnym tej ksiki jest korzystanie z technologii ASP na serwerze systemu Windows NT dziki uruchamianiu IIS. Ale popularno ASP powoduje, e szybko wychodzi ona poza te ramy. Liczne firmy wytwarzaj narzdzia i dodatki dla innych serwerw internetowych i systemw operacyjnych, co pozwala twrcom stron ASP pracowa rwnie poza modelem Microsoftu. W nadchodzcych latach spodziewamy si kontynuacji rozwoju technologii ASP i przejcia zasadniczej roli w zapewnianiu poczenia pomidzy klientem a serwerem.

Rozdzia 2. Serwer IIS widziany z perspektywy twrcy stron


Czym jest IIS?
Internet Information Service (IIS) firmy Microsoft jest poczeniem pomidzy klientem a serwerem uywanym w rozwizaniach korzystajcych z przegldarek internetowych i intranetowych. W tym typie rozwiza pojcie klient oznacza przegldark, na przykad Microsoft Internet Explorer, Netscape Navigator czy jak inn. Serwer oznacza kombinacj narzdzi i aplikacji, ktrych uywamy do tworzenia zawartoci strony. W przypadku niektrych serwisw WWW zadania IIS bd ograniczay si do wysyania statycznych blokw HTML; gdzie indziej IIS bdzie odgrywa znacznie wiksz rol, uatwiajc komunikacj pomidzy mnstwem zasobw na twoim serwerze. Rysunek 2.1 pokazuje kolejne kroki dania dostpu w tym rodowisku klient-serwer. Omwimy ten proces dokadniej w rozdziale 4, teraz przyjrzyjmy si jedynie udziaowi serwera IIS. Uytkownicy wpisuj w swojej przegldarce danie dostpu do strony znajdujcej si na twoim serwerze. danie jest przesyane przez Internet do twojego serwera, a nastpnie do IIS. IIS wyszukuje dan stron, a nastpnie, w oparciu o nazw znalezionego pliku decyduje o tym, co naley z ni zrobi. Jeli plik ma rozszerzenie oznaczajce konieczno przetworzenia go przez twj komputer, np. .asp, to IIS przetworzy kod tej strony.

Rysunek 2.1. Kolejne kroki generowania dania przez przegldark To przetwarzanie moe dotyczy rwnie innych skadnikw. Jeli kod wymaga poczenia z SQL Server w celu wyszukania jakiej danej, tworzona jest kopia potrzebnych skadnikw. Kiedy kod potrzebuje jakiego programu graficznego do wygenerowania wykresu, odpowiedni skadnik jest uruchamiany. Kiedy kod wywouje jeden z twoich wasnych skadnikw, rwnie zostanie stworzona jego kopia. Wynik kodu i wszystkie skadniki pobrane dla tej strony s wysyane z powrotem do przegldarki, ktra daa dostpu do strony. Nastpnie przegldarka dokonuje analizy skadniowej przysanego kodu i wywietla

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

32

zawarto strony. Jeli strona nie ma rozszerzenia lub nazwy, ktra wskazywaaby na konieczno przetworzenia jej przez IIS, jest ona po prostu wysyana do przegldarki bez kopii skadnikw oraz bez jakiegokolwiek przetworzenia.

Otrzymywanie kopii IIS


Internetowy serwer informacyjny wersji 4.0 systemu Windows NT 4.0 jest dostarczany wraz z pakietem Option Pack systemu operacyjnego. Pakiet ten moesz pobra za darmo z witryny WWW Microsoftu. Nowe kopie pyt CD z Windowsem NT rwnie zawieraj serwer IIS 4.0, moesz wic ju mie IIS uruchomiony na twoim serwerze bdziesz bowiem potrzebowa przynajmniej wersji 4.0. Poprzednie wersje nie pozwalay na wykorzystanie wszystkich narzdzi i technik przedstawionych w tej ksice. To, czy posiadasz zainstalowany Pakiet opcji Windowsa NT 4.0, moesz sprawdzi przegldajc odpowiedni folder, co pokazano na rysunku 2.2.

Rysunek 2.2. Folder Pakietu opcji Windows NT 4.0 Instrukcje dotyczce penej instalacji IIS rwnie znajduj si na stronie internetowej Microsoftu. Dalsza cz tego rozdziau dotyczy konfiguracji IIS z perspektywy twrcy stron. Nauczysz si pracy z Konsol zarzdzania Microsoftu, konfiguracji usugi WWW, dodawania kolejnych witryn, wsppracy z aplikacjami ASP, stosowania i konfigurowania usugi FTP oraz monitorowania sprawnoci twojego internetowego serwera informacyjnego.

Konsola zarzdzania Microsoftu


Konsola zarzdzania Microsoftu (MMC Microsoft Management Console) jest narzdziem uywanym do konfiguracji IIS. MMC jest nowym elementem Windowsa NT uywanym rwnie podczas konfiguracji wielu innych zada administracyjnych w rodowisku NT. Narzdzie to dziaa przy uyciu moduw dodatkowych dla kadej aplikacji, ktra wykorzystuje konsol MMC. MMC stanowi szkielet do konfiguracji usug. Produkt wymagajcy od administratora uycia MMC podczas konfiguracji, dostarcza moduu dodatkowego do MMC. Modu dodatkowy (ang. snap-in) prezentuje hierarchiczny widok obiektw programu usugowego wraz z dziaaniami, ktre mona podj dla kadego z nich. Aby wywoa konsol MMC dla IIS, wybierz Menedera usug internetowych z IIS firmy Microsoft pokazanego na rysunku 2.2, a wtedy zobaczysz konsol zarzdzania pokazan na rysunku 2.3.

33

ASP Kompendium

programisty

Rysunek 2.3. Konsola zarzdzania MMC z moduem dodatkowym IIS w uyciu Po lewej stronie znajduje si modu dodatkowy IIS prezentujcy list hierarchiczn obiektw. Rozwijania i zwijania listy dokonujesz podobnie jak w oknie Eksploratora Windows, przez kliknicie znakw plus lub minus. Kiedy klikniesz jeden z obiektw po lewej stronie okna, po prawej uka si wszystkie znajdujce si w nim pozycje. Kady obiekt moe zawiera dziaania (akcje), ktre podejmuje si dla tego obiektu. Moesz przegldn list dziaa dla obiektu wybierajc go i klikajc przycisk Dziaanie (Action) znajdujcy si w pasku narzdziowym, co pokazano na rysunku 2.4.

Rysunek 2.4. Menu Dziaanie w konsoli MMC

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

34

Kady obiekt posiada rwnie Waciwoci (Properties), ktre s atrybutami obiektu. Aby przejrze waciwoci obiektu, kliknij obiekt prawym przyciskiem myszy i wybierz Waciwoci (Properties). Przegldu waciwoci moesz dokona rwnie klikajc przycisk Dziaanie (Action) i wybierajc Waciwoci (Properties) lub naciskajc ikon Waciwoci (Properties) w pasku narzdziowym. Modu dodatkowy w pasku narzdziowym zapewnia rwnie realizacj innych funkcji, ktre nie odnosz si do okrelonego obiektu. Na przykad moesz przejrze zawarto Monitora wydajnoci lub Programu przegldu zdarze, wybierajc odpowiedni ikon na pasku narzdziowym.

Waciwoci usug WWW


Internetowy serwer informacyjny zawiera w sobie midzy innymi usug WWW. Ta usuga ma waciwoci, ktre moesz modyfikowa wpywajc na sposb jej konfiguracji. Usuga ta zawiera wiele waciwoci, ktre s rwnie waciwociami danej witryny WWW. Kiedy tworzysz now witryn WWW, waciwoci uyte przy jej tworzeniu s dziedziczone przez usug WWW, tak wic konfiguracja usugi ju na samym pocztku oszczdzi ci mnstwa czasu i pracy, jeli na twoim serwerze znajduje si wiele witryn WWW. Aby otworzy okno waciwoci Usugi WWW w konsoli MMC, kliknij prawym przyciskiem myszy nazw komputera zawierajcego t usug, ktr chcesz skonfigurowa, a nastpnie wybierz Waciwoci (Properties). Zobaczysz okno dialogowe pokazane na rysunku 2.5.

Rysunek 2.5. Dialog wyboru Waciwoci gwnych Zwr uwag na pole wyboru Umoliwiaj dawienie przepustowoci (Enable Bandwidth Throttling). Jeli zaznaczysz to pole, udostpnione zostanie pole tekstowe znajdujce si poniej. Moesz w nim okreli warto przepustowoci sieci, ktr chcesz wykorzysta dla usugi. Ta warto jest wartoci maksymaln, a nie zarezerwowanym poziomem przepustowoci oznacza to, e niezalenie od dostpnego aktualnie pasma przepustowoci, twoja usuga moe zaj maksymalnie tak jej warto, jak okrelono w polu tekstowym.

35

ASP Kompendium

programisty

Waciwoci witryny WWW


W polu Waciwoci gwne (Master Properties) wybierz Usug WWW i kliknij przycisk Edytuj (Edit). Teraz powiniene ujrze okno dialogowe waciwoci gwnych dla Usugi WWW, jak to pokazano na rysunku 2.6.

Rysunek 2.6. Waciwoci Usugi WWW Upewnij si, czy poruszasz si po zakadce o nazwie Witryna WWW (Web Site). Pierwsz rzecz, jak moesz tam wprowadzi jest opis usugi. Nie ma on wpywu na funkcjonowanie usugi, a suy jedynie twojej wasnej identyfikacji. W samym rodku okna waciwoci moesz skonfigurowa poczenia. Tutaj moesz zezwoli na rwnoczesne poczenie z twoim serwerem IIS nieograniczonej liczby odwiedzajcych lub moesz j ograniczy. Moesz rwnie okreli Czas rozczenia (Connection Timeout). Warto ta okrela czas (w sekundach), przez ktry uytkownik moe pozostawa nieaktywny przed przerwaniem poczenia z twoj usug WWW. W dolnej czci okna waciwoci moesz zdecydowa, czy chcesz umoliwi rejestracj, a jeli tak, to jaki ma by jej typ. Rejestracja w Usudze WWW pozwala na ledzenie poczyna uytkownika na twojej witrynie. Jeli opcja rejestracji jest zaznaczona, kade danie dostpu od serwera WWW jest odnotowywane jako kolejna pozycja w bazie danych lub pliku tekstowym. Wprowadzane zapisy mog zawiera dat i czas dostpu, adres IP komputera wysyajcego danie, plik bdcy obiektem zainteresowania i wiele wicej. Posiadasz cztery moliwoci wyboru formatu dziennika zdarze: format pliku dziennika serwera IIS Microsoftu, wsplny format NCSA, rozszerzony format W3C oraz format dziennika ODBC. Format pliku dziennika zdarze serwera IIS Microsoftu jest specyficznym formatem uywanym jedynie przez IIS. Plik dziennika jest tekstowym plikiem ASCII. Kiedy klikniesz waciwoci pliku tego typu, moesz wybra jego lokalizacj i okreli czsto generowania nowego pliku. Wsplny format pliku dziennika NCSA jest spotykany na serwerach internetowych, ktre nie nale do wiata Microsoftu. Moesz potrzebowa tego typu formatu podczas korzystania z niezalenego narzdzia analizy pliku dziennika. Rozszerzony format pliku dziennika zdarze W3C jest podobny do poprzedniego formatu NCSA, ale posiada dodatkowe pola wykorzystywane podczas ledzenia. Moesz rwnie wybra, w ktrych polach chcesz gromadzi informacje, a w ktrych nie. Jeli naciniesz przycisk Waciwoci (Properties) dla tego typu

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

36

dziennika, ujrzysz okno Rozszerzonych waciwoci rejestracji (Extended Logging Properties), pokazane na rysunku 2.7.

Rysunek 2.7. Okno dialogowe Rozszerzonych waciwoci rejestracji Klikajc zakadk Rozszerzone waciwoci (Extended Properties) zobaczysz rne pola z nazwami zdarze, ktre moesz obserwowa. Pole Nazwa uytkownika (User Name) jest prezentowane tylko wtedy, gdy dana osoba aktualnie jest zarejestrowana na twoim serwerze. Jeli stron odwiedzon przez uytkownika na twojej witrynie bya http://www.somewhere.com/search.asp?query=VB, adresem URL byaby tutaj cz www.somewhere.com/search.asp, a query=VB polem zapytania URI. Pole Agent uytkownika (User Agent) zawiera informacje o przegldarce, ktra wystosowaa danie dostpu. Pole Odsyacz (Referrer) zawiera nazw strony, ktr poprzednio odwiedzi uytkownik, jeli posiadaa ona cze ze stron aktualnie odwiedzan, z ktrego skorzysta uytkownik oraz jeli przegldarka obsuguje to pole. Jeli dany element strony to grafika, wtedy pole odsyacza bdzie obejmowao nazw strony, na ktrej ta grafika si znajduje. Czwartym typem rejestracji jest rejestracja ODBC, ktra najbardziej obcia zasoby, ale daje ci wspaniae moliwoci analizy. Podczas rejestracji ODBC kade danie dostpu do twojego serwera jest odnotowywane w bazie danych. Korzystasz z waciwoci dla tego typu rejestracji w celu okrelenia nazwy DSN bazy danej, ktrej bdziesz uywa. Musisz najpierw stworzy tabel, w ktrej bd umieszczane zapisy da. Tabela ta musi by okrelonego formatu, jak to opisano dla SQL Server w tabeli 2.1. Tabela 2.1. Definicje pl tabeli rejestracji ODBC Nazwa pola Warto ClientHost Username LogTime Service Machine ServerIP ProcessingTime BytesRecvd BytesSent ServerStatus Win32Status Operation varchar(255) varchar(255) datetime varchar(255) varchar(255) varchar(50) int int int int int varchar(255)

37

ASP Kompendium

programisty

Target varchar(255) Parameters varchar(255) Po stworzeniu tabeli, bdziesz musia okreli nazw DSN poprzez Administratora rde danych ODBC, do ktrego nastpnie stworzysz odniesienie w oknie dialogowym rejestracji ODBC. Zobacz rozdzia 13, w ktrym znajdziesz dodatkowe informacje na temat tworzenia nazw DSN.
Przypis Poniewa rejestracja wymaga si zapisywania da do pliku lub bazy danych, korzysta si z zasobw. Jeli nie uywasz rejestracji, zasoby te moesz wyczy.

Waciwoci zwizane z wydajnoci


Wybierz zakadk Wydajno (Performance) w oknie Waciwoci usugi WWW (WWW Service Properties), a zobaczysz okno przedstawione na rysunku 2.8.

Rysunek 2.8. Waciwoci wydajnoci usugi WWW Dostrajanie wydajnoci (Performance Tunning) okrela szacunkow liczb pocze w cigu dnia. Nie musisz ustala maksymalnego poziomu przewidywanych pocze, jeli nie jest ich zbyt wiele, poniewa wtedy nie wykorzystasz odpowiednio twoich zasobw. Zauwa, e pole wyboru Umoliwiaj dawienie przepustowoci (Enable Bandwidth Throttling) jest niedostpne. Ta waciwo moe by ustawiona jedynie dla konkretnej witryny WWW. Omwimy t waciwo pniej, w podrozdziale Waciwoci witryny WWW. Kiedy zaznaczone jest pole Umoliwiaj sprawdzenie aktywnoci HTTP (HTTP Keep-Alive Enable), przegldarka moe podtrzymywa poczenie przez kolejne dania dostpu do strony zamiast zestawia poczenie za kadym razem, kiedy pojawia si nowe danie dostpu. To pole jest zaznaczone domylnie.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

38

Waciwoci filtrw ISAPI


Jedn z najbardziej zaawansowanych funkcji IIS jest tworzenie filtrw ISAPI (ISAPI Filters), ktre pozwalaj na podjcie wasnych, dostowanych do twoich potrzeb dziaa podczas wystpienia niektrych zdarze zwizanych z IIS. Zamiast zwykego przetworzenia zdarzenia przez serwer IIS, moesz wybra inny program, ktry zajmie si tym zdarzeniem. Takie programy czsto napisane s w Visual C++ i rwnie czsto umoliwiaj dostosowanie procesu rejestracji. Jeli wic nie odpowiadaj ci formaty rejestracji omwione we wczeniejszym podrozdziale, moesz stworzy swj wasny. Aby to uczyni musisz doda filtr ISAPI w odpowiednim oknie zakadki. pokazanym na rysunku 2.9. Kliknij przycisk Dodaj (Add) i przegldnij pliki biblioteki. Kolejno pojawiania si tych filtrw jest znaczca, poniewa pierwszy znaleziony filtr zajmujcy si zdarzeniem jest uruchamiany przed wszystkimi innymi. Kiedy pliki te zostan zaadowane, pozostaj w pamici, uwaaj wic, aby nie zostay naduyte.

Rysunek 2.9. Okno dialogowe filtrw ISAPI

Waciwoci katalogu macierzystego


Nastpnie przeanalizujmy waciwoci Katalogu macierzystego (Home Directory), ktre pokazane zostay na rysunku 2.10.

39

ASP Kompendium

programisty

Rysunek 2.10. Waciwoci katalogu macierzystego usugi WWW Zauwa, e niektre punkty okna s niedostpne, poniewa nie maj one zastosowania w odniesieniu do usugi WWW, s natomiast omwione nieco dalej w tym rozdziale podczas analizy waciwoci witryn WWW oraz aplikacji ASP. Kiedy ustawiasz waciwoci usugi WWW pamitaj, e tworzone przez ciebie witryny WWW bd dziedziczy te waciwoci bd wic ostrony. Uprawnienia dostpu (Access permissions) okrelaj, co anonimowy uytkownik moe zrobi z plikami. Kiedy wybrano pole Odczyt (Read), moe on jedynie przeglda pliki. Jeli zaznaczono kratk Zapis (Write), odwiedzajcy mog przekazywa pliki do serwera. Moesz zaznaczy pole wyboru Dostp do pliku dziennika zdarze (Log access), aby wczy plik lub katalog do pliku dziennika. Jeli zaznaczono Przegldanie katalogu (Directory browsing), odwiedzajcy mog zobaczy zawarto katalogu w celu stwierdzenia, czy nie znajduje si w nim domylna strona. Zazwyczaj nie bdziesz chcia wybra tej opcji, poniewa odwiedzajcy mog znale stron na twojej witrynie posugujc si czami zamiast przeglda list stron twojej witryny. Jeli zaznaczysz pole wyboru Indeksuj biecy katalog (Index this directory), strony w witrynie lub katalogu bd podlegay automatycznego indeksowaniu, co spowoduje stworzenie bazy danych, ktra pozwoli uytkownikom przeszuka zawarto strony. Reszta waciwoci w tej zakadce zostanie omwiona w tym rozdziale nieco pniej.

Dokumenty
Zakadka waciwoci Dokumentw (Documents) usugi WWW ukazano na rysunku 2.11.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

40

Rysunek 2.11. Zakadka waciwoci dokumentw Kiedy wpisujesz adres sieciowy taki jak http://www.something.com, faktycznie jeste odsyany do konkretnej strony na witrynie, przykadowo http://www.something.com/index.html lub http://www.something.com/default.asp. Te strony nazywane s stronami domylnymi. Jeli nie okrelisz strony, do ktrej chcesz si dosta, serwer zakada, e dasz dostpu do domylnej strony w witrynie lub katalogu; na wielu serwerach istnieje taka ustalona nazwa, jak index.html. W serwerze IIS moesz okreli nawet kilka nazw stron domylnych. Robi si to przy uyciu przycisku Dodaj (Add) w zakadce Dokumenty (Documents). Gdy tylko nazwy zostan okrelone, moesz ustali kolejno, w ktrej IIS powinien przeglda strony domylne. Na przykad ustalajc kolejno tak jak na rysunku 2.11, IIS najpierw odszuka stron default.htm. Jeli jej nie znajdzie, w drugiej kolejnoci postara si odszuka stron default.asp. Jeli zaznaczysz pole Udostpnij stopk dokumentu (Enable document footer) i okrelisz nazw strony, IIS wstawi t stron na dole kadej innej wywoywanej strony. Mgby uy tej funkcji do automatycznego dodawania informacji o prawach autorskich do zawartoci wszystkich stron bez koniecznoci ich modyfikacji, okrelajc jedynie w polu stopki dokumentu nazw strony, w ktrej taka informacja si znajduje.

Bdy klienta
Zakadka waciwoci Bdw klienta (Customer Errors) pokazana zostaa na rysunku 2.12.

41

ASP Kompendium

programisty

Rysunek 2.12. Zakadka waciwoci Bdw klienta Kiedy prbujesz uzyska dostp do strony, ktra nie istnieje, otrzymasz wiadomo, ktra poinformuje ci o tym fakcie. Wikszo witryn WWW wywietla t wiadomo o bdzie w bardzo surowym formacie, ukazujcym jedynie numer bdu i jego opis. Inne witryny natomiast prezentuj bogatsz informacj o bdzie, ktra nie daje ci odczu, e nagle utkne nie posiadajc moliwoci wyjcia z sytuacji. IIS daje moliwo powrotu do dowolnej, okrelonej strony, kiedy wystpi jaki bd. Na przykad zamiast prezentowa odwiedzajcemu sztywn wiadomo, e strona nie zostaa odnaleziona, by moe zechcesz da im moliwo poszukania tej strony na twojej witrynie, lub udostpnisz im kontakt, przez ktry bd mogli poinformowa ci o martwym czu. Moesz okreli nazw strony, ktr chcesz wywietla, dokonujesz naciskajc przycisk Edytuj waciwoci (Edit Properties), podwietlajc najpierw ten numer bdu, przy wystpieniu ktrego strona ma by wywietlona.

Witryny WWW w serwerze IIS


Jak wida na rysunku 2.13, na serwerze IIS moesz mie wiele witryn WWW. Witryny na IIS s zaznaczone ikon, ktra przedstawia do trzymajc glob ziemski. W poprzednim przykadzie zainstalowanych byo siedem witryn WWW: Default Web Site, Administration Web Site, NetStats2000, Travel Science, WindowsNTExpert, NationsInstitute oraz Invitations4Less.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

42

Rysunek 2.13. Witryny WWW w serwerze IIS Zauwa, e nastpna kolumna po opisie witryny nosi nazw stanu. Ta kolumna zawiera informacje o tym, czy dana witryna aktualnie jest uruchomiona, spauzowana lub zatrzymana. Witryna uruchomiona jest osigalna dla obecnych i nowych pocze; spauzowan mog obejrze tylko ci, ktrzy ju s poczeni; zatrzymana witryna jest wyczona i niedostpna dla adnych pocze. Aby uruchomi, zatrzyma bd spauzowa witryn WWW, kliknij prawym przyciskiem myszy witryn w prawej poowie konsoli MMC, a nastpnie wybierz Uruchom (Start), Zatrzymaj (Stop) bd Przerwij (Pause), jak pokazano na rysunku 2.14. Tego samego dokona mona w menu Dziaanie (Action) lub w pasku narzdziowym, wybierajc odpowiedni ikon.

Rysunek 2.14. Uruchamianie, zatrzymywanie i pauzowanie witryny WWW

43

ASP Kompendium

programisty

Dodawanie witryny WWW


Moesz doda witryn WWW do serwera IIS przy uyciu Kreatora nowych witryn WWW. Dostp do kreatora uzyskuje si klikajc prawym przyciskiem myszy ten komputer z listy, na ktrym chcesz umieci witryn, a nastpnie wybierajc pozycj Nowy (New) i Witryna WWW (Web Site), tak jak pokazano na rysunku 2.15.

Rysunek 2.15. Wybr Kreatora nowych witryn WWW Kreator przeprowadzi ci przez proces dodawania nowej strony do serwera IIS. Pierwszym krokiem bdzie wpisanie nazwy witryny (Rysunek 2.16). Ta nazwa bdzie suya identyfikacji witryny. W drugim kroku dokonasz konfiguracji adresu IP oraz numeru portu dla tej witryny WWW (Rysunek 2.17).

Rysunek 2.16. Pierwszy krok Kreatora nowych witryn WWW

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

44

Rysunek 2.17. Drugi krok Kreatora nowych witryn WWW Po pierwsze naley wybra adres IP dla twojego serwera. Jeli serwer posiada pojedynczy adres IP, moesz jego warto wybra z listy. Jeli serwer posiada wicej ni jeden adres IP, bdziesz musia wiedzie, pod ktrym z nich zarejestrowana jest twoja nazwa domeny. Jeli tego nie wiesz, skontaktuj si z twoim dostawc Internetu bd administratorem sieci w celu zasignicia takich informacji. Jak si przekonasz pniej, jedn z najbardziej znaczcych zmian dokonanych w IIS wersji 4 jest moliwo umieszczenia wielu witryn WWW pod jednym adresem IP tak wic rzeczywicie bdziesz potrzebowa tylko jednego adresu IP. Numery portw powinny by pozostawione bez zmian. Znajduj si tam domylne wartoci, ktre wysya przegldarka. Jeli wpiszesz inne numery portw, odwiedzajcy witryn bd musieli zna te wartoci, aby uzyska do niej dostp. Jeli przykadowo nie zmienisz numeru portu TCP, gocie mogliby odwiedza stron http://www.somewhere.com. Jeli zmienisz ten numer na 9269, to gocie bd musieli dodawa ten numer do adresu. Bdzie on wyglda nastpujco: http://www.somewhere.com:9269. Zazwyczaj nie dokonuje si zmiany numeru, poniewa byoby to kopotliwe dla twoich goci, ktrzy rzadko wprowadzaliby ten numer. Jest to jednak technika pozwalajca na zrnicowanie sposobw dostpu do serwera sieciowego bez koniecznoci posiadania dodatkowej domeny. W ten sposb mona na przykad administrowa serwerem IIS zdalnie poprzez sie WWW. Robi si to przy uyciu zwykej nazwy domeny uzupenionej odpowiednim numerem portu. W trzecim kroku kreatora okrelasz fizyczne pooenie plikw witryny na twoim serwerze, co pokazano na rysunku 2.18.

45

ASP Kompendium

programisty

Rysunek 2.18. Trzeci krok Kreatora nowych witryn WWW Nacinij przycisk Przegldaj (Browse) aby wybra katalog, ktry zawiera najwyszy poziom witryny WWW. Wszystkie pliki witryny musz by umieszczone w tym katalogu i jego podkatalogach, chyba e stworzysz katalog wirtualny, omwiony dalej w tym rozdziale. Katalogiem najwyszego poziomu moe by kady katalog na twoim serwerze. Jeli zaznaczysz pole Zezwl na dostp anonimowy (Allow anonymous access), kady go bdzie mg dosta si do plikw tej witryny; w innym wypadku go bdzie musia posiada konieczne uprawnienia dostpu do tego katalogu.
Przypis Moesz modyfikowa wartoci ustawione podczas pracy kreatora rwnie pniej, przegldajc waciwoci danej witryny.

W ostatnim kroku kreatora dokonujesz wyboru uprawnie dostpu do witryny WWW. (Rysunek 2.19). Jeli zaznaczysz pole Zezwl na odczyt (Allow Read Access), odwiedzajcy bd mogli przeglda zawarto witryny. Kiedy zaznaczysz pole Zezwl na dostp do skryptu (Allow Script Access), wtedy skrypty takie jak ASP mog by uruchamiane na tej witrynie. Zauwa jednak, e moesz umieci twoje skrypty w jednym folderze, a nastpnie zezwoli na ich uruchamianie jedynie w tym folderze, nie na caej stronie.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

46

Rysunek 2.19. Czwarty krok Kreatora nowych witryn WWW Zaznaczenie pola Zezwl na uruchamianie (Allow Execute Access) umoliwi aktywacj plikw wykonywalnych poprzez witryn WWW. To pole nie jest zaznaczane zbyt czsto, poniewa moesz nie chcie, aby twoi gocie uruchamiali aplikacje przez Internet. Jeli zaznaczysz pole Zezwl na zapis (Allow Write Access), odwiedzajcy bd mogli przekazywa pliki do witryny. Zaznaczenie pola wyboru Zezwl na przegldanie katalogu (Allow Directory Browsing) umoliwi gociom zobaczenie listy nazw wszystkich plikw w kadym z katalogw witryny WWW. Kiedy klikniesz przycisk Zakocz (Finish) strona, ktr utworzye, jest dodawana do serwera IIS i powinna by widoczna w oknie konsoli MMC. Zauwa jednak, e po dodaniu witryny jest ona wyczona. Bdziesz musia j uaktywni klikajc jej ikon prawym przyciskiem myszy i wybierajc Uruchom (Start). Po tej ostatniej operacji, twoja witryna powinna by ju dostpna.

Waciwoci witryny WWW


Wiele waciwoci witryny WWW jest dziedziczonych przez waciwoci, ktre ustawie w usudze WWW opisanej wczeniej. Jeli zmodyfikujesz je na poziomie witryny, wtedy waciwoci witryny zastpi waciwoci dziedziczone. W tym podrozdziale dokonamy przegldu niektrych waciwoci witryn WWW, a cz nie podanych tutaj informacji znajdziesz nieco wczeniej.

Wiele witryn pod jednym adresem IP


Now funkcj serwera IIS wersji 4.0 jest zdolno odwzorowywania wicej ni jednej witryny od jednym adresem IP. Aby to zrealizowa, naley wykona czynnoci przedstawione poniej dla wszystkich witryn umiejscowionych pod jednym adresem IP. Kliknij prawym przyciskiem myszy witryn w oknie konsoli MMC i wybierz Waciwoci (Properties). Wybierz zakadk Witryna WWW (Web Site), a wtedy pokae si odpowiedni arkusz przedstawiony na rysunku 2.20.

47

ASP Kompendium

programisty

Rysunek 2.20. Waciwoci witryny WWW Teraz nacinij przycisk Zaawansowane (Advanced). Zobaczysz okno dialogowe, takie jak na rysunku 2.21. Zauwa, e zapis znajdujcy si pod hasem Wielorakie tosamoci dla witryny WWW (Multiple identities for this Web Site) wyszczeglnia adres IP oraz numer portu, nie zawiera natomiast Nazwy nagwka komputera macierzystego (Host Header Name), ktra jest nazw domeny tej witryny. W to pole musimy wpisa odpowiedni warto. Nacinij Przycisk Edytuj (Edit) w celu wywietlenia tego zapisu, a wtedy zobaczysz kolejne okno dialogowe pokazane na rysunku 2.22.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

48

Rysunek 2.21. Zaawansowane waciwoci witryny WWW

Rysunek 2.22. Okno dialogowe zaawansowanej identyfikacji witryny WWW Wprowad nazw domeny w pole tekstowe Nazwy nagwka komputera macierzystego (Host Header Name) i nacinij OK. Teraz kiedy serwer IIS otrzyma danie dostpu do tej domeny, skieruje danie do waciwej witryny, pomimo e wiele witryn WWW jest umieszczonych pod jednym adresem IP.

Zakadka waciwoci witryny WWW


Zwr uwag na inne waciwoci przedstawione w oknie na rysunku 2.20. Moesz zmodyfikowa nazw witryny WWW, ktrej uywasz do jej identyfikacji.

49

ASP Kompendium

programisty

Moesz rwnie okreli maksymaln liczb pocze z witryn w danym czasie. Jest to uyteczne w scenariuszu wielorakich domen, w ktrym moesz pobiera opaty za umieszczenie witryny WWW na podstawie maksymalnej iloci dopuszczalnych pocze. Moesz rwnie wybra sposb rejestrowania da witryny. Pamitaj o tym, e domylnie ustawiana jest tutaj ta warto, ktr wprowadzie we waciwociach usugi WWW.

Waciwoci katalogu macierzystego


Teraz wybierz zakadk Katalog macierzysty (Home Directory), jak to pokazano na rysunku 2.23. Pierwszym ustawieniem, jakiego moesz dokona tutaj, jest pooenie plikw danej witryny. Zalenie od tego, na co si zdecydujesz, tak zmieni si cz zakadki poniej.

Rysunek 2.23. Waciwoci katalogu macierzystego Jeli zdecydujesz si na umieszczenie witryny na tym komputerze, na ktrym aktualnie pracujesz, bdziesz mg wybra lokaln ciek oraz dowoln z poniej wyszczeglnionych waciwoci. Jeli wybierzesz katalog wspdzielony, zostaniesz zapytany o podanie nazwy serwera oraz folderu wspdzielonego w postaci \\ [serwer]\[udzia]. Moesz rwnie wybra readresowanie (redirection), co spowoduje, e podczas prby dostpu odwiedzajcego do twojej witryny, zostanie on odesany do jakiego innego miejsca w Internecie. Kiedy zdecydujesz si na t opcj, zostaniesz poproszony o podanie adresu URL, do ktrego nastpi przekierowanie. Nie moesz wtedy jednak ustawi innych waciwoci w tej zakadce. Ustawienia aplikacji (Applications Settings) zostay omwione w podrozdziale Waciwoci aplikacji w dalszej czci tego rozdziau.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

50

Eksploracja witryny
Teraz, kiedy ju dodae i skonfigurowae witryn WWW, moesz przeglda zawarto strony w podobny sposb, jak robi si to przy uyciu Eksploratora Windows. Moesz rozwija list katalogw, jak to pokazano na rysunku 2.24.

Rysunek 2.24. Eksploracja witryny WWW

Katalogi wirtualne
Moesz przejrze zawarto kadego folderu twojej witryny. Te pliki i foldery odpowiadaj plikom i folderom logicznym, ktre znajduj si w strukturze katalogu macierzystego tej witryny. Moesz rwnie stworzy katalogi wirtualne. Katalogi wirtualne s folderami, ktre znajduj si poza fizyczn struktur katalogw witryny WWW, ale chcesz je wczy do witryny. Przypumy na przykad, e masz witryn zawierajc podkatalogi html i script. Adresujesz te katalogi poprzez okrelenie nazwy domeny, po ktrej nastpuje nazwa odpowiedniego podkatalogu: http://www.somewhere.com/html/welcome.html. Posiadasz jednak na serwerze inny katalog zawierajcy pliki video, ktre chcesz udostpni poprzez witryn WWW w katalogu o nazwie avi. W biecej konfiguracji pliki te nie s dostpne dla twojej witryny, poniewa znajduj si poza jej fizyczn struktur katalogw. Moesz jednak stworzy katalog wirtualny wskazujcy katalog avi, ktry w ten sposb zostanie wczony w logiczn struktur twojej witryny. Aby stworzy katalog wirtualny, kliknij prawym przyciskiem myszy ikon witryny bd folderu, gdzie katalog wirtualny ma by dodany i wybierz Nowy (New), a nastpnie Katalog wirtualny (Virtual Directory), jak to pokazano na rysunku 2.25. W ten sposb uruchomisz Kreatora nowego katalogu wirtualnego (New Virtual Directory Wizard). Jego pierwsze okno prezentuje rysunek 2.26.

51

ASP Kompendium

programisty

Rysunek 2.25. Dodawanie katalogu wirtualnego

Rysunek 2.26. Kreator nowego katalogu wirtualnego krok pierwszy Pierwsz rzecz, jak naley wprowadzi jest nazwa dla katalogu wirtualnego, ktra bdzie widoczna na twojej witrynie WWW. Innymi sowy, jeli katalog fizyczny nosi nazw PublicVideos, ale ty chcesz aby nazwa ta podczas dostpu do strony brzmiaa Videos, tak wanie nazw wpiszesz w polu tekstowym pierwszego okna kreatora. W drugim kroku kreatora okrelisz fizyczne pooenie katalogu wirtualnego (Rysunek 2.27). Nacinij przycisk Przegldaj (Browse) i ustal lokalizacj katalogu fizycznego.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

52

Rysunek 2.27. Kreator nowego katalogu wirtualnego krok drugi W kroku trzecim (Rysunek 2.28) moesz okreli uprawnienia dostpu do katalogu wirtualnego. Nastpnie nacinij przycisk Zakocz (Finish). Od tej pory nowy katalog wirtualny, fizycznie umiejscowiony poza twoj witryn, staje si dostpny dla odwiedzajcych.

Rysunek 2.28. Kreator nowego katalogu wirtualnego krok trzeci

Waciwoci folderu i pliku


Dowiedziae si ju, w jaki sposb ustawia waciwoci dla samej usugi WWW. Wiesz rwnie, jak to samo zrobi z poszczeglnymi witrynami, ktrych waciwoci s dziedziczone z usugi WWW. Teraz dowiemy si jak ustawia waciwoci konkretnych folderw i plikw witryny. Dostp do waciwoci uzyskuje si klikajc

53

ASP Kompendium

programisty

dany folder prawym przyciskiem i wybierajc Waciwoci (Properties). Powiniene wtedy ujrze okno dialogowe pokazane na rysunku 2.29.

Rysunek 2.29. Waciwoci folderu Waciwoci folderu s dziedziczone przez waciwoci witryny WWW, dlatego zwykle nie trzeba ich ustawia. Dziki nim jednak masz moliwo precyzyjnej konfiguracji twojej witryny. Moesz na przykad przeznaczy jeden folder na przechowywanie skryptw. W takim wypadku ustalisz dla niego uprawnienia skryptu. Jeli chcesz rejestrowa dostp do pojedynczego folderu, zrobisz to poprzez Waciwoci folderu. Kady plik folderu rwnie posiada swoje waciwoci. S one pokazane na rysunku 2.30. Waciwoci pliku s dziedziczone z waciwoci folderu, tak wic hierarchia dziedziczenia przedstawia si nastpujco: usuga WWW, witryna WWW, folder, a na kocu plik.

Aplikacje ASP
Zmienne trwae i zakresowe
Aplikacja ASP to wymylna nazwa, ktra okrela po prostu grup stron ASP ulokowanych w jednej strukturze katalogu, z ktrymi pracowa moesz podobnie jak z aplikacj. Sama strona ASP jest jednostk oddzieln, podobn do wyspy, ktra nie dzieli si informacjami zapamitanymi w zmiennych z innymi stronami ASP. Strona bdca czci aplikacji ASP moe wspuytkowa i przetrzymywa zmienne trwae poza pojedyncz stron oraz zapamitywa dane zakresowe poza ni. Przez zmienne trwae rozumiemy takie zmienne, ktre pozostaj dostpne po wyczeniu strony. Zmienne zakresowe to takie zmienne, ktre s widoczne rwnie poza t stron, ktra z nich korzysta. Tak wic przy uyciu aplikacji ASP moesz stworzy zmienne, ktre bd istniay po opuszczeniu strony przez odwiedzajcego oraz zmienne widoczne dla innych stron aplikacji. Zamy, e masz dobrze zabezpieczon stron i chcesz, aby odwiedzajcy logowali si na witrynie, zanim bd mogli zobaczy ktrkolwiek ze stron. Maj logowa si na pojedynczej stronie, a ty musisz by powiadomiony przez inne strony o fakcie logowania. Zrealizujesz to przy uyciu aplikacji ASP, poniewa

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

54

moesz w niej stworzy zmienn UserID zapamitujc numer identyfikacyjny uytkownika. Jeli numer znajdzie si w zmiennej, bdziesz wiedzia jaki uytkownik logowa si na witrynie. W rozdziale pierwszym przyjrzelimy si stronie quizu. Strona pozwalaa gociom odpowiada na kolejne pytania, a my otrzymywalimy ich wyniki. Byo to realizowane przez pojedyncz stron. Jeli chcielibymy rozwin to narzdzie, potrzebowalibymy dodatkowych stron w celu ewentualnego formatowania pytania. By moe pozwolilibymy przeglda odpowiedzi na innej stronie. Strony musiayby wtedy przekazywa sobie informacje dotyczce testu, jego wynikw itd. Aby to osign, potrzebujemy aplikacji ASP. Moe chcesz stworzy program usugowy, ktry pozwalaby na ledzenie poczyna odwiedzajcego witryn, jego przejcia pomidzy stronami. Bdziesz wtedy musia w jaki sposb identyfikowa danego odwiedzajcego, aby odpowiedni zapis umieci w jakiej tabeli wykorzystania witryny. Taka zmienna identyfikacji, ktra mogaby si nazywa ConnectionID, byaby przekazywana pomidzy stronami. Aplikacja ASP pozwoli na realizacj tego typu zadania.

Zdarzenia
Zdarzeniami nazywa si kody, ktre stanowi odpowied na podejmowane na stronie dziaania. Na przykad, w Visual Basic klikniciu przycisku odpowiada zdarzenie Click; kiedy uytkownik nie wypeni pola tekstowego, uruchamiane jest zdarzenie Lost Focus. Konkretne dziaanie uytkownika pociga za sob wystpienie zdarzenia. Moesz napisa kod, ktry zostanie uruchomiony po wywoaniu zdarzenia. Kiedy odwiedzajcy kliknie przycisk, by moe zamknie si formularz lub kiedy zostawi puste pole tekstowe, moliwe, e wtedy zostanie uruchomiony kod zatwierdzajcy jego wejcie. Jak si dowiemy szerzej z rozdziau smego przy okazji omawiania pliku global.asa, uywajc aplikacji ASP dysponujesz czterema zdarzeniami, po wystpieniu ktrych moesz uruchomi napisany przez siebie kod. Moesz napisa kod dla zdarzenia Application_OnStart. Kod tej procedury dziaa za kadym razem, kiedy twoja aplikacja ASP jest uruchamiana. Uruchomienie aplikacji nastpuje w chwili, kiedy pierwszy odwiedzajcy uzyskuje dostp do strony ASP. Moesz stworzy kod dla zdarzenia Session_OnStart. To zdarzenie dziaa, kiedy odwiedzajcy przeglda pierwsz stron ASP. Rni si ono tym od Application_OnStart, e jest uruchamiane dla wszystkich goci strony, a nie jedynie dla pierwszego z nich. Kolejnym zdarzeniem jest Session_OnEnd. Uruchamiane jest w chwili, gdy poczenie odwiedzajcego z twoj witryn koczy si. Zdarza si to szczeglnie wtedy, gdy czas sesji odwiedzajcego upywa lub kiedy ustawie koniec sesji programowo. Ostatnim zdarzeniem dostpnym w aplikacji ASP to zdarzenie Application_OnEnd. Kod procedury uruchamiany jest w chwili, kiedy praca witryny WWW, ktrej cz stanowi aplikacja ASP, zostaje zatrzymana.

Tworzenie aplikacji ASP


Teraz, kiedy ju wiesz po co tworzy si aplikacje ASP, przyjrzyjmy si jak zrealizowa to zadanie przy uyciu serwera IIS. Jak wspomniano wczeniej, aplikacje ASP skadaj si z katalogw oraz wszystkich znajdujcych si w nich podkatalogw. Katalog moe by czci jednej tylko aplikacji ASP, tak wic jeli katalog gwny jest skadnikiem innej aplikacji, a ty tworzysz now aplikacj przy uyciu tego katalogu, staje si on jej czci. Uywajc konsoli MMC, kliknij prawym przyciskiem myszy katalog zawierajcy pliki, ktre maj stanowi aplikacj ASP i wybierz Waciwoci (Properties). Upewnij si, czy poruszasz si po zakadce Katalogi (Directories), powinna ona wyglda tak jak ta na rysunku 2.31.

55

ASP Kompendium

programisty

Rysunek 2.31. Waciwoci katalogu Obszarem, ktry bdziemy wykorzystywa znajduje si w dolnej czci okna pod nazw Ustawienia aplikacji (Application Settings). Kliknij przycisk Utwrz (Create), a wtedy uaktywnione zostanie pole nazwy aplikacji (Rysunek 2.32).

Rysunek 2.32. Okno waciwoci katalogu z uaktywnionym polem nazwy

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

56

Wpisz nazw twojej aplikacji ASP w polu tekstowym Nazwa (Name). Podana nazwa bdzie suya twojej wasnej identyfikacji. Po naciniciu OK aplikacja ASP zostaje stworzona. Zauwa, e ikona katalogu zmienia si z folderu na pole z maym, zielonym iksem w rodku. Aby usun aplikacj ASP, po prostu wr do waciwoci katalogu i nacinij przycisk Usu (Remove).

Konfigurowanie aplikacji ASP


Zwr uwag na pole wyboru Uruchom w osobnej przestrzeni pamici (proces izolowany) (Run in separate memory space (isolated process)). Jeli jest ono zaznaczone, twoja aplikacja ASP bdzie dziaaa poza serwerem IIS. Kiedy wic twoja aplikacja spowoduje jaki powany problem i bdzie musiaa by zamknita, nie spowoduje to zawieszenia dziaania innych aplikacji czy samego serwera IIS. Negatywnym aspektem zaznaczenia tego pola jest konieczno wykorzystania dodatkowych zasobw. Aby przejrze inne opcje konfiguracyjne dla aplikacji, kliknij przycisk Konfiguracja (Configuration) znajdujcy si we waciwociach katalogu, a wtedy zobaczysz okno dialogowe, ktre prezentuje rysunek 2.33.

Rysunek 2.33. Odwzorowania aplikacji Pierwsza zakadka zawiera Odwzorowania aplikacji (App Mappings). Te odwzorowania informuj IIS o tym, jakie programy wspierajce uruchomi, kiedy strona o okrelonym rozszerzeniu zostaje wywoywana. Kliknij na przykad rozszerzenie .asp znajdujce si na licie i wybierz Edytuj (Edit). Powiniene wtedy ujrze okno ustawie pokazane na rysunku 2.34.

57

ASP Kompendium

programisty

Rysunek 2.34. Odwzorowanie rozszerzenia aplikacji Pierwsze pole okna zawiera nazw programu, ktry bdzie przetwarza stron. W drugim polu znajduje si rozszerzenie, ktre musi mie strona, aby moga zosta przetworzona przez okrelony program wykonywalny. W trzecim polu moesz wpisa dowoln metod HTTP, ktrej nie chcesz uruchamia wraz z programem wykonywalnym. Dla ASP bdziesz mg zaznaczy w polu wyboru, e jest to modu skryptu. Pole wyboru Sprawd czy plik istnieje (Check that file exist) nie jest potrzebna przy ASP.
Przypis Jeli kiedykolwiek znajdziesz si w takiej sytuacji, e podczas prby wywietlenia strony ASP ujrzysz jedynie sam kod ASP, prawdopodobnie brak jest odpowiedniego zapisu w oknie pokazanym na rysunku 2.34. Musisz go doda do twoich Odwzorowa aplikacji.

Przejd teraz do drugiej zakadki okna Opcji aplikacji (App Options), pokazanego na rysunku 2.35.

Rysunek 2.35. Opcje aplikacji

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

58

Pierwsz rzecz, jak moesz zrobi w tej zakadce to uaktywnienie stanu sesji. Jak wspomniano we wczeniejszym podrozdziale, pojcie stanu odnosi si do moliwoci zapamitywania zmiennych, ktre s widoczne dla wszystkich stron poza biec stron aplikacji. Aby na to zezwoli, musisz uaktywni stan sesji. Wtedy bdziesz mg ustali czas trwania sesji. Ta warto przedstawia w minutach czas, po upyniciu ktrego sesja odwiedzajcego uwaana jest za zakoczon. Jeli warto ta bdzie wynosi 20 minut, to przed upywem tego czasu odwiedzajcy bdzie musia przej do nastpnej strony. W przeciwnym razie wszystkie informacje sesji zostan utracone. Jeli zaznaczono pole Uaktywnij buforowanie (Enable buffering), strona ASP bdzie musiaa zakoczy cae przetwarzanie przed wysaniem wyniku w postaci HTML do przegldarki. Zaznaczenie pola wyboru Uaktywnij cieki nadrzdne (Enable parent paths) pozwala na adresowanie wzgldne katalogu nadrzdnego. Pole Domylnego jzyka ASP (Default ASP language) okrela skrypt, z ktrego korzysta twoja strona ASP. Pole Czas trwania skryptu ASP (ASP Script timeout) zapamituje czas w sekundach, w ktrym strona musi wykona cay swj kod, inaczej nastpi jej wyczenie. Moe tak si zdarzy z wielu powodw: serwer moe by zbyt zajty, ilo danych zwracanych jest zbyt dua lub kod natrafi na nie koczc si ptl. Trzecia zakadka zawiera opcje usuwania bdw (Rysunek 2.36).

Rysunek 2.36. Opcje usuwania bdw aplikacji ASP Jeli zaznaczysz opcj Usuwanie bdw skryptu po stronie serwera (Server-Side Script Debugging), moesz ustawi punkty kontrolne dla twojego kodu i zatrzyma jego wykonywanie, a wtedy debugger przystpi do jego analizy. Usuwanie bdw zostao omwione szerzej w rozdziale 12. Opcja Usuwanie bdw skryptu po stronie klienta (Client-Side Script Debugging) nie ma w tej chwili znaczenia. Pniejsze wersje serwera IIS mog korzysta z tej opcji. Kiedy w twoim kodzie pojawi si bd, przegldarce wysyana jest wiadomo. Moe ona zawiera dokadne informacje obejmujce numer bdu, opis oraz lini kodu, w ktrej wystpi. Aby skorzysta z tej funkcji, zaznacz pole Szczegowa wiadomo o bdzie (Detailed error message). Drug moliwoci jest tutaj wywietlenie oglnej wiadomoci tekstowej.

59

ASP Kompendium

programisty

Witryny FTP
Oprcz witryn WWW, na serwerze IIS mog rwnie znajdowa si witryny FTP, ktre umoliwiaj atwe pobieranie i przekazywanie plikw serwera. Domylna witryna FTP jest instalowana wraz z serwerem IIS. Aby zainstalowa now witryn FTP kliknij prawym przyciskiem myszy ikon komputera, na ktrym ma si ona znale, a nastpnie wybierz Nowy (New) i Witryna FTP (FTP Site). Konfiguracji nowej witryny FTP dokonuje si poprzez okno Waciwoci (Properties), ktre pojawi si, kiedy klikniesz ikon witryny prawym przyciskiem myszy. Wygld okna prezentuje rysunek 2.37.

Rysunek 2.37. Waciwoci witryny FTP Zauwa, e podobnie jak to byo w wypadku waciwoci usugi WWW, rwnie waciwoci usugi FTP s dziedziczone przez witryny FTP. W tej pierwszej zakadce ustalasz informacje suce identyfikacji witryny. Moesz ustali rwnie maksymaln liczb pocze, a take czas rozczenia. Czas rozczenia (Timeout) okrela w sekundach, kiedy nastpi rozczenie uytkownika, ktry pozostaje nieaktywny. Tak jak w wypadku witryn WWW, moesz monitorowa korzystanie z witryny FTP. Jeli klikniesz przycisk Biece sesje (Current Sessions), ujrzysz list aktualnych uytkownikw witryny. W zakadce Konta bezpieczestwa (Security Accounts), pokazanej na rysunku 2.38 okrelisz, kto bdzie mg uzyskiwa dostp do witryny FTP.

Rozdzia 2 Serwer IIS widziany z perspektywy twrcy stron

60

Rysunek 2.38. Konta bezpieczestwa FTP Jeli wybierzesz Dostp anonimowy (Anonymous Access), kady bdzie mg korzysta z twojej witryny FTP. Prawdopodobnie zezwolisz na dostp do witryny jedynie niektrym odwiedzajcym. Moesz to zrobi w dolnej czci zakadki. Inne waciwoci witryny FTP pozwalaj na okrelenie powitania i poegnania, ktre bd widoczne dla odwiedzajcych witryn. Moesz rwnie okreli nazw fizycznego katalogu, ktry bdzie peni rol punktu wejcia. Ponadto moesz odrzuci bd zaakceptowa niektre adresy IP.

Rozdzia 3. Narzdzia pracy


Przegld aplikacji do tworzenia stron
W tym rozdziale przyjrzymy si narzdziom, z ktrych moesz skorzysta podczas tworzenia witryn WWW, kodu HTML, formularzy, a w szczeglnoci stron ASP. Nasze rozwaania rozpoczniemy od omwienia najbardziej podstawowego narzdzia, ktre powiniene ju posiada, Notatnika. Przekonasz si, e przy uyciu jedynie Notatnika moesz stworzy swoj wasn stron ASP. Nastpnie zwrcimy uwag na par innych narzdzi, ktrych moesz uy do tworzenia stron WWW. Te narzdzia, FrontPage 2000 i NetObjects Fusion, posiadaj szybki i intuicyjny interfejs do budowania witryn i stron. Przyjrzymy si rwnie dodawaniu elementw do stron przy uyciu tych narzdzi oraz tworzeniu formularzy. Potem skupimy si na narzdziach uywanych do tworzenia kodu stron ASP, a na samym pocztku bdzie to NetObjects ScriptBuilder 3.0. To narzdzie tworzenia zawiera wspaniay interfejs, ktry powoduje, e tworzenie blokw kodu jest niesamowicie proste. Przyjrzymy si rwnie Visual InterDev Microsoftu. Jeli jeste zaznajomiony z jakimkolwiek produktem serii Visual Studio, przyjemnie zaskoczy ci jego podobny ukad i funkcjonalno.

Notatnik
Jeli masz komputer z zainstalowanym systemem Windows jakiejkolwiek wersji, to ju posiadasz narzdzie do tworzenia stron ASP i pracy z nimi to narzdzie to Notatnik. Strony WWW i ASP s stworzone po prostu przy uyciu tekstu, dlatego jedyn rzecz, ktrej potrzeba do ich tworzenia i pracy z nimi jest edytor tekstu. Notatnik lub jakikolwiek inny edytor tekstu, wietnie bdzie wspomaga tworzenie i edycj stron HTML i ASP. Naprawd, czasami to wszystko czego potrzebujesz. Osobicie posiadam duy wybr narzdzi do tworzenia stron WWW, witryn oraz stron ASP, ale w dalszym cigu od czasu do czasu uywam Notatnika. Jednym z powodw jest tutaj prostota adowania tego edytora tekstu przy jego olbrzymich moliwociach twrczych. Kolejnym powodem do rozwaenia moliwoci uycia edytora tekstu jest fakt, e jest on dostpny nawet na mniej zaawansowanych technologicznie komputerach. Zawsze powiniene znale na nich edytor tekstu, a jeli istnieje moliwo poczenia z twoim serwerem internetowym, na bieco moesz dokonywa modyfikacji stron. Ponadto w przypadku prostego HTML, to bardzo wane, aby okresowo przeglda swj naturalny kod. Przekonasz si, e wiele narzdzi uywanych do tworzenia stron i witryn WWW dodaje liczne linie kodu ukadu tabeli, ktre mog by swobodnie usunite co spowoduje, e twoja strona stanie si duo mniejsza i bdzie si adowaa duo szybciej. Spjrzmy na przykad poniszego kodu HTML, ktry zosta wygenerowany przez narzdzie tworzenia witryn, zwane NetObjects Fusion, ktre omwimy pniej:
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=570>

Rozdzia 3 Narzdzia pracy


<TR VALIGN="top" ALIGN="left"> <TD WIDTH=68 HEIGHT =7><IMG SRC="./assets/images/dot_clear.gif" WIDTH =68 HEIGHT =1 BORDER=0></TD> <TD WIDTH=27><IMG SRC="./assets/images/dot_clear.gif" WIDTH =27 HEIGHT =1 BORDER=0></TD> <TD WIDTH=95><IMG SRC="./assets/images/dot_clear.gif" WIDTH =95 HEIGHT =1 BORDER=0></TD> <TD WIDTH=95><IMG SRC="./assets/images/dot_clear.gif" WIDTH =95 HEIGHT =1 BORDER=0></TD> <TD WIDTH=95><IMG SRC="./assets/images/dot_clear.gif" WIDTH =95 HEIGHT =1 BORDER=0></TD> <TD WIDTH=95><IMG SRC="./assets/images/dot_clear.gif" WIDTH =95 HEIGHT =1 BORDER=0></TD> <TD WIDTH=61><IMG SRC="./assets/images/dot_clear.gif" WIDTH =61 HEIGHT =1 BORDER=0></TD> <TD WIDTH=34><IMG SRC="./assets/images/dot_clear.gif" WIDTH =34 HEIGHT =1 BORDER=0></TD> </TR> <TR VALIGN="top" ALIGN="left"> <TD></TD> <TD WIDTH=468 COLSPAN=6><P ALIGN="center"><B> <FONT COLOR="#800000" SIZE="+2" FACE="Arial,Helvetica"> All invitations and accessories priced at a 25% discount!</B> </FONT></P></TD> <TD></TD> </TR> <TR VALIGN="top" ALIGN="left"> <TD COLSPAN=8 HEIGHT =39></TD> </TR> </TABLE>

62

Prawie identyczne wyjcie mona uzyska z nastpujcego kodu HTML:


<p ALIGN="center"><b><font SIZE="+2" FACE="Arial,Helvetica"> All invitations and accessories priced at a 25% discount! </b></font></p>

Ten kod jest objtociowo jedynie uamkiem tego poprzedniego, tak wic strona bdzie wywietlana znacznie szybciej. Jedyn rzecz, o ktrej naley pamita uywajc Notatnika jako edytora stron ASP jest nadanie plikowi odpowiedniego rozszerzenia. Notatnik domylnie przydziela rozszerzenie .txt. Kiedy wic zapisujesz plik napisany w Notatniku, upewnij si, czy przydzielie mu waciwe rozszerzenie, jak to pokazano na rysunku 3.1.

63

ASP Kompendium

programisty

Rysunek 3.1. Przydzielanie waciwego rozszerzenia w Notatniku

FrontPage 2000
FrontPage 2000 jest narzdziem Microsoftu, ktre moesz wykorzysta do tworzenia pojedynczych stron i witryn WWW. Poniewa FrontPage jest produktem Microsoftu, jest zaprojektowany tak, aby wsppracowa z serwerem IIS, umoliwiajc natychmiastow modyfikacj witryny WWW; uywajc innych narzdzi musisz w zasadzie zaadowa stron na serwer.

rodowisko pracy
Rysunek 3.2 pokazuje rodowisko, w ktrym strona WWW jest przegldana. Widok pokazany na tym rysunku jest widokiem strony, ktr przejrze mona naciskajc przycisk Strona (Page) w pasku narzdziowym znajdujcym si po lewej stronie ekranu. Kiedy przycisk zostanie nacinity, w rodku okna ukae si panel prezentujcy zawarto biecego folderu. W tym przypadku katalog macierzysty FrontPage nazywa si fpsample.

Rozdzia 3 Narzdzia pracy

64

Rysunek 3.2. rodowisko pracy FrontPage w czasie przegldania strony WWW W prawym panelu okna FrontPage prezentowana jest zawarto aktualnie wybranej strony WWW. Klikajc dowoln stron w panelu rodkowym, uaktywniamy j w prawym panelu. W prawym panelu dostpne s trzy rodzaje widokw strony. Pierwszy z nich, pokazany na rysunku 3.2, to widok normalny, gdzie moliwe jest graficzne dodawanie i edycja elementw strony. Jeli zmienisz widok na HTML, ujrzysz sam kod HTML (Rysunek 3.3.). W widoku normalnym moesz edytowa kod HTML, aby doda skrypty lub kod ASP. Moesz go uy rwnie jako narzdzia szkoleniowego, pokazujcego co dzieje si ze stron, gdy dodajesz do niej rne elementy.

Rysunek 3.3. Widok HTML strony WWW w programie FrontPage

65

ASP Kompendium

programisty

Trzecim widokiem jest podgld. Dziki temu widokowi pokazanemu na rysunku 3.3 sprawdzisz, jak strona bdzie wygldaa w przegldarce. Ta prosta opcja pozwala na szybki podgld wyjciowej postaci strony.

Rysunek 3.4. Podgld strony


Przypis Podgld jest uruchamiany po stronie klienta. Oznacza to, e kady kod po stronie klienta rwnie bdzie widoczny, ale adna z twoich stron ASP nie zostanie przetworzona.

Kolejnym widokiem gwnym (dostpnym w lewym panelu okna) jest widok Foldery (Folders), co pokazano na rysunku 3.5. Widok ten pozwala na zarzdzanie plikami i folderami twojej witryny. Ze rodkowego panelu korzystasz w celu wyszukiwania katalogw. W tym samym czasie panel prawy pokazuje zawarto wybranego folderu. Rozszerzona informacja o kadym z nich zawierajca nazw, tytu, dat modyfikacji oraz komentarze, jest prezentowana w prawym panelu. Tak wic korzystajc z tego widoku w prosty sposb moesz zlokalizowa pliki, dodawa do nich zadania, przeglda ich struktur oraz sortowa je po ktrymkolwiek z pl.

Rozdzia 3 Narzdzia pracy

66

Rysunek 3.5. Widok Foldery w programie FrontPage Aby doda komentarz do pliku, kliknij jego ikon prawym przyciskiem myszy i wybierz Waciwoci (Properties). Nastpnie kliknij zakadk Skrt (Summary) i wpisz swj komentarz (Rysunek 3.6.). Komentarz moesz doda do kadego pliku witryny.

Rysunek 3.6. Okno dialogowe wykorzystywane w celu dodawania komentarza do pliku Kolejny widok Raporty (Reports) pozwala na przejrzenie rozmaitych raportw dotyczcych twojej witryny WWW. Krtki raport domylny jest pokazany na rysunku 3.7.

67

ASP Kompendium

programisty

Rysunek 3.7. Widok Raporty Przegldu dodatkowych raportw moesz dokona wybierajc Raporty (Reports) z menu Widok (View). Dziki temu wygenerujesz list wolnych stron, starych plikw, dodanych ostatnio plikw, przerwanych cz i wielu innych. Niektre z tych raportw mona nawet skonfigurowa wybierajc Narzdzia (Tools), Opcje (Options), a nastpnie przegldajc zakadk Widok raportw (Reports View). Tutaj moesz okreli, ile maksymalnie dni ma mie plik, aby by zakwalifikowany jako nowy. Tak samo zakwalifikowa moesz plik jako stary, ustalajc minimaln liczb dni. Moesz rwnie ustali liczb sekund, ktra musi upyn podczas adowania strony, aby uzna j za woln. Nastpnym widokiem, pokazanym na rysunku 3.8, jest Nawigacja (Navigation). Ten widok pozwala na projektowanie logicznego ukadu witryny. Tutaj moesz dodawa strony do schematu poprzez przecignicie ich z listy folderw do prawego panelu. Tam strony mog zosta poczone w ukad logiczny. W widoku nawigacji moesz usun dowoln stron z witryny bez obawy o to, e plik zostanie usunity z sieci.

Rozdzia 3 Narzdzia pracy

68

Rysunek 3.8. Widok Nawigacji w programie FrontPage 2000 Przycisk Hipercza (Hyperlinks) uruchamia kolejny graficzny widok twojej witryny WWW. Wybierajc dan stron z listy folderw, w prawym panelu ujrzysz jej wszystkie cza. Ostatnim z widokw s Zadania (Tasks), co pokazano na rysunku 3.9. Prezentuje on dziaania, ktre naley podj podczas tworzenia witryny WWW. Zadania przydzielane s osobom maj swj priorytet, status, dat i opis.

Rysunek 3.9. Widok Zada w programie FrontPage 2000 Moesz mie przydzielone zadanie oglne, nie odnoszce si do adnego szczeglnego zadania z listy. Na przykad moesz przydzieli zadanie rejestracji witryny w wyszukiwarce; by moe zadaniem bdzie ukoczenie schematu strony. Aby doda zadanie oglne, najpierw upewnij si, czy znajdujesz si w widoku

69

ASP Kompendium

programisty

zada. Nastpnie wybierz z menu Edycja (Edit) Zadania (Tasks) i Dodaj zadanie (Add Task). Powiniene zobaczy okno pokazane na rysunku 3.10.

Rysunek 3.10. Dodawanie zadania w oknie dialogowym Nowe zadanie W oknie dialogowym Nowe zadanie (New Task) przydzielasz zadanie okrelonej osobie. Moesz rwnie ustali priorytet zadania oraz poda jego opis. Kiedy naciniesz przycisk OK, nowe zadanie zostanie dodane do listy w widoku Zadania. Moesz rwnie przydzieli zadania plikom i folderom w witrynie WWW. Robi si to poprzez wybranie strony z listy folderw, a nastpnie kliknicie jej prawym przyciskiem myszy oraz wybranie pozycji Dodaj zadanie (Add Task). Kolejne kroki s takie same jak przy dodawaniu zadania oglnego. Widok Zadania jest wykorzystywany do zarzdzania. Kiedy klikniesz dowolne zadanie prawym przyciskiem, moesz wybra Rozpocznij zadanie (Start Task), co spowoduje, e przeniesiesz si do pliku zwizanego z tym zadaniem. Moesz rwnie oznaczy zadanie jako zakoczone klikajc je prawym przyciskiem. Zadanie zakoczone ma inn ikon, co uatwia jego rozpoznanie spord zada niezakoczonych.

Tworzenie sieci Web


W programie FrontPage termin sie Web odnosi si do nazwy domeny lub podkatalogu, gdzie witryna WWW bdzie umieszczona. FrontPage dysponuje kreatorem, ktrego moesz uy do stworzenia nowej sieci Web. Aby skorzysta z kreatora wybierz menu Plik (File), Nowa (New), a nastpnie Sie Web (Web). Powiniene ujrze dialog wyboru witryn, pokazany na rysunku 3.11.

Rozdzia 3 Narzdzia pracy

70

Rysunek 3.11. Dialog wyboru witryn Bez wzgldu na typ witryny, ktr wybierzesz, bdziesz musia poda jej pooenie. Jeli serwer jest oddalony, moesz by zapytany o nazw uytkownika oraz haso komputera NT, na ktrym zainstalowany zosta serwer IIS. W tym miejscu bdzie stworzona twoja witryna. Jeli pracujesz z witryn i zapisujesz na bieco zmiany, bd one natychmiastowo przenoszone na serwer. Zwr uwag na duy wybr sieci Web. Jeli wybierzesz pojedyncz stron, kreator stworzy j w jednym tylko w jednym kroku, a niezbdne pliki zostan umieszczone na serwerze. Inne kreatory s nieco bardziej zoone. Wemy na przykad kreatora prezentacji firmy. Na samym pocztku wybierasz strony, ktre chcesz wczy do witryny (zobacz rysunek 3.12.).

Rysunek 3.12. Wybr stron witryny prezentujcej firm Dla kadej strony wybierasz elementy, ktre maj si na niej pojawi. Zaraz po tym, jak kreator wygeneruje stron, twj wybr zostanie uwzgldniony w szablonie strony, ktry posiada wolne miejsce na dodatkow zawarto. Kreator zapyta ci rwnie o wybr tematu, bdcego oglnym wygldem twojej witryny, zawierajcego kombinacj banerw, ta, stylu czcionki i innych elementw. FrontPage zawiera mnstwo tematw. Moesz je

71

ASP Kompendium

programisty

wybiera bd zmienia korzystajc z menu Format, a nastpnie zaznaczajc Temat (Theme). Zobaczysz wtedy okno dialogowe pokazane na rysunku 3.13.

Rysunek 3.13. Wybr tematu dla witryny Temat moesz zastosowa do dowolnej iloci stron twojej witryny. Moesz rwnie modyfikowa wygld tematu. Staraj si jednak uwanie korzysta z tych gotowych tematw. Pamitaj, e FrontPage jest bardzo popularny i kady twrca korzystajcy z niego posiada te same tematy, co ty. Tak wic kto, kto odwiedza twoj witryn, a wczeniej przeglda inne stworzone przy uyciu FrontPage, moe stwierdzi, e twoja witryna nie jest niczym wyjtkowym.

Przegldanie strony
Jak moglimy si zorientowa z wczeniejszych kart tego rozdziau, najprostsz i najszybsz metod przegldania strony, nad ktr pracujesz to wybra Podgld (Preview) w trybie Strona (Page) pozwala to jednak tylko na szybki przegld. Ty natomiast chciaby moe zobaczy, jak twoja strona bdzie widziana przez wolnostojc przegldark. Da si to zrobi wybierajc w menu Plik (File) opcj Widok w przegldarce (Preview in Browser). Wywietlone zostaje okno dialogowe pokazane na rysunku 3.14.

Rysunek 3.14. Okno dialogowe Widok w przegldarce To narzdzie podgldu pozwala na wybranie typu przegldarki, za pomoc ktrej chcesz przeglda witryn. To bardzo wane, aby zobaczy jak wyglda witryna we wszystkich tych przegldarkach, ktrych mog

Rozdzia 3 Narzdzia pracy

72

uywa potencjalni uytkownicy, poniewa czasami strona rnie zachowuje si w rnych typach przegldarek. Moesz rwnie uzupeni list dodatkowymi przegldarkami klikajc przycisk Dodaj (Add). Wpisujesz wtedy nazw nowej przegldarki, ktra pojawi si nastpnie na licie. Zauwa rwnie, e mona dokona wyboru rozmiaru okna. Pamitaj, e odwiedzajcy mog mie monitor o rozmiarze innym od tego, ktry ty posiadasz. Dlatego sprawd, jak wyglda twoja witryna WWW na monitorach rnego rozmiaru. Nastpnie, na podstawie tego podgldu, bdziesz mg wyregulowa kocowy wygld twojej witryny. FrontPage posiada jeszcze jedno narzdzie, ktre jest pomocne w radzeniu sobie z rnicami pomidzy przegldarkami. Znajdujc si w widoku Strona (Page), wybierz Opcje strony (Page Options) z menu Narzdzia (Tools). Nastpnie wybierz zakadk Kompatybilno (Compatibility). Zobaczysz okno dialogowe pokazane na rysunku 3.15. Tutaj moesz wybra przegldark docelow dla tej strony, jej wersj oraz serwer, na ktry strona bdzie wysyana. W oparciu o dokonane wybory, rne pola wyboru poniej bd aktywowane bd dezaktywowane. To samo stanie si z pozycjami menu programu FrontPage.

Rysunek 3.15. Kompatybilno strony Moesz rwnie wybra typ i wersj przegldarki oraz typ serwera wedug wasnych potrzeb. W tym wypadku rcznie okrelasz technologie, ktre maj obsugiwa stron, zaznaczajc bd odznaczajc dowolne pola wyboru znajdujce si na dole okna.

Dodawanie strony
Moesz doda now stron WWW lub ASP do sieci Web stworzonej w programie FrontPage wybierajc Nowa (New), Strona (Page) z menu Plik (File). Kiedy to uczynisz, zobaczysz kolejny ekran wyboru, ktry prezentuje rysunek 3.16. W tym dialogu moesz dokona wyboru spord wielu szablonw stron. Te wzorcowe strony przeprowadz ci przez kreator, dziki ktremu stworzysz now stron, uzupeniajc szablon odpowiednimi informacjami. Moesz rwnie wybra szablon nazwany Stron normaln (Normal Page), ktry jest po prostu pust stron. Zakadka Strony ramek (Frames Pages) zawiera wicej szablonw, ale s one zbudowane przy uyciu ramek.

73

ASP Kompendium

programisty

Rysunek 3.16. Dialog wyboru szablonu strony WWW Kiedy przejdziesz przez wszystkie kroki kreatora, twoja nowa strona zostanie wywietlona. Kiedy bdziesz chcia j zapisa, zostaniesz zapytany o tytu strony i nazw pliku. To w tym miejscu ustalasz, czy dana strona jest stron ASP czy jakiego innego typu. Po prostu okrel odpowiednio rozszerzenie pliku. Pamitaj jednak, e nawet jeli dasz plikowi rozszerzenie .asp, to i tak kod strony serwera nie zadziaa dopki nie zostanie przetworzony przez serwer. Kiedy ju stworzye stron ASP, moesz przej do widoku HTML i rcznie doda twj kod do strony.

Praca ze stron
Znajdujc si w widoku normalnym strony moesz zacz wpisywa do niej tekstow zawarto. Moesz rwnie formatowa tekst podobnie jak w kadym innym programie Microsoft Office przy uyciu paska formatowania, pokazanego na rysunku 3.17.

Rysunek 3.17. Pasek formatowania Pierwsza lista rozwijana paska narzdziowego pozwala na wybr typu elementu HTML, ktry zostanie uyty dla tego tekstu, na przykad H1 lub OL. Nastpnie moesz okreli rodzaj i rozmiar czcionki oraz atrybuty akapitu. Jeli potem spojrzysz na kod HTML strony, zobaczysz, e twoje zmiany zamieniy si w odpowiednie znaczniki HTML. Jak pokazano na rysunku 3.18, inne elementy HTML dodaje si do strony WWW w menu Wstaw (Insert).

Rozdzia 3 Narzdzia pracy

74

Rysunek 3.18. Menu Wstaw w widoku strony Wybr wikszoci elementw w tym menu, uruchamia kreatora lub dialog uzyskujcy od ciebie informacje potrzebne podczas dodawania nowego elementu do strony. Na przykad jeli wybierzesz Hipercze (Hyperlink), program poprosi ci o podanie pooenia pliku, do ktrego odnosi si cze lub o wybranie strony w sieci Web. Dodawania elementw formularza dokonuje si w ten sam sposb, wybieramy ktry z podpunktw opcji Formularz (Form) dostpnej w menu Wstaw (Insert). Moesz doda formularz na dwa sposoby. Po pierwsze, wstawienie pojedynczego elementu. Jeli przykadowo chciaby wstawi pojedyncze pole tekstowe, wybierasz odpowiedni pozycj z menu Formularza, a FrontPage doda ten element w ramach jego wasnego znacznika form do twojej strony WWW i wywietli widok pokazany na rysunku 3.19.

Rysunek 3.19. Pojedyncze pole formularza

75

ASP Kompendium

programisty

Moesz wtedy okreli dziaania, ktre naley podj oraz inne waciwoci formularza klikajc na nim prawym przyciskiem myszy, a nastpnie wybierajc Waciwoci Formularza (Form Properties). W ten sam sposb moesz doda inne formularze. Jeli formularz ma by bardziej zoony, moesz rwnie wybra w podmenu punkt Formularz (Form). Stworzony zostanie wtedy formularz z przyciskami Przelij (Submit) oraz Skasuj (Reset). Nastpnie dodajesz elementy to tego formularza wybierajc je z podmenu w czasie, gdy sam formularz jest zaznaczony. Jeli klikniesz prawym przyciskiem myszy ktrykolwiek z elementw formularza, moesz przejrze jego waciwoci wybierajc Waciwoci pola formularza (Form Field Properties). Odpowiednie okno dialogowe pokazuje rysunek 3.20.

Rysunek 3.20. Waciwoci pola formularza Rne typy elementw formularza maj rne, odpowiadajce im dialogi. Przycisk Sprawd poprawno (Validate) pozwala na stworzenie ogranicze typu i wartoci zapisu wprowadzanego w pole formularza po stronie klienta.

NetObjects Fusion
Kolejnym narzdziem tworzenia witryn WWW jest NetObjects Fusion, http:\\www.netobjects.com. NetObjects posiada duy wybr narzdzi wspierajcych projektowanie. W dalszej czci rozdziau zwrcimy uwag na jedno z nich zwane ScriptBuilder, posiadajce wspaniay interfejs do pracy z kodami stron ASP. Moesz pobra pen, 30-dniow wersj tego programu z wymienionej wyej witryny WWW. Jak bdziesz mg si przekona z treci tego rozdziau, najwiksz korzyci pync z pracy z NetObjects Fusion to kontrola, jak sprawujesz nad ukadem elementw strony. Narzdzie to pozwala na umieszczanie elementw w dowolnej czci strony, tak jak gdyby projektowa formularz w Visual Basic lub Access. NetObjects bazuje na niewidzialnych tabelach i grafikach generowanych w HTML w celu zapewnienia kompletnej swobody w rozmieszczaniu elementw na stronie.

rodowisko pracy
Fusion posiada pi gwnych widokw: Witryna (Site), Strona (Page), Styl (Style), Zasoby (Assets) oraz Publikacja (Publish). Zmiany widoku dokonuje si klikajc jedn z ikon z nazwami widokw, ktre znajduj si w pasku narzdziowym tu pod menu. Widok Witryna (Site) jest pokazany na rysunku 3.21. Jest to miejsce, od ktrego prawdopodobnie rozpoczniesz proces tworzenia, poniewa wanie w tym widoku moesz przeglda strony znajdujce si w witrynie, dodawa je oraz usuwa. Strony s prezentowane w hierarchii logicznej. Jako e jest to widok logiczny, a nie fizyczny, nie moesz zapobiec poczeniom ze stronami spoza hierarchii. Widok ten wykorzystywany jest przez twrcw do przemylenia i zorganizowania logicznej struktury witryny WWW.

Rozdzia 3 Narzdzia pracy

76

Rysunek 3.21. Widok Witryna programu NetObjects Fusion Dodania strony do witryny dokonuje si przy uyciu klawisza Insert. Strona zostanie dodana jako potomna do dowolnej strony, ktra w tym czasie bdzie zaznaczona. Na rysunku 3.21. zaznaczona jest strona Home, tak wic nacinicie klawisza Insert spowoduje dodanie wanie do niej strony potomnej. Moesz usun stron klikajc j prawym przyciskiem, a potem przyciskajc klawisz Delete. Kada strona posiada swoje waciwoci, ktre wywietlane s w zakadce Waciwoci (Properties) w maym oknie dialogowym. Pokazane jest ono w prawym dolnym rogu rysunku 3.21. W dialogu Waciwoci (Properties) moesz zmieni nazw biecej strony przez wpisanie jej do pola tekstowego Nazwa (Name). Jeli naciniesz przycisk Dostosowanie nazwy (Custom Names), powiniene ujrze okno pokazane na rysunku 3.22.

Rysunek 3.22. Okno dialogowe Dostosowanie nazwy Tworzc stron w NetObjects, moesz doda baner lub przycisk wyszukiwania. W oknie dialogowym dostosowania nazw moesz okreli tekst, ktry bdzie si pojawia na tych elementach strony. Tutaj moesz rwnie nada plikowi odpowiednie rozszerzenie. We waciwociach strony moesz umieci rwnie informacje zwizane z zarzdzaniem twojej witryny. Moesz wybra kolor ta strony uywany w widoku hierarchii. Moesz rwnie okreli czy dana strona jest ukoczona i czy powinna by publikowana. Dodatkowe pole tekstowe pozwala na dodanie komentarza do strony. Dodatkowa zakadka w widoku witryny nosi nazw Struktury (Outline), ktry pokazuje struktur stron w postaci podobnej do tej w Eksploratorze Windows. Po lewej znajduje si lista stron pokazanych w ich poszczeglnych pooeniach, natomiast po prawej widoczne s wszystkie strony potomne strony biecej.

77

ASP Kompendium

programisty

Tworzc stron korzystasz z widoku Strona (Page). Aby znale si w tym widoku, kliknij dwa razy na tej stronie w widoku witryny, z ktr chcesz pracowa. Zobacz rysunek 3.23.

Rysunek 3.23. Widok Strona programu Fusion Bdc ju w widoku strony, moesz dosta si do innych stron na kilka sposobw. Moesz skorzysta ze strzaek znajdujcych si w lewym dolnym rogu, aby porusza si midzy poziomami w hierarchii lub pomidzy stronami znajdujcymi si na ty samym poziomie. Strzaki pozwalaj na poruszanie si w hierarchii pokazanej w widoku witryny. Moesz rwnie nacisn przycisk z czterema strzakami, znajdujcy si obok strzaek pojedynczych. Kiedy przycisk jest nacinity, mae okno wyszczeglnia list stron w formie hierarchii. Moesz rwnie poszukiwa stron naciskajc przycisk Przejd do (Go to) w prawym grnym rogu ekranu. Kiedy przycisk zostaje nacinity, program pyta ci o podanie czci nazwy strony, ktr chcesz znale. Jeli naciniesz przycisk Ostatnia (Last), umieszczony w prawym grnym rogu ekranu, przeniesiesz si do strony, ktr ostatnio otwierae. Wzdu lewej strony okna umieszczono liczne elementy i skadniki, ktre moesz wczy do swojej strony. Wiksza ilo tych elementw dostpna jest w menu Widok (View), Paski narzdzi (Toolbars), gdzie wybra mona te paski, ktre aktualnie nie s prezentowane. Przyjrzymy si dokadnie niektrym z tych elementw nieco dalej w tym podrozdziale. Sama strona ma wiele waciwoci, ktre moesz ustawi. Jeli chcesz im si przyjrze, kliknij dan stron prawym przyciskiem myszy i wybierz Waciwoci ukadu strony (Layout Properties). W zakadce Oglne (General) moesz ustali rozmiar strony i sposb wykonania jej ukadu. Druga zakadka tego okna to To (Background). Tutaj ustalasz kolor ta strony, obrazy ta oraz jego dwiki. Kolejnym widokiem gwnym programu Fusion jest Styl (Style), ktry odnosi si do domylnych czcionek, kolorw, przyciskw i grafik witryny, ich domylnego wygldu. Widok ten jest zaprezentowany na rysunku 3.24. Lew stron ekranu zajmuje duga lista stylw. Po prawej mamy podgld wybranego stylu, ktry uzyskujemy przez kliknicie go w lewym panelu. Kiedy ju wybrae styl dla twojej witryny, kliknij przycisk Ustaw Styl (Set style).

Rozdzia 3 Narzdzia pracy

78

Rysunek 3.24. Widok Styl programu Fusion Moesz rwnie edytowa kady element istniejcego stylu. Przypumy na przykad, e chciaby uy stylu Urban Legend, ale to ma by inne. Modyfikacji ta stylu dokonasz wybierajc Styl (Style), Edytuj element (Edit Element), oraz To (Background). Pokae si wtedy okno dialogowe, takie jak na rysunku 3.25. Podobnie edytuje si inne elementy stylu.

Rysunek 3.25. Modyfikacja stylu Jeli nie chcesz korzysta z gotowych stylw, moesz stworzy swj wasny. Po prostu wybierz Styl (Style) i Nowy styl (New Style). Zostaniesz poproszony o podanie nazwy dla twojego stylu, a potem moesz ju zacz tworzy jego elementy. Kolejny widok gwny Fusion to Zasoby (Assets), ktry wyszczeglnia pliki, cza, obiekty danych oraz zmienne majce zwizek z twoj witryn. Ten widok pokazany jest na rysunku 3.26.

79

ASP Kompendium

programisty

Rysunek 3.26. Widok Zasoby programu Fusion NetObjects Fusion obserwuje wszystkie pliki i cza, ktre kiedykolwiek byy zwizane ze stron. Jeli wic zdecydujesz si na dodanie cza bd obrazka do witryny, moesz wybra je z listy plikw i cz, ktre ju s jej czci. Moesz rwnie uy tego widoku do usuwania niepotrzebnych elementw z twojej witryny. Po prostu wybierz odpowiedni element i nacinij klawisz Delete. Moesz rwnie korzysta z tego widoku podczas globalnego zastpowania zasobu. Zamy, e posiadasz cze z witryn usytuowan poza twoj wasn, z ktr czysz si z rnych miejsc twojej witryny. Jeli chcesz zmieni to cze na jakie nowe i zmiana ma by globalna, znajd je na licie w zakadce cza (Links). Nastpnie kliknij dwukrotnie wybrane cze i wpisz nowy adres URL. Ostatni widok programu to Publikacja (Publish), gdzie okrelasz sposb i miejsce publikowania twojej witryny. Ten widok, pokazany jest na rysunku 3.27, prezentuje sposb fizycznego zapamitywania witryny podczas jej publikowania. Na rysunku pliki s pokazane tak, jak byyby umieszczone, gdyby byy publikowane wedug typu. Moesz rwnie wybra publikacj wszystkich plikw w jednym katalogu lub w ich hierarchii logicznej. Aby zmieni sposb publikacji plikw oraz ustawi inne waciwoci, nacinij przycisk Ustawienia (Setup). Powiniene ujrze okno dialogowe pokazane na rysunku 3.28.

Rozdzia 3 Narzdzia pracy

80

Rysunek 3.27. Widok Publikacja programu Fusion

Rysunek 3.28. Okno dialogowe Ustawienia publikacji W pierwszej zakadce, Struktura katalogu (Directory Structure), moesz okreli sposb fizycznego pooenia twoich plikw. Druga zakadka, Wyjcie HTML (HTML Output), umoliwia zmian generowanego ukadu strony oraz wykorzystywanego zestawu znakw. Zakadka trzecia, Pooenie serwera (Server Location), daje moliwo okrelenia miejsca lub miejsc, gdzie bdzie si znajdowaa twoja witryna. Ta zakadka pokazana zostaa na rysunku 3.29.

81

ASP Kompendium

programisty

Rysunek 3.29. Zakadka Pooenie serwera dialogu Ustawienia publikacji Istniej dwa typy publikacji: lokalna i zdalna. Kad z nich moesz doda klikajc przycisk Dodaj (Add). Wybierajc opcj Lokalna (Local) bdziesz musia po prostu poda katalog, w ktrym witryna bdzie publikowana w twojej sieci. Jeli wybierzesz opcj Zdalna (Remote), musisz okreli pooenie macierzystego komputera oddalonego, twoj nazw uytkownika oraz haso. Czwarta zakadka okna dialogowego wyszczeglnia list skadnikw, ktre bd publikowane wraz ze stron, jeli w ogle takowe istniej. Kiedy ju zakoczysz dokonywanie ustawie, jeste gotowy do publikacji twojej witryny. Dokonuje si tego klikajc przycisk Publikuj (Publish). Po naciniciu przycisku wywietlona zostanie lista miejsc publikacji witryny, ktre okrelie w zakadce Pooenie serwera (Server Location). Nacinij OK, a twoja strona zostanie opublikowana.

Tworzenie witryny WWW przy uyciu programu Fusion


Aby stworzy now stron przy uyciu programu Fusion, wybierz z menu Plik (File) pozycj Nowa witryna (New Site). Jak to pokazano na rysunku 3.30, bdziesz mia do wyboru trzy opcje. Wybierajc opcj Pusta witryna (Blank Site), stworzona zostanie pojedyncza strona WWW; wybierajc Wedug szablonu (From Template), zaprezentowany zostanie zbir gotowych schematw witryn, ktre moesz wykorzysta jako szkielet twojej witryny; jeli zdecydujesz si na opcj Z istniejcej witryny WWW (From Existing Web Site), program Fusion zaimportuje ca, wybran witryn WWW.

Rysunek 3.30. Tworzenie nowej strony

Rozdzia 3 Narzdzia pracy

82

Praca ze stron
Jeli kiedykolwiek pracowae z Visual Basic lub projektowae formularze w Microsoft Access, stosunkowo wygodnie bdzie ci si pracowao ze stronami przy uyciu programu Fusion. Wszystkie elementy s krelone na stronie. Kiedy ju element si tam znajdzie, ustawiasz dla niego liczne waciwoci w celu osignicia podanego efektu. Jeli na przykad chcesz doda tekst do strony, wybierzesz ikon Tekst (Text) znajdujc si w pasku narzdziowym widoku Strona (Page) po lewej stronie ekranu. Nastpnie wykrelisz element o odpowiednim rozmiarze. Rysunek 3.31. pokazuje stron z nakrelonym elementem tekstowym.

Rysunek 3.31. Strona z wstawionym polem tekstowym Teraz, kiedy element jest wykrelony na stronie, moesz ustawi jego waciwoci. Po pierwsze, moesz wpisa tekst, ktry ma si pojawia w elemencie. Nastpnie okrelasz styl tekstu, jego to i wiele innych waciwoci przy uyciu odpowiedniego okna dialogowego. Podobne czynnoci wykonuje si przy dodawaniu do strony innych elementw.

NetObjects ScriptBuilder
Kolejnym narzdziem NetObjects jest ScriptBuilder. To nie tylko wspaniae narzdzie do tworzenia stron ASP. Dziki niemu mona rwnie tworzy skrypty wykonywane po stronie klienta oraz czysty kod HTML. W tym podrozdziale zwrcimy uwag na tworzenie stron ASP przy uyciu NetObjects ScriptBuilder. Zobaczysz rwnie, jak mona wykorzysta funkcje tego narzdzia do uatwienia dodawania skryptw oraz ich zatwierdzania.

rodowisko programowe
Okno gwne programu ScriptBuilder skada si z dwch paneli: lewego i prawego. Lewy panel zazwyczaj zawiera list dziaa lub opcji, zalenie od wybranej zakadki. Panel prawy pokazuje stron ASP lub HTML, nad ktr pracujesz. Aby otworzy stron w prawym panelu, wybierz Plik (File), Otwrz (Open). Okno dialogowe, ktre si ukae, pozwoli ci na znalezienie pliku, ktry chcesz otworzy. Kiedy chcesz stworzy nowy plik, wybierz Plik (File), Nowy (New). Wywietlony zostanie dialog, ktry pokazano na rysunku 3.32.

83

ASP Kompendium

programisty

Rysunek 3.32. Dialog Nowy Plik programu ScriptBuilder Nastpnie moesz wybra jeden z przedstawionych w oknie szablonw, reprezentujcych typ strony, jak chcesz stworzy. Wybrany szablon wygeneruje podstawowe znaczniki dla wybranego przez ciebie typu strony. Jeli zdecydowae si przykadowo na utworzenie strony ASP, szablon stworzy stron zawierajc znaczniki jzyka podstawowego, HTML, nagwka (head), oraz treci (body). Moesz rwnie modyfikowa te szablony, w ten sposb za kadym razem, kiedy stworzysz now stron przy uyciu szablonu, bdzie ona zawieraa kod potrzebny dla tego typu pliku. Zamy na przykad, e posiadasz plik biblioteki, ktry zawsze chcesz docza do twoich stron ASP. Aby to zrobi, za kadym razem musisz dodawa do kodu wiersz Include dla tego pliku. Zmodyfikuj szablon strony ASP wczajc do niego odpowiedni kod. W celu dokonania zmian we szablonie, wywietl zawarto plikw pooonych w folderze Templates\Standard katalogu gwnego ScriptBuilder. Moesz rwnie tworzy swoje wasne szablony. By moe czsto potrzebujesz strony ASP majcej kod, ktry wykrela graf w oparciu o dane pochodzce z zestawu rekordw moesz stworzy taki szablon zawierajcy wsplny kod. Aby wykona taki szablon, po prostu stwrz w zwyky sposb stron ASP lub HTML, a nastpnie umie j w folderze Templates\Custom. Te pliki dostpne s w menu Plik (File), Nowy (New), w zakadce Wasne (Custom). W lewym panelu moesz wybra zakadk zwizan z dziaaniami bd opcjami, ktre wykorzystujesz podczas pracy ze stron. Wybierajc zakadk Odwoanie (Reference), ujrzysz widok pokazany na rysunku 3.33. To, co tam wida to bogata biblioteka jzykw i technologii, ktre moesz wykorzysta podczas pracy z programem ScriptBuilder.

Rozdzia 3 Narzdzia pracy

84

Rysunek 3.33. Widok Odwoanie w lewym panelu okna


Przypis Jeli nie wida listy rozwijanej, gdzie mgby wpisa nazw do wyszukania, kliknij ma strzak w grnym prawym rogu lewego panelu.

Wikszo odwoa pochodzi z zasobw online, co ma swoje plusy i minusy. Musisz by poczony z sieci, aby ujrze niektre odwoania i punkty odwoa do stron, ktre ju nie istniej. Korzystne jest jednak to, e zawarto listy jest cay czas uaktualniana, poniewa pochodzi ze znaczcych obszarw odwoa firm takich jak Microsoft czy Netscape. Moesz rwnie uy odwoania w celu wstawienia znacznikw i kodu wprost do twojej strony. Na przykad chcesz wstawi list numerowan HTML. Mgby wybra znacznik w odniesieniu HTML. Nastpnie jeli klikniesz prawym przyciskiem odpowiedni pozycj i wybierzesz Wstaw (Insert), znaczniki listy numerowanej pojawi si w prawym panelu okna w miejscu, gdzie znajduje si kursor. Moesz te uzupeni bibliotek o nowe odwoania. Jeli klikniesz prawym przyciskiem w dowolnym miejscu zakadki odwoa, powiniene zobaczy opcj Ustawienia (Settings). Kliknij ten punkt, a bdziesz mg przejrze wszystkie dostpne ksiki biblioteki. Ustawie innych opcji zakadki odwoa dokonasz wybierajc Opcje (Options) z menu Narzdzia (Tools). Jeli wybierzesz zakadk Odwzorowanie (Map), zobaczysz widok, ktry prezentuje rysunek 3.34. Odwzorowanie odnosi si tutaj do reprezentacji dokumentu, z ktrym pracujesz. Odwzorowane s znaczniki i skadniki, ktre znalazy si w dokumencie, dziki czemu moesz szybko znale te miejsca w kodzie, gdzie zostay one uyte. Gdyby chcia odszuka miejsca, w ktrych uyto znacznika <BR>, kliknij dwa razy odpowiedni pozycj lewego panelu okna, a wiersz zawierajcy ten znacznik zostanie wyrniony.

85

ASP Kompendium

programisty

Rysunek 3.34. Widok Odwzorowanie programu ScriptBuilder Zakadka Pulpit (Desktop), pokazana na rysunku 3.35, pozwala na poszukiwanie w systemie plikw, ktre chcesz wykorzysta podczas pracy z witryn. Jeli klikniesz dwa razy dowolny plik, zostanie on otwarty w prawym panelu okna. Jeli klikniesz prawym przyciskiem myszy obszar Pulpitu, moesz utworzy folder oraz przejrze waciwoci pliku.

Rysunek 3.35. Widok Pulpit programu ScriptBuilder Jednym z najuyteczniejszych skadnikw programu ScriptBuilder jest biblioteka skryptw. Zakadka Biblioteka skryptw (Script Library) pokazana zostaa na rysunku 3.36. Pozwala ona na proste wstawianie gotowych blokw kodu do twojej strony WWW. ScriptBuilder zawiera wiele skryptw strony klienta i strony serwera, ktre moesz wczy do twoich stron ASP i HTML.

Rozdzia 3 Narzdzia pracy

86

Rysunek 3.36. Widok Biblioteka skryptw programu ScriptBuilder Lista biblioteki skryptw moe by sortowana po dowolnej kolumnie, ktr wybierzesz klikajc jej nagwek. Kolumny przedstawiaj nazw skryptu, uyty podczas jego tworzenia jzyk lub technologi, jego opis oraz wersj programu Navigator lub Explorer obsugujcego skrypt. Aby wstawi skrypt do twojej strony, umie kursor w tym miejscu, gdzie ma si znale oraz kliknij dwukrotnie wybrany z biblioteki skrypt. Jeli na przykad chcesz skorzysta z procedury odczytujcej znacznik kontekstu klienta (cookie), najpierw umie kursor w odpowiednim miejscu strony ASP, gdzie procedura ma wystpowa. Nastpnie kliknij dwukrotnie w lewym panelu prezentujcym zbir skryptw procedur o nazwie ReadCookie. Od tej chwili stanie si ona czci twojego kodu. Te wbudowane skrypty s cakowicie konfigurowalne i podatne na zmiany. Aby zmieni waciwoci skryptu, kliknij go dwukrotnie i wybierz Waciwoci (Properties). Ujrzysz dialog pokazany na rysunku 3.37. Tutaj moesz zmieni nazw i opis skryptu. Moesz rwnie wybra jego jzyk bd technologi, jak rwnie wersj przegldarki Navigator lub Explorer, ktra bdzie obsugiwaa skrypt.

Rysunek 3.37. Dialog Waciwoci skryptu

87

ASP Kompendium

programisty

Modyfikacja kodu skryptu moliwa jest w zakadce Kod (Code). Okno powikszy si tak, aby pokaza kod danej procedury (Rysunek 3.38.). Wanie tutaj moesz wprowadzi podane zmiany w treci dostpnych w bibliotece skryptw. Na przykad osobicie wol, eby procedury ASP (do nich naley ta pokazana na rysunku 3.38.) miay od razu w swej treci znaczniki bloku kodu ASP <% oraz %>. Mog je tam umieci modyfikujc skrypt w tej zakadce. Kiedy zamkniesz okno kodu, program poprosi ci o potwierdzenie lub odrzucenie dokonanych zmian.

Rysunek 3.38. Okno kodu edytowanego skryptu Moj ulubion cech programu jest moliwo dodawania do biblioteki wasnych skryptw. Zauwayem, e wiele krtkich blokw kodu, z ktrych stale korzystam, nie znalazo si w procedurach. Aby nie przepisywa cigle tych samych fragmentw kodu, mona je umieci w bibliotece. Moesz doda skrypt do biblioteki na dwa sposoby. Pierwszym z nich jest kliknicie prawym przyciskiem w obszarze okna biblioteki i wybranie punktu Dodaj (Add). Ujrzysz wtedy puste okno kodu, takie samo, jak w wypadku edycji istniejcego skryptu. Tam wprowadzisz nowy kod skryptu. Po ukoczeniu przejd do zakadki Opis (Description). Tutaj wpiszesz nazw nowego skryptu oraz jego krtki opis, wraz z wyszczeglnieniem zastosowanego jzyka lub technologii i wersji obsugujcej ten skrypt przegldarki Navigator lub Explorer. Drugim sposobem dodania procedury do biblioteki skryptu jest odzyskanie odpowiedniego fragmentu kodu z istniejcej ju strony. Moesz to zrobi wyrniajc tekst w wybranym dokumencie, a nastpnie klikajc prawym przyciskiem zaznaczony tekst i wybierajc opcj Dodaj do biblioteki skryptw (Add to Script Library). Powiedzmy, e w wielu stronach ASP czysz si z baz danych w ten sam sposb i chcesz, aby ten kod czenia sta si czci biblioteki skryptw. Wyrnij ten fragment kodu przy uyciu myszy, a nastpnie kliknij prawym przyciskiem. Okno, ktre si wtedy pojawi, pokazane jest na rysunku 3.39.

Rozdzia 3 Narzdzia pracy

88

Rysunek 3.39. Dodawanie kodu do biblioteki skryptw Jeli wybierzesz opcj Dodaj do biblioteki skryptw (Add to Script Library), kod jest dodawany jako pozycja do biblioteki. Ponownie wpisujesz wszystkie niezbdne informacje dotyczce nowego skryptu. Kiedy skoczysz, kod staje si czci biblioteki i moe by wstawiany do tworzonych stron. Ostatni zakadk lewego panelu gwnego okna programu ScriptBuilder jest Galeria skadnikw (Component Gallery). Zawarto zakadki prezentuje rysunek 3.40. Galeria uatwia prac z programowalnymi, gotowymi do wstawienia skadnikami. Moesz wczy dany skadnik do tworzonej strony ASP lub HTML, przecigajc go w to miejsce, w ktrym ma by inicjalizowany.

Rysunek 3.40. Galeria skadnikw programu ScriptBuilder Moesz okreli waciwoci, metody oraz zdarzenia zwizane z danym skadnikiem, klikajc go prawym przyciskiem myszy, a nastpnie wybierajc odpowiedni punkt. Szablon waciwoci, metody bd zdarzenia

89

ASP Kompendium

programisty

jest wtedy dodawany do twojej strony. Moesz rwnie doda wasny skadnik do rodowiska programu, klikajc prawym przyciskiem w dowolnym miejscu Galerii skadnikw oraz wybierajc opcj Dodaj do galerii (Add to Gallery).

Praca z kodem w programie ScriptBuilder


ScriptBuilder posiada wiele narzdzi wspomagajcych pisanie kodu i prac z nim. ScriptBuilder wywietla wiersze kodu w rnych kolorach, co powoduje, e kod jest bardziej czytelny i rozpoznawalny. Aby jednak z tej cechy programu skorzysta, najpierw musi on wiedzie, z jakim jzykiem pracujesz. Tak wic jedn z pierwszych rzeczy, ktr zrobisz bdzie ustawienie domylnego jzyka, ktry bdzie wyrniany. Wybierz z menu Widok (View) opcj Wyrniony jzyk (Highlighted Language), a nastpnie przykadowo VBScript, co pokazano na rysunku 3.41.

Rysunek 3.41. Ustawianie domylnego jzyka do wyrniania Kiedy jzyk zostanie okrelony, kod w odpowiedni sposb wyrniany kolorami, co czyni go atwiejszym do odczytu. Poza tym, skoro ScriptBuilder ju wie, jakiego jzyka uywasz, moe automatycznie pomaga ci w uzupenianiu blokw kodu. Jeli na przykad napiszesz poniszy kod wraz ze spacj:
If

program uzupeni ten blok:


If expression Then End If

Wyrni nawet fraz expression, bdziesz mg wic natychmiast wpisa w to miejsce wybrane wyraenie. Jeli wpisaby ten kod wraz ze spacj:
Select

ScriptBuilder zbuduje nastpujcy blok kodu, wyrniajc w nim sowo expression:


Select Case expression Case value

Case Else End Select

Rozdzia 3 Narzdzia pracy

90

Moesz rwnie zmodyfikowa funkcj automatycznego tworzenia skryptw tak, aby inne kody pojawiay si przy wyborze poszczeglnych instrukcji. Przykadowo moesz chcie, aby instrukcja If zawsze bya uzupeniana instrukcj Else. Takiego ustawienia moesz dokona wybierajc Narzdzia (Tools) oraz Automatyczne tworzenie skryptw (AutoScripting). Zobaczysz wtedy kompletn list dostpnych opcji automatycznego tworzenia skryptw (zobacz rysunek 3.42).

Rysunek 3.42. Konfiguracja funkcji Automatycznego tworzenia skryptw Zauwa, e lista zawiera informacje o uywanych jzykach. Przewijasz list w poszukiwaniu instrukcji If dla jzyka VBScript. Nastpnie kliknij Edytuj (Edit). Wywietli si ekran pokazany na rysunku 3.43. Tutaj moesz uzupeni instrukcj If instrukcj Else lub dokona jakiejkolwiek innej modyfikacji. Zwr uwag, e sowo expression jest wyrnione. Kiedy wpisae If w kodzie strony, wanie sowo expression byo zaznaczone.

Rysunek 3.43. Edycja kodu w Automatycznym tworzeniu skryptw Moesz rwnie doda swoje wasne bloki kodu poprzez funkcj Automatycznego tworzenia skryptw, naciskajc przycisk Nowy (New) w oknie dialogowym. Ukae si ten sam dialog, co w wypadku edycji. Musisz tutaj wpisa sowo kluczowe, instrukcj, po pojawieniu si ktrej ma wystpi odpowiedni kod. Oprcz tego okrelasz jzyk programowania dla tego kodu oraz oczywicie sam kod. Moesz rwnie uy tej funkcji programu, aby zastosowa skrcon metod tworzenia kodu. Jak si dowiesz z kolejnego rozdziau, czsto na przykad bdziesz wcza do kodu wiersz Option Explicit, aby uatwi usuwanie bdw. Moesz zapewni sobie skrt dla tej instrukcji dziki stworzeniu odpowiedniej pozycji w oknie Automatycznego tworzenia skryptw. Najpierw wpisz nastpujc kluczow fraz:
ooo

91

ASP Kompendium

programisty

Poniej, w polu Wstawiany tekst (Text to Insert), wpisz:


Option Explicit

oraz nowy wiersz. Teraz, kiedy podczas tworzenia kodu wprowadzisz ooo, pojawi si na ekranie instrukcja Option Explicit, a po niej nowy wiersz. W menu Skrypt (Script), a nastpnie pozycji Menu dostpna jest opcja Blok serwera (Server Block), ktrej wybr powoduje wpisanie nastpujcego kodu:
<%

%>

Tworzony jest wic blok serwera. Kiedy wybierzesz menu Narzdzia (Tools), Opcje (Options) oraz przejdziesz do zakadki Kod (Code), ukae si ekran pokazany na rysunku 3.44. W tej zakadce moesz dokona zmiany uywanej skadni bloku kodu przez ustawienie jej w polu o nazwie Typ znacznika (Tag Type).

Rysunek 3.44. Opcje ustawie kodu W tym samym dialogu znajduje si punkt Bloki funkcji (Function Blocks). W odpowiednim polu wpisujesz tekst, ktry ma pojawia si w bloku komentarza wstawianej procedury. Jeli chcesz, aby pojawiao si twoje imi, wpisz je w pole Nazwa uytkownika (Username). Nastpnie moesz zaznaczy, e twoje imi wraz z aktualn dat chcesz wczy do nagwka komentarza funkcji. Ta informacja jest wykorzystywana w oknie dialogowym pokazanym na rysunku 3.45, ktre pojawi si kiedy wybierzesz opcj Bloki funkcji (Function Blocks) z menu Skrypt (Script).

Rysunek 3.45. Wstawianie bloku funkcji Wpisujesz nazw funkcji, a nastpnie opis jej dziaania. Kiedy naciniesz OK, wprowadzone tutaj dane s czone z danymi wprowadzonymi w dialogu Opcji i wytwarzany jest nastpujcy, przykadowy blok kodu:

Rozdzia 3 Narzdzia pracy


'************************************************************* ' ' ' ' ' ' Autor: Greg Buczek Data utworzenia: 8/4/99 Tutaj wpisz szczegy dotyczce twojej funkcji SampleFunction ()

92

'************************************************************* */ Function SampleFunction () End Function

Jak wic widzisz, ScriptBuilder nie jest narzdziem wizualnego projektowania stron. Moesz w prosty sposb uruchomi podgld strony, ale nie moesz umieszcza na niej elementw metod przecigania i upuszczania. W programie ScriptBuilder pracujesz jedynie z kodem oraz czystym HTML. Pasek narzdziowy Znaczniki HTML (HTML Tags) pomaga jednak wstawia znaczniki. Pasek ten pokazany jest na rysunku 3.46. Po naciniciu wybranego przycisku, odpowiedni znacznik jest wstawiany do twojego dokumentu w miejscu, gdzie znajduje si kursor, jeli wic naciniesz przycisk B, znaczniki <B> oraz </B> stan si czci dokumentu. Jeli najpierw wyrnisz tekst do pogrubienia, a dopiero potem wybierzesz przycisk z paska, znaczniki bd umieszczone wokoo zaznaczonego tekstu.

Rysunek 3.46. Pasek narzdziowy Znaczniki HTML Nacinicie jednego z przyciskw wyrwnania tekstu powoduje wytworzenie odpowiednich znacznikw akapitu. Na przykad nacinicie przycisku wyrwnania do lewej, tworzony jest nastpujcy HTML:
<P ALIGN=LEFT></P>

Po ikonach wyrwnania w pasku umieszczono ikony wypunktowania, numerowania, akapitu, wiersza podziau oraz linii poziomej, ktrych nacinicie rwnie spowoduje pojawienie si odpowiedniego znacznika. Przyciski od H1 do H6 wytwarzaj odpowiadajce im znaczniki nagwka, tak wic nacinicie przycisku H1 wywoa nastpujcy HTML:
<H1></H1>

Kursor bdzie znajdowa si pomidzy znacznikami, tak wic moesz od razu zacz wpisywa tekst. Ostatnie dwa przyciski zwizane s odpowiednio ze znacznikami obrazu i cza. Nacinicie tych przyciskw spowoduje pojawienie si odpowiedniego dialogu, w ktrym podasz konieczne informacje. Kiedy wybierzesz ikon Obraz (Image), zobaczysz okno pokazane na rysunku 3.47.

93

ASP Kompendium

programisty

Rysunek 3.47. Wstawianie znacznika obrazu Wpisujesz w nim ciek dostpu do obrazu, tekst pojawiajcy si wraz z obrazkiem lub zamiast niego, sposb wyrwnania tekstu, granice, rozmiar obrazu oraz rozstaw. Znacznik obrazu tworzony jest na podstawie wprowadzonych zapisw. Kiedy naciniesz przycisk cze (Link), ujrzysz dialog pokazany na rysunku 3.48. Uzupeniasz go lokalizacj, do ktrej cze bdzie odsyao, tekstem pojawiajcym si na stronie jako cze oraz, opcjonalnie, nazw cza i jego cel. Pole tekstowe Cel (Target) odnosi si do przegldarki lub ramki, do ktrej wysyana jest strona. Kiedy wprowadzisz ju informacje i naciniesz OK, utworzony zostanie odpowiedni znacznik.

Rysunek 3.48. Wstawianie znacznika cza ScriptBuilder posiada rwnie pasek narzdziowy elementw formularza (rysunek 3.49.). Uycie kadego ze znajdujcych si w nim przyciskw spowoduje wywietlenie dialogu, w ktry naley wpisa odpowiednie informacje potrzebne do stworzenia podanego znacznika. Pierwszy przycisk suy do tworzenia samego formularza. Kiedy go naciniesz, dialog zapyta ci o nazw formularza, okno wyjciowej przegldarki lub ramki, typ kodowania oraz pooenie strony, do ktrej naley odesa uytkownika po wypenieniu i wysaniu formularza. Okrelasz rwnie metod przesyania formularza, GET lub POST. Rnice pomidzy tymi metodami omwione zostay w rozdziale 5.

Rysunek 3.49. Pasek narzdziowy Elementy formularza Rezultatem wypenienia okna dialogowego jest stworzenie znacznika formularza w miejscu kursora, ktry moe by podobny do tego:
<FORM NAME="MoreInfoForm" TARGET="New"

ACTION="http://www.whatever.com/page.asp" METHOD="post" ENCODE="application/x-www-form-urlencoded">

</FORM>

Przy wyborze przyciskw powiconych elementom strony zostaniesz poproszony o podanie nieco innych informacji, zalenych od typu elementu, ktry wybrae. Przykadowo przy wyborze pola tekstowego bdziesz musia poda nazw pola, jego warto, dugo oraz czy jest to pole z hasem. Rezultatem moe by nastpujcy znacznik:
<INPUT TYPE="text" SIZE=20 MAXLENGHT=50 NAME="FirstName">

Jeli jednak naciniesz przycisk obszaru tekstowego, zostaniesz poproszony o okrelenie nazwy pola, domylnego tekstu, jego rozmiaru oraz sposobu jego obramowania.

Rozdzia 3 Narzdzia pracy

94

Weryfikacja kodu w programie ScriptBuilder


ScriptBuilder posiada rwnie par narzdzi wspierajcych sprawdzanie napisanego przez ciebie kodu. S to: Korektor skadni (Syntax Checker) i Kontroler skryptu (Script Inspector). Jednym z bdw, ktre czsto zdarzaj mi si podczas tworzenia stron ASP, jest opuszczanie nawiasw, jak w wierszu kodu poniej:
If isempty(Request.Form(" OK") then

aduj stron na serwer mylc, e wszystko jest w porzdku, a kiedy j uruchamiam okazuje si, e wystpi bd w wierszu kodu. Wiem, w czym ley problem, ale musz najpierw edytowa t stron, a nastpnie ponownie umieci j na serwerze. Korektor skadni jest w tym wzgldzie bardzo pomocny. Nie znajdzie on bdw zwizanych z uyciem niewaciwej metody czy waciwoci obiektu i pewnie nie rozpozna bdw logicznych, ale bdy skadni, podobne do tego zaprezentowanego powyej, zostan przez program odnalezione. Powiedzmy, e twj blok kodu wyglda nastpujco:
<% if isempty(Session("StudentID")) then Response.Redirect "../index.asp" end if if isempty(Request.QueryString("CourseID") then Response.Redirect "../html/student_menu.asp" end if %>

Jeste ju gotw do wysania twojej strony do serwera, ale przedtem chcesz sprawdzi, czy nie ma w niej jakich bdw skadni. Z menu Narzdzia (Tools) wybierz opcj Korektor skadni (Syntax Checker). W rezultacie tego wyboru w oknie programu ScriptBuilder pojawi si dodatkowy panel, ktry pokazany jest na rysunku 3.50.

Rysunek 3.50. Rezultat uruchomienia Korektora skadni

95

ASP Kompendium

programisty

Zwr uwag na panel, ktry znajduje si a dole okna. Wyszczeglnia on bd w stronie w szstym jej wierszu. Panel ten pokae list wszystkich bdw skadni znalezionych w stronie. Jeli klikniesz dwa razy wiadomo o bdzie, program przeniesie ci do tego wiersza, ktry ten bd wywoa. Korektor skadni wyszuka wiele bdw podobnych do tego. Poinformuje ci o tym, e uye instrukcji If bez End If lub instrukcji For bez Next. Zauwayem jednak, e czasami korektor widzi bdy skadni tam, gdzie ich nie ma. Wemy nastpujc fragment kodu, ktry w stronie ASP jest pojedynczym wierszem kodu:
<A HREF="../html/lecturerouter.asp?LectureID= <% Response.write RSLectures("LectureID") %>"> <IMG HEIGHT=28 WIDTH=35 SRC="<% Response.Write iconpath %>" BORDER=0 ></A>

Ta linia spowoduje wystpienie bdu, chocia bdu nie ma. Tak reakcj programu ScriptBuilder wywoa pojawienie si kodu ASP wraz z HTML. Innym narzdziem weryfikacji jest Kontroler skryptu. Przegldnie on twj HTML, kod strony serwera i strony klienta i poda wersje przegldarek Navigator i Explorer, ktre bd mogy rozpozna twj kod. Aby skorzysta z tego narzdzia, otwrz stron, ktr chcesz przetestowa i wybierz opcj Kontroler skryptu (Script Inspector) z menu Narzdzia (Tools). W wyniku tego na dole okna uka si panele, ktre pokazane zostay na rysunku 3.51. Jeli drugi panel nie zosta wywietlony, kliknij prawym przyciskiem w obszarze panelu widocznego i wybierz Poka szczegy (Show Details).

Rysunek 3.51. Wynik uruchomienia Kontrolera skryptu Zauwa, e Kontroler skryptu zgosi znalezienie znacznika VBScript strony klienta, ktry nie jest obsugiwany przez wikszo obecnych wersji przegldarek Navigatora. Jeli klikniesz podwjnie wiadomo o bdzie wywietlon w najniej pooonym panelu, program przeniesie ci do tego wiersza kodu, ktry jest rdem wystpienia problemu.

Microsoft Visual InterDev 6.0


Kolejnym pomocnym narzdziem, ktrego moesz uy do tworzenia stron ASP jest Microsoft Visual InterDev 6.0. Poniewa jest o produktem firmy Microsoft, cz go bliskie relacje z Internetowym serwerem

Rozdzia 3 Narzdzia pracy

96

informacyjnym (IIS) oraz systemem NT. Z perspektywy twrcy stron najwaniejszymi cechami tego programu s: wyrnianie wizualne oraz automatyczne zakaczanie kodu. Rysunek 3.52. pokazuje stron ASP otwart przy uyciu Visual InterDev. Program, dziki zastosowaniu kolorowych czcionek, kolorw ta oraz pogrubienia tekstu, czyni stron bardzo czyteln. W prosty sposb mona wtedy dostrzec, gdzie si zaczyna, a gdzie koczy blok kodu; instrukcje w blokach kodu s pogrubione.

Rysunek 3.52. Okno programu Visual InterDev 6.0 Zauwa, e na dole okna znajduj si trzy zakadki odnoszce si do strony: Projekt (Design), rdo (Source) i Szybki podgld (Quick View). Niestety jeli uruchomisz stron zawierajc kod ASP wraz z HTML czyli prawie kad zakadka Projekt (Design) nie zadziaa; natomiast zakadka Szybki podgld (Quick View) nie bdzie funkcjonowaa, poniewa program nie przetwarza kodu strony serwera. Tak wic jedynym widokiem, ktry mamy do dyspozycji przez cay czas jest rdo (Source). Inn nadzwyczaj pomocn funkcj Visual InterDev s listy zakaczania kodu, generowane w chwili uycia kropki w skadni kodu dla jednego z wbudowanych obiektw ASP. Na przykad jednym z najwaniejszych obiektw ASP jest Response. Uywany jest do komunikowania si z przegldark, ktra wywoaa twoj stron ASP. Obiekt ma liczne waciwoci i metody, ktre pozwalaj na podjcie dziaa. Jeeli w oknie Visual InterDev wpiszesz nastpujcy kod:
Response.

pojawi si lista pokazana na rysunku 3.53. Bdzie ona zawieraa wszystkie waciwoci i metody obiektu Response. Moesz zacz wpisywa wybran metod albo po prostu przewin list i wybra z niej odpowiedni punkt.

97

ASP Kompendium

programisty

Rysunek 3.53. Lista rozwijana zakoczenia kodu dla obiektu Response

Ostatnie sowo o narzdziach


Bez wzgldu na to, na ktre narzdzie si zdecydujesz, pamitaj, e to tylko narzdzie jeli uyjesz waciwego, uatwisz sobie prac. Powiniene przeanalizowa ich pene moliwoci, poniewa wikszo najciekawszych funkcji czsto bywa zagrzebana na samym dnie menu. Postaraj si nie zadowala jednym tylko produktem. Nowe produkty i programy usugowe przez cay czas pojawiaj si na rynku, a ich zastosowanie czsto zaoszczdzi ci mnstwa czasu.

Rozdzia 4. Podstawy ASP


Konstrukcja kodu ASP
Strony ASP zoone s ze statycznego HTML-a oraz dynamicznego kodu ASP. Te dwa skadniki mog by czone ze sob na rne sposoby, ktre zostan omwione w tym podrozdziale: HTML moe by umieszczony w kodzie, kod w HTML oraz skrypty strony serwera mog by zawarte w skryptach kodu klienta.

Znacznik <% = X %>


Aby odrni pocztek od koca kodu, bdziesz potrzebowa pewnego rodzaju znacznika. Najprostszy znacznik przedstawia si nastpujco:
<% = X %>

Nakazuje on kompilatorowi wypisanie wyniku wyraenia X. Na przykad, jeli chcesz stworzy stron WWW wywietlajc aktualn dat oraz czas, stwrz kod podobny do tego:
<HTML> <HEAD> <TITLE>Simple Tag Page</TITLE> </HEAD> <BODY> <H1>Witam na stronie z zegarem</H1> <P>Teraz jest: <% = Now() %><P> </BODY> </HTML>

Strona jest napisana przy uyciu standardowego HTML-a a do wiersza:


<P>Teraz jest: <% = Now() %><P>

Pierwsz czci wiersza jest standardowy HTML, ale pojawia si tutaj podstawowy znacznik ASP. Poniewa po otwarciu <% nastpuje znak rwnoci, kompilator wie, e to, co jest pniej powinno zosta obliczone, a wynik ma by wysany w postaci HTML. W tym przypadku obliczona powinna by funkcja Now(). Jak si dowiesz pniej, funkcja Now() zwraca dat i godzin systemu. Tak wic poprzedni wiersz, wysany do przegldarki, faktycznie wyglda tak:
<P>Teraz jest: 7/12/99 12:10:14 PM<P>

99

ASP Kompendium

programisty

Widok tej strony ASP prezentuje rysunek 4.1.

Rysunek 4.1. Strona ASP ze znacznikiem podstawowym

<% Pojedyncza linia kodu %>


Kolejnym sposobem na umieszczenie kodu w stronie ASP jest wstawienie pojedynczej linii pomidzy znacznikiem <% a znacznikiem %>. Przykadem uycia tej skadni niech bdzie strona wywietlajca liczb dni do Boego Narodzenia:
<HTML> <HEAD> <TITLE>Days Until Christmas</TITLE> </HEAD> <BODY> <H1>Ile czasu zostao?</H1> <P>Dni do Boego Narodzenia: <% Response.Write DateDiff("d",Date,"12/25/" & Year(Date)) %> <P> </BODY> </HTML>

Strona zbudowana jest z samego HTML-a a do wiersza:


<P>Dni do Boego Narodzenia: <% Response.Write DateDiff("d",Date,"12/25/" & Year(Date)) %>

Kompilator ASP widzi znacznik <% i wie, e wszystko, co znajduje si pomidzy nim a znacznikiem %>, jest kodem wymagajcym przetworzenia. W tym przypadku korzystamy z metody o nazwie Write obiektu Response w celu wysania wyniku do przegldarki (obiekt ten zostanie szczegowo omwiony w rozdziale 6.). Szczegln wartoci wysan do przegldarki jest liczba dni do Boego Narodzenia, powstaa po odjciu liczby od siebie dni pozostaych pomidzy aktualn dat a dat tegorocznego wita. Wiersz wynikowy kodu:

Rozdzia 4 Podstawy ASP


<P>Dni do Boego Narodzenia: 157<P>

100

Wygld strony przedstawia rysunek 4.2.

Rysunek 4.2. Strona zawierajca pojedyncz lini kodu ASP

<% Blok kodu %>


Moesz rwnie uy znacznikw <% i %> do stworzenia bloku kodu, ktry jest seri wierszy otrzymujcych okrelone zadania. Powiedzmy, e musisz stworzy stron, ktra wysya lub przeadresowuje odwiedzajcego do innej strony, opierajc si przy tym na dniu tygodnia. Poniszy blok kodu realizuje to zadanie:
<% If WeekDay(Date) = 1 then Response.Redirect "Sunday.html" ElseIf WeekDay(Date) = 2 then Response.Redirect "Monday.html" ElseIf WeekDay(Date) = 3 then Response.Redirect "Tuesday.html" ElseIf WeekDay(Date) = 4 then Response.Redirect "Wednesday.html" ElseIf WeekDay(Date) = 5 then Response.Redirect "Thursday.html" ElseIf WeekDay(Date) = 6 then Response.Redirect "Friday.html" Else Response.Redirect "Saturday.html" End If %>

101

ASP Kompendium

programisty

To byaby caa zawarto strony. Nie posiada ona widoku wyjciowego i jest napisana jedynie w kodzie ASP. Kod sprawdzi dzie tygodnia w oparciu o aktualn dat, a nastpnie poczy odwiedzajcego ze stron odpowiedniego dnia.

< Script> Kod </Script>


Jeli ju pracowae ze skryptami po stronie klienta, to prawdopodobnie jeste zaznajomiony ze znacznikiem <Script>. Jest on alternatyw dla znacznikw zaprezentowanych do tej pory, dlatego moesz go uywa podczas konstruowania stron ASP. Musisz jednak uy parametru RunAt i ustawi go dla serwera, poniewa w innym wypadku twj kod ASP bdzie pominity przez przegldark podczas przetwarzania. Poniej pokazano kod strony WWW uywajcej znacznika <Script>.
<HTML> <HEAD> <TITLE>Session Object</TITLE> </HEAD> <BODY> <H1>Czas trwania sesji</H1> <P>Czas trwania sesji upywa po (minutach): <SCRIPT LANGUAGE=VBScript RUNAT=Server > Response.Write Session.Timeout </SCRIPT> </BODY> </HTML>

Strona wyglda jak zwyka strona HTML a do znacznika <Script>:


<SCRIPT LANGUAGE=VBScript RUNAT=Server >

Zauwa, e okrelony zosta uyty jzyk oraz to, e kod zostanie uruchomiony po stronie serwera. Nastpnie mamy jeden wiersz kodu, ktry wypisuje w minutach czas trwania sesji (Timeout):
Response.Write Session.Timeout

Kod zakoczony jest znacznikiem </Script>. Obliczonym przez kod wynikiem uwidocznionym w przegldarce jest:
30

Wyjciowa strona pokazana jest na rysunku 4.3.

Rozdzia 4 Podstawy ASP

102

Rysunek 4.3. Strona ASP uywajca znacznika <Script>

HTML w kodzie
Do tej pory przygldalimy si przypadkom umieszczenia kodu w HTML-u, lecz moliwe s rwnie sytuacje odwrotne. Moemy umieci HTML w kodzie. Mgby na przykad napisa kod, ktry powoduje wywietlenie innego koloru ta w czasie dnia, a innego w nocy. Przykadem moe tutaj by nastpujcy kod:
<HTML> <HEAD> <TITLE>Change the Light</TITLE> </HEAD> <% if hour(Time) > 6 and Hour(Time) < 19 then Response.Write "<BODY BGCOLOR=""#FFFFD7"">" else Response.Write "<BODY BGCOLOR=""#808080"">" end if %> <H1>W nocy wyczamy wiato.</H1> </BODY> </HTML>

Zwr uwag na to, jak wyglda kod. Posiada jeden znacznik treci (<BODY>) dla godzin od 7 rano do 6 wieczorem oraz drugi dla pozostaej czci dnia. Tak wic w nocy wynikiem bloku kodu bdzie ten HTML:
<BODY BGCOLOR="#808080">

Rysunek 4.4. pokazuje wygld strony w nocy.

103

ASP Kompendium

programisty

Rysunek 4.4. Strona zmieniajca kolor ta w godzinach nocnych W czasie dnia wyjciowym znacznikiem treci kodu bdzie:
<BODY BGCOLOR="#FFFFD7">

Wygld strony w tym wypadku pokazuje rysunek 4.5.

Rysunek 4.5. Strona zmieniajca kolor ta w czasie dnia

Rozdzia 4 Podstawy ASP

104

Skrypt w skrypcie
Moesz rwnie wczy wynik twojego skryptu strony serwera do skryptu po stronie klienta, w ten sposb kod strony serwera zostanie uruchomiony i umieci tekst w kodzie po stronie klienta, ktry z kolei bdzie rozpoznany przez przegldark. Aby to zademonstrowa, sprbujmy stworzy kalkulator obliczajcy cen, z ktrego klienci mogliby skorzysta w celu okrelenia, ile bdzie kosztowaa pewna ilo produktu. Staym klientom oferujemy inn cen ni pozostaym. Chcemy, aby cena bya obliczana po stronie klienta w celu zredukowania liczby pocze i aby szybko dziaania kalkulatora pozwalaa klientom na wielokrotne wpisywanie cen. Musimy jednak stworzy skrypt po stronie klienta, aby cena bya ustalana indywidualnie w oparciu o typ klienta, co z kolei zapisane jest w zmiennej po stronie serwera. Poniszy kod realizuje to zadanie, czc skrypt strony klienta i strony serwera:
<HTML> <HEAD><TITLE>Client and Server</TITLE> <% If Session("CustomerType") = "Preferred" then TheRate = 25 else TheRate = 50 end if %> <SCRIPT language="JavaScript"> <!-function CheckPrice() { var TheMessage = 0; TheMessage = <% response.write TheRate %> * document.sampleform.Quantity.value; alert("Twoja cena wynosi $" + TheMessage); } // --> </SCRIPT></HEAD> <BODY> <FORM NAME="sampleform"> Wpisz ilo, aby okreli cen <p> <INPUT TYPE="text" NAME="Quantity" SIZE=10> <p> <INPUT TYPE="button" NAME="submitButton" VALUE="Poka cen" onClick="CheckPrice();"> </FORM> </BODY> </HTML>

Pierwszy blok kodu jest kodem ASP strony serwera napisanym w VBScripcie. Rozpoznajemy to po uytych znacznikach:
<% If Session("CustomerType") = "Preferred" then TheRate = 25 else TheRate = 50 end if

105

ASP Kompendium
%>

programisty

Kod sprawdza zmienn sesji, ktra zostaa omwiona dalej, w rozdziale 8. W zmiennej TheRate kod ustawia odpowiedni warto w oparciu o typ klienta (CustomerType). Nastpnie blok wstawia wynik kodu strony serwera w blok kodowy strony klienta.
<SCRIPT language="JavaScript"> <!-function CheckPrice() { var TheMessage = 0; TheMessage = <% response.write TheRate %> * document.sampleform.Quantity.value; alert("Twoja cena wynosi $" + TheMessage); } // --> </SCRIPT>

Znacznik Script bez zaznaczenia, e naley go uruchomi na serwerze, jest zinterpretowany jako kod strony klienta. Zauwa, e wewntrz bloku kodu znajduje si kod ASP strony serwera:
<% response.write TheRate %>

Kod strony serwera jest uruchamiany przed wysaniem bloku kodu do przegldarki. Jeli wic odwiedzajcy nie jest staym klientem, jego przegldarka otrzyma nastpujcy HTML:
<HTML> <HEAD><TITLE>Client and Server</TITLE> <SCRIPT language="JavaScript"> <!-function CheckPrice() { var TheMessage = 0; TheMessage = 50 * document.sampleform.Quantity.value alert("Twoja cena wynosi $" + TheMessage); } // --> </SCRIPT></HEAD> <BODY> <FORM NAME="sampleform"> Wpisz ilo, aby okreli cen <p> <INPUT TYPE="text" NAME="Quantity" SIZE=10> <p> <INPUT TYPE="button" NAME="submitButton" VALUE="Poka cen" onClick="CheckPrice();"> </FORM> </BODY> </HTML>

Rozdzia 4 Podstawy ASP

106

Na wstpie powiniene zauway, e brak jest pierwszego bloku kodu. Jest tak, poniewa brakujcy blok jest blokiem kodu strony serwera, a my teraz obserwujemy to, co jest wysyane do klienta. Zauwa rwnie, e zmienna TheRate w znacznikach skryptu zostaa zastpiona wartoci 50, tak wic cay kod strony serwera znikn, a przegldarka otrzymaa dostosowan do klienta wersj procedury CheckPrice. Rysunek 4.6. pokazuje wygld tej strony, a rysunek 4.7. przedstawia okno wiadomoci prezentujce obliczon cen.

Rysunek 4.6. Strona kodu klienta i serwera

Rysunek 4.7. Okno pojawiajce si po naciniciu przycisku Poka cen Jeli odwiedzajcy stron jest staym klientem, jego cena bdzie ustalona na poziomie 25 $ za jednostk produktu. Skrypt strony klienta bdzie wtedy zawiera nieco inny wiersz kodu okrelajcego cen pojawiajc si w wiadomoci:
TheMessage = 25 * document.sampleform.Quantity.value

Dyrektywa przetwarzania
Domylnie ustawionym jzykiem kodu ASP w serwerze IIS jest VBScript. Moesz te wyranie stwierdzi, e bdziesz uywa VBScripta jako twojego kodu poprzez umieszczenie na grze strony nastpujcej dyrektywy przetwarzania:
<%@ LANGUAGE=VBSCRIPT %>

Zapamitaj, e ten wiersz musi znale si na stronie jako pierwszy. Informuje on kompilator o tym, e uywanym w stronie jzykiem programowania bdzie VBScript. Jeli chcesz uy jzyka JScript, dyrektywa bdzie wygldaa nastpujco:

107

ASP Kompendium
<%@ LANGUAGE=JSCRIPT %>

programisty

Pliki Include
Po co ich uywa W miar jak twoja strona ASP bdzie si rozbudowywaa zobaczysz, e jej bloki kodu rozrastaj si do bardzo duych rozmiarw, a ty przez cay czas wpisujesz do nich te same procedury. Pliki Include pomagaj radzi sobie z takimi problemami, dziki nim mona bowiem wstawi kod do pliku, a nastpnie wywoa ten kod w stronie ASP. Zamy na przykad, e posiadasz standardowe procedury zatwierdzania danych, ktre odwiedzajcy wprowadza do formularza na stronie. W formularzu moe znajdowa si sprawdzane w jaki sposb pole daty, kilka pl, ktrych wypenienie jest wymagane oraz sprawdza si w nim liczby i ich zakres. Ten rodzaj kodu prawdopodobnie znalazby zastosowanie w wielu stronach. Jeli chciaby zmodyfikowa dziaanie ktrej z procedur, musiaby dokona zmian na kadej ze stron, ktra z procedury korzysta. Lepiej wic umieci kod zatwierdzania w osobnym pliku tekstowym, a nastpnie po prostu poczy z plikiem te strony, ktre z niego korzystaj. Pliki Include pomagaj oczyci nadmiernie rozbudowane strony, czynic je w ten sposb atwiejszymi do uruchomienia. Jest tak, poniewa kod jest pooony w centralnym punkcie, przez co w prostszy sposb mona go modyfikowa. Kolejnym powodem umieszczania kodu w plikach Include jest ochrona programistw przed nadmiern zoonoci kodu. Moesz mie w firmie programist, ktry jest ekspertem od obiektw danych wsppracujcych (CDO Collaborative Data Objects). Obiekty CDO s uywane do wysyania poczty elektronicznej poprzez twoj stron ASP oraz do wsppracy z Microsoft Exchange. Taki programista moe mie klika skomplikowanych procedur zarzdzajcymi kalendarzami Exchange. Jeli przekaza on swj kod innym pracownikom, aby go umiecili na swoich stronach ASP, istnieje ryzyko, e bd oni uywali tego kodu w sposb niepoprawny, poniewa mog go nie rozumie. Jeli programista CDO umieciby swj kod w pliku Include, inni pracownicy firmy nie musieliby rozumie zawioci kodu w nim zawartego. Mogliby po prostu wczy w stron plik CDO i wywoywa jego procedury. Wczanie pliku Aby wczy plik w zawarto strony ASP, uyj po prostu znacznika Include:
<SCRIPT LANGUAGE="vbscript" RUNAT="server"> <!-- #include file="FieldValidation.inc" --> </SCRIPT>

Wiersz Include jest otoczony znacznikami skryptu. Plik Include nosi nazw FieldValidation.inc i musi by pooony w tym samym katalogu, co strona ASP, ktra go wywouje. Moesz jednak uy cieki wzgldnej do zaznaczenia pooenia pliku Include:
<SCRIPT LANGUAGE="vbscript" RUNAT="server"> <!-- #include file="../lib/FieldValidation.inc" --> </SCRIPT>

W tym przykadzie plik Include musi by umieszczony w katalogu o nazwie Lib, ktry jest pooony o jeden poziom wyej ni biecy katalog. Wczenie pliku powoduje efekt umieszczenia caego znajdujcego si w nim kodu dokadnie w tym miejscu, gdzie pojawi si wiersz Include. Kady wiersz wczonego pliku nie staje si jednak fizycznie czci strony ASP.

Rozdzia 4 Podstawy ASP

108

Plik Include struktura i przykad Plik Include jest prostym plikiem tekstowym zawierajcym twj kod. Tak jak w przypadku kadej strony ASP, kod ma nastpujc struktur:
<% 'blok kodu jest tutaj %>

Kod objty jest znacznikami <% i %>. Na przykad plik Include, zapisany jako FieldValidation.inc, zawiera procedur, ktra sprawdza, czy wpisana data faktycznie jest dat i czy naley do okrelonego zakresu. Zawiera rwnie procedur sprawdzajca, czy dane pole jest polem liczbowym i czy liczba w nim jest zgodna z narzuconym zakresem. Wartoci te s weryfikowane odpowiednio jako prawidowa data urodzin oraz kod pocztowy.
<% Function DateRange(DateToTest, StartDate, EndDate) if not isdate(DateToTest) then DateRange = 0 elseif cdate(DateToTest) < cdate(StartDate) or _ cdate(DateToTest) > cdate(EndDate) then DateRange = 0 else DateRange = -1 end if End Function

Function NumberRange(FieldToTest, MinNumber, MaxNumber) If Not IsNumeric(FieldToTest) Then NumberRange = 0 ElseIf CSng(FieldToTest) < MinNumber Or _ CSng(FieldToTest) > MaxNumber Then NumberRange = 0 Else NumberRange = -1 End If End Function

Function Birthdate(FieldToTest) If Not IsDate(FieldToTest) Then Birthdate = 0 ElseIf CDate(FieldToTest) > Date Then Birthdate = 0 Else Birthdate = -1 End If End Function

Function ZipCode(FieldToTest) If Len(FieldToTest) = 5 Then If IsNumeric(FieldToTest) Then ZipCode = -1

109

ASP Kompendium
Else ZipCode = 0 End If ElseIf Len(FieldToTest) = 10 Then If IsNumeric(Left(FieldToTest, 5)) And _ IsNumeric(Right(FieldToTest, 4)) Then ZipCode = -1 Else ZipCode = 0 End If Else ZipCode = 0 End If End Function %>

programisty

Wywoywanie procedur Moge uy pliku Include wspomnianego w poprzednim podrozdziale korzystajc z nastpujcej skadni:
<SCRIPT LANGUAGE="vbscript" RUNAT="server"> <!-- #include file="FieldValidation.inc" --> </SCRIPT>

Plik o nazwie FieldValidation.inc musi znajdowa si w tym samym katalogu, co strona ASP, ktra go wywouje. Cay kod pliku Include jest wtedy umieszczany przez kompilator w miejscu pojawienia si znacznika. Od tej pory procedury pliku Include mog by wywoywane wewntrz kodu strony ASP:
Response1 = DateRange(Request.Form("Test1"), _ "12/1/99", "12/15/99") Response1 = NumberRange(Request.Form("Test1"), _ 7, 10) Response1 = Birthdate(Request.Form("Test1")) Response1 = ZipCode(Request.Form("Test1"))

W dalszej czci tego rozdziau omwimy procedury, dlatego nie martw si o to, e nie rozumiesz struktury pliku Include. Uyty zosta tutaj rwnie obiekt Request, ktry zostanie omwiony w rozdziale 6. Teraz wane jest jedynie to, aby zrozumia, e kod strony ASP moesz umieci osobno w pliku Include.

Kod ASP w uyciu


W tym podrozdziale signiemy do VBScripta, najczciej uywanego jzyka podczas tworzenia stron ASP. Nauczysz si korzysta z typw danych, operatorw, instrukcji i funkcji VBScripta, dziki ktrym tworzy si bloki kodu i procedury.

Komentarze, puste miejsca i wielko liter


W VBScripcie, podobnie jak w Visual Basicu i Visual Basicu dla aplikacji (VBA), komentarze s zaznaczone apostrofem lub pojedynczym cudzysowem. Moesz umieci komentarz na kocu wiersza kodu:
If Year(Request.Form("StartDate")) = Year(Date) then 'to jest komentarz do tego wiersza

Rozdzia 4 Podstawy ASP

110

Moesz rwnie uy apostrofu do zaznaczenia, e cay wiersz jest komentarzem:


If Year(Request.Form("StartDate")) = Year(Date) then 'kod wykona instrukcj jedynie wtedy, gdy wprowadzona data jest dniem tego roku

Moesz rwnie stworzy blok komentarza, ktry czsto spotykany jest na samym pocztku procedury lub strony ASP. Moe on zawiera imi i nazwisko autora, dat utworzenia i nazw procedury, opis jej dziaania, parametry oraz zwracane wartoci.
'''''''''''''''''''''''''''''''''''''''''''' ' ' Programista: Greg Buczek ' Data utworzenia: 2/1/2000 ' Nazwa procedury: DateRange ' ' ' ' ' ' Opis procedury: Procedury uywa si do okrelenia, czy przekazana warto jest dat. Jeli jest, sprawdza rwnie, czy naley do zakresu. Parametry: Przekazywane s 3 parametry, dane testowane, ich najmniejsza i najwiksza warto. Warto zwracana: Procedura zwraca 1, jeli warto jest dat i naley do zakresu. Jeli tak nie jest, zwracane jest 0.

''''''''''''''''''''''''''''''''''''''''''

Kiedy oznaczysz wiersz jako komentarz, caa jego zawarto jest interpretowana jako komentarz. Na przykad:
'Komentarz ' x = 5

W tym wierszu kod x = 5 nie zostanie wykonany, poniewa jest czci wiersza komentarza. Komentarze s pomijane przez kompilator, moesz wic uywa ich tak czsto, jak tylko chcesz. Pamitaj, e programista przegldajcy kod po tobie, by moe nie bdzie potrafi go odczyta bez odpowiedniego wyjanienia. Istnieje rwnie taka moliwo, e ty sam nie bdziesz wiedzia dlaczego napisae dany wiersz kodu, jeli bdziesz go przeglda po latach. Komentarze pomagaj te przemyle to, co chcesz zrobi. Mog by wykorzystane, aby stworzy pewien zarys dziaania kodu oraz okreli, na jakie sytuacje kod zosta przygotowany. Innym sposobem na uczynienie kodu atwiejszym do odczytania przez ciebie lub innego programist to dobre wykorzystanie w kodzie pustych miejsc, to znaczy znakw tabulacji, dodatkowych linii oraz spacji. Na przykad zwr uwag na czytelno poniszego bloku kodu:
if isempty(Session("StudentID")) then Response.Redirect "../index.asp" end if if isempty(Request.Form("QuizID")) then Response.Redirect "../index.asp" end if set conn=server.createobject("adodb.connection") conn.open "ASPBook","sa","yourpassword" set RSQuiz=conn.execute("SELECT CourseID, QuizName, " _ & "CorrectToPass FROM " _ & "OCQuizzes where QuizID = " & Request.Form("QuizID")) NumberCorrect=0 for each Question in Request.Form if Question<>"TestIt" then set RSQuestion=conn.Execute("select QuizAnswer from " _

111

ASP Kompendium
& "OCQuizQuestions where QuizQuestionID = " _ & Question) if Request.Form(Question)=RSQuestion("QuizAnswer") then NumberCorrect=NumberCorrect + 1 end if end if next

programisty

Z bloku kodu usunito wszystkie dodatkowe puste miejsca. Jest trudny do odczytania. Przebiegajc oczami ten kod nie jeste pewny, w jakiej ptli aktualnie znajduje si kod oraz w ktrym miejscu rozpoczyna si peen wiersz kodu i gdzie si koczy. Teraz spjrz na ten sam blok kodowy z dodanymi do niego pustymi miejscami:
if isempty(Session("StudentID")) then Response.Redirect "../index.asp" end if if isempty(Request.Form("QuizID")) then Response.Redirect "../index.asp" end if

set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSQuiz = conn.execute ("SELECT CourseID, QuizName, CorrectToPass " _ & "From OCQuizzes where QuizID = " & Request.Form("QuizID")) NumberCorrect = 0 for each Question in Request.Form if Question <> "TestIt" then set RSQuestion = conn.Execute("select QuizAnswer from " _ & "OCQuizQuestions where QuizQuestionID = " _ & Question) if Request.Form(Question) = RSQuestion("QuizAnswer") then NumberCorrect=NumberCorrect + 1 end if end if next

Przy zastosowaniu pustych miejsc kod staje si bardziej czytelny. Moemy od razu stwierdzi gdzie rozpoczyna si i gdzie koczy instrukcja If. Rozrniamy midzy sob poszczeglne instrukcje If, wiemy, ktry kod zadziaa przy danym warunku. Dodanie pustych miejsc nie wpywa na wykonywanie kodu. Wiksza ich ilo spowoduje, e strona ASP bdzie nieco wiksza, ale to niewielka cena za uczynienie kodu bardziej czytelnym. VBScript, podobnie jak Visual Basic i Visual Basic dla aplikacji nie rozrnia wielkoci liter. To znaczy, e zmienna
NumCorrect

jest t sam zmienn, co


numcorrect

Rozdzia 4 Podstawy ASP

112

oraz
nUMcORRECT

Jeli wczeniej programowae w jzyku, w ktrym wielko liter miaa znaczenie, jakim jest na przykad C++, bdziesz musia uwaa podczas przydzielania nazw zmiennym i procedurom. Gotowe modele obiektw ASP oraz funkcje napisane w VBScript rwnie nie rozpoznaj wielkoci liter. Moesz wic odnie si do metody pisania w ten sposb:
Response.Write

Lub w ten sposb:


response.write

Aby twj kod by czytelny, staraj si by konsekwentny. Jeli stworzye nastpujc zmienn:
Dim OrderTotal

to powiniene przez cay czas uywa jej w tej postaci, z tym samym wyszczeglnieniem wielkoci liter.

Zmienne
Zmienne su do zapamitywania informacji w twoim kodzie. W VBScripcie zmienne musz rozpoczyna si liter i nie mog mie wicej ni 255 znakw. Mog zawiera litery i cyfry, ale nie mog zawiera kropek oraz innych znakw specjalnych. Poniej przedstawiono przykady prawidowych nazw zmiennych:
Dim x Dim ABC Dim A241 Dim BardzoDlugaNazwaKtoraJestPoprawna

Te deklaracje nie s poprawne:


Dim 2C Dim ABC+ Dim AB.3

W VBScripcie nie musisz deklarowa zmiennej na wstpie moesz jej po prostu uy. Na przykad pierwszym wierszem kodu moe by:
X = 3

Chocia nie musisz deklarowa twoich zmiennych, to jednak przekonasz si, e o wiele atwiej jest usuwa bdy w kodzie, jeli to zrobisz dodatkowo wykorzystujc instrukcj Option Explicit. Jeli wstawisz nastpujcy wiersz na pocztku strony:
Option Explicit

informujesz kompilator o tym, e bdziesz deklarowa wszystkie swoje zmienne. Jeli kompilator znajdzie zmienn, ktra nie zostaa zdeklarowana, wtedy wygeneruje stan bdu. Zwr uwag na ten blok kodu:

113

ASP Kompendium
MyVariable = 2 MyVariable = MyVariable * 3 MyVariable = MyVaraible + 1 Response.Write MyVariable

programisty

Jaka liczba pojawi si w przegldarce? Jeden. Zauwa, e w trzecim wierszu wystpi bd literowy. Poniewa nie dodae instrukcji Option Explicit, kompilator przyjmuje, e wanie tworzysz now zmienn o nazwie MyVaraible. Nowa zmienna bdzie miaa warto zero; zero plus jeden daje jeden. Jest to jeden z najtrudniejszych do wykrycia bdw, poniewa kod zostanie uruchomiony bez wystpienia stanu bdu, bdny bdzie tylko wynik. Jeli kod byby napisany w ten sposb:
Option Explicit Dim MyVariable MyVariable = 2 MyVariable = MyVariable * 3 MyVariable = MyVaraible + 1 Response.Write MyVariable

wtedy kompilator wyrzuciby bd w wierszu trzecim. Wiedzielibymy, e problem wystpi i w prosty sposb mgby zosta znaleziony. W przypadku kodu zoonego z czterech wierszy nie ma kopotu z analiz, ale w wypadku procedury skadajcej si z kilkuset wierszy, zastosowanie tej instrukcji moe by wielk pomoc.

Typy danych
W wikszoci jzykw dysponujesz rnymi typami danych podczas tworzenia zmiennych. Na przykad w Visual Basic moesz stworzy zmienne nastpujcych typw:
Dim X as Long Dim Y as Currency Dim Z as String

W C++ okrelone s nastpujce typy:


int TheNumber; char TheName[100]; float TheFloat;

W VBScripcie jednake dostpny jest jeden tylko typ danych, ktry implikowany jest nastpujco:
Dim X

Ten typ nazywany jest wariantem. Funkcjonuje podobnie jak dowolny typ, ktry moesz stworzy w Visual Basic oraz tak samo, jak typ danych obiektu. Jeli umiecisz warto w wariancie, zadecyduje on za ciebie, w jaki sposb naley zapisa dan. Tak wic w kodzie:
Dim X X = 5

typ danych wariantu jest liczb, prawdopodobnie bajtem. Jeli tej samej zmiennej przydzielisz inn warto:
X = "Hello"

Rozdzia 4 Podstawy ASP

114

zmienna jest teraz cigiem znakw. Tak samo byoby w przypadku, gdyby w zmiennej znalaza si data bd kady inny typ danych. Tak wic przez cay czas istnienia zmiennej moe ona zmienia typ. Wariant moe by rwnie obiektem:
Dim X Set X = Server.CreateObject("adodb.connection")

Zauwa, e kiedy uywamy wariantu do zapisania obiektu, korzystamy z instrukcji Set. Zostanie ona omwiona nieco dalej w tym rozdziale.

Zakres i trwao
W odniesieniu do zmiennych, pojcie zakres okrela miejsce ich dostpnoci. Na przykad jeli zmienna jest dostpna w caej aplikacji, ma zakres publiczny bd globalny. Trwao odnosi si okresu czasu, w ktrym zmienna pozostaje dostpna. Na przykad zmienn zdeklarowan w procedurze mona uzna za trwa od momentu rozpoczcia dziaania procedury a do chwili jego zakoczenia. Kiedy deklarujesz zmienn w stronie ASP, znajdujc si na zewntrz procedury, ma ona zakres strony, co oznacza, e jest dostpna dla dowolnego wiersza kodu strony oraz w kadej procedurze. Wemy na przykad nastpujcy kod:
<% Option Explicit Dim MyString MyString = "Hello" Procedure1 Response.Write MyString %> W tym miejscu jest HTML <% Sub Procedure1 MyString = "GoodBye" End Sub %>

W trzecim wierszu tego kodu zdeklarowano zmienn MyString. Poniewa jest ona zdeklarowana w gwnym bloku kodu, a nie w procedurze, ma ona szeroki zakres strony. Kolejny wiersz wpisuje do zmiennej cig znakw Hello. Kod wywouje nastpnie procedur o nazwie Procedure1, ktra znajduje si na kocu strony. Procedura ta wpisuje do tej samej zmiennej cig znakw "GoodBye". Procedura koczy swe dziaanie i zmienna MyString jest wpisywana do przegldarki. Pojawia si w niej cig znakw GoodBye. Teraz przyjrzyj si kolejnemu blokowi kodu.
<% Option Explicit MyString = "Hello" Procedure1 Response.Write MyString %> W tym miejscu jest HTML <% Sub Procedure1 Dim MyString MyString = "GoodBye"

115

ASP Kompendium
End Sub %>

programisty

Tutaj zmienna MyString jest deklarowana w procedurze Procedure1. Jest ona dostpna jedynie w tej procedurze, tak wic kompilator wygeneruje bd w trzecim wierszu, gdzie prbujemy wpisa do zmiennej MyString cig znakw "Hello". Bd pojawi si, poniewa zmienna nie zostaa zdeklarowana dla kodu strony. Teraz popatrz na kolejny blok kodu i sprbuj powiedzie, jaka warto zostanie wysana do przegldarki.
<% Option Explicit Dim MyString MyString = "Hello" Procedure1 Response.Write MyString %> W tym miejscu jest HTML <% Sub Procedure1 Dim MyString MyString = "GoodBye" End Sub %>

Tym razem mamy dwie zmienne o nazwie MyString; jedna z nich znajduje si w kodzie oglnym, a druga w Procedure1. Kiedy wpisujemy "GoodBye" w zmienn MyString bloku Procedure1,uywamy tej, ktra zostaa zdeklarowana w procedurze. Tak wic cig "Hello" nie ulegnie zmianie i to wanie "Hello" zostanie wysane do przegldarki. W rozdziale 8. przyjrzymy si zmiennym, ktre s widoczne dla wielu stron. Trwao zmiennej rwnie zaley od tego, gdzie zostaa ona zdeklarowana. Zmienne deklarowane w kodzie strony s zachowywane dopki nie zakoczy si przetwarzanie strony s uruchamiane wraz ze stron i kocz si razem z ni. Zmienne zadeklarowane w procedurze zaczynaj i kocz swe istnienie wsplnie z procedur. Za kadym razem, gdy procedura jest wywoywana, zmienna jest na nowo definiowana. W ten sposb wartoci zapisane w zmiennych zadeklarowanych w procedurze s kasowane w chwili zakoczenia jej dziaania.

Operatory
Przy uyciu VBScripta moliwe jest przeprowadzanie w stronach ASP wielu operacji matematycznych. Standardowe operacje, czyli dodawanie, odejmowanie, mnoenie i dzielenie realizuje si przy uyciu operatorw +, - ,* oraz /. Moesz rwnie przeprowadza dzielenie cakowite, w wyniku ktrego otrzymujemy liczb cakowit bez reszty czy dziesitnej czci uamkowej. Dzielenie cakowite realizowane jest przy zastosowaniu operatora \. Tak wic wynikiem nastpujcej instrukcji:
X = 3 \ 2

bdzie wpisanie do zmiennej X wartoci 1. Do dyspozycji masz rwnie funkcj Modulus przykad wynikiem kodu:
X = 5 MOD 3

Operator,

ktrej wartoci zwracan jest reszta z dzielenia. Na

bdzie przypisanie zmiennej X wartoci 2, poniewa wanie dwjka jest reszt z tego dzielenia.

Rozdzia 4 Podstawy ASP

116

Ten rodzaj operacji jest bardzo uyteczny podczas realizowania zada w pewnych odstpach czasowych, w ptli. Zamy, e chcesz wywietla w rzdach informacje, ktre znajduj si w rekordach tabeli, ale eby te informacje byy bardziej czytelne, po kadych dziesiciu rekordach ma si pojawia nagwek. Kod mgby wyglda w taki sposb:
<% 'ten wiersz sprawdza w ptli kady rekord tabeli Do until RS.EOF 'ten wiersz wypisuje rekord Response.Write RS("TheData") 'zwiksza stanu licznika RecordsPrinted = RecordsPrinted + 1 'sprawdza czy wypisano 10 rekordw if RecordsPrinted MOD 10 = 0 then RESPONSE.Write "Nagwek" End if 'przejd do nastpnego rekordu RS.MoveNext Loop %>

Nagwek bdzie wypisywany po kadych dziesiciu rekordach, to znaczy kiedy wynikiem operacji RecordsPrinted MOD 10 bdzie zero. czenie cigw znakw w jeden pojedynczy cig nazywane jest skadaniem, a realizuje si je przez operator &. Wynikiem poniszego kodu
<% Dim OneString Dim TwoString OneString = "Hello" TwoString = OneString & "World!" Response.Write TwoString %>

bdzie pojawienie si tekstu "Hello World!" w przegldarce. Skadania mona dokona rwnie przekazujc wicej ni jeden cig znakw jako pojedynczy parametr:
<% Dim OneString Dim TwoString OneString = "Hello" TwoString = "World!" Response.Write TwoString & OneString %>

Zaokrglania liczb w kodzie dokonuje si przez par rnych mechanizmw. Moesz uy funkcji Int, ktra w prosty sposb obcina cz uamkow liczby:
<% Dim X Dim Y X = 3.14

117

ASP Kompendium
Y = int(X) Reaponse.Write Y %>

programisty

Wynikiem powyszego kodu bdzie wysanie do przegldarki cyfry 3. Moesz rwnie zaokrgla liczby przy uyciu funkcji Round. Przekazujesz funkcji liczb do zaokrglenia oraz ilo miejsc po przecinku, do ilu naley zaokrgli liczb. Jeli nie okrelisz iloci pozycji po przecinku, liczba zostanie zaokrglona do wartoci cakowitej.
<% Dim X 'zaokrgla do 3 X = Round(3.199) 'zaokrgla do 3.2 X = Round(3.199, 1) 'rwnie zaokrgla do 3.2 X = Round(3.199, 2) %>

Warunki
Czsto wystpuje potrzeba sprawdzania w kodzie pewnych wartoci i na ich podstawie przeprowadzania odpowiednich zada. W tym celu podczas tworzenia kodu strony ASP w jzyku VBScript moesz posuy si instrukcjami If i Select Case. Instrukcja If pozwala na sprawdzenie warunku. Jeli warunek zinterpretowany zostaje jako prawda, kod instrukcji If jest wykonywany. Jeli warunek oceniony zostaje jako fasz, to albo kod nie jest wykonywany, albo wykonywana jest ta cz kodu, ktra znajduje si po instrukcji Else. Kompilator interpretuje kad niezerow warto jako prawd, jedynie zero oceniane jest jako fasz. Dlatego kod:
If 5 then

bdzie za kadym razem interpretowany jako warto prawdziwa, poniewa cyfra 5 jest wartoci niezerow. Czsto bdziesz spotyka si z tego typu skadni, w ktrej nie dochodzi do porwnania, a jedynie do oceny wartoci. Na przykad jeli chcielibymy stworzy procedur, ktra wyszukuje okrelony znak w cigu, a nastpnie po jego pierwszym wystpieniu zamienia ten znak na jaki inny, mogaby ona wyglda tak:
<% Function ConvertIt(StringToConvert, ReplaceChar, ConversionChar) If Instr(StringToConvert, ReplaceChar) then 'tutaj znajduje si kod konwersji end if End Function %>

Zwr uwag na instrukcj If. adne wartoci nie s tutaj porwnywane, obliczane jest natomiast wyraenie. Funkcj uywan podczas obliczania jest Instr, ktra sprawdza obecno okrelonego cigu znakw w innym cigu. Jeli cig zostanie znaleziony, zwracane jest miejsce jego pierwszego pojawienia si. Nastpujce wywoanie:
Instr("Hello", "l")

Rozdzia 4 Podstawy ASP

118

zwrci liczb 3, poniewa szukana litera l pojawia si w sowie po raz pierwszy na trzecim miejscu. Jeli bdziemy chcieli znale w sowie liter z, wynikiem poprzedniego wywoania bdzie zero, poniewa ta litera nie pojawia si w testowanym cigu znakw. Tak wic w powyszej procedurze zamiany znakw, instrukcja If zinterpretuje swj warunek jako prawd, jeli funkcja Instr zwrci niezerow warto, co bdzie oznaczao znalezienie znaku w cigu. Jeli poszukiwany znak nie zostanie znaleziony, wyraenie zinterpretowane bdzie jako fasz, poniewa funkcja Instr zwrci warto zero. Wan spraw do zapamitania jest moliwo uycia prostego porwnania w instrukcji If, ale rwnie to, e moesz uy obliczonego wyraenia do okrelenia zachowania si instrukcji If. Instrukcji If moesz uywa na kilka rnych sposobw. Po pierwsze, instrukcja moe by uyta w jednym wierszu:
<% If Request.QueryString("TheNumber") = 5 then _ Response.Write "Zgadza si!<BR>" Response.Write "To wszystko" %>

Po pierwsze zwr uwag na znak _ w pierwszej linii. Spotkae si ju z nim wczeniej. Jest on nazywany znakiem kontynuacji i uywa si go do umieszczenia jednego wiersza kodu w kilku wierszach tekstu, aby uczyni kod bardziej czytelnym. W poprzednim przykadzie instrukcja If zawarta jest w jednym wierszu. Ocenia ona wyraenie, a jeli wyniesie ono 5, warunek instrukcji interpretowany jest jako prawda, a wtedy w oknie przegldarki pojawi si napis Zgadza si!, co pokazano na rysunku 4.8.

Rysunek 4.8. Rezultat wpisania poprawnej cyfry Zauwa, e przegldajcy stron widzi rwnie tekst kolejnego wiersza kodu To wszystko. Jeli odwiedzajcy wpisze inn cyfr ni pi, nie zobaczy wiadomoci Zgadza si!, lecz jedynie tekst To wszystko, poniewa ten wiersz kodu znajduje si poza instrukcj If. Do pojedynczego wiersza instrukcji If moesz doda rwnie instrukcj Else Kod tego wiersza bdzie uruchomiony wtedy, gdy warto wyraenia instrukcji If zinterpretowana zostanie jako fasz. Poniszy kod jest przykadem zastosowania instrukcji Else:
<%

119

ASP Kompendium
If Request.QueryString("TheNumber") = 5 then _ Response.Write "Zgadza si!<BR>" else _ Response.Write "le!<BR>" Response.Write "To wszystko" %>

programisty

Ten sam tekst bdzie wysany do przegldarki, jeli odwiedzajcy wpisze waciw liczb. W przeciwnym wypadku ujrz inny tekst, le!, jak to pokazano na rysunku 4.9.

Rysunek 4.9. Rezultat wpisania niepoprawnej cyfry Nie musisz ogranicza si do pojedynczego tylko wiersza kodu uruchamianego przez instrukcj If. Moesz tworzy cae bloki kodowe zarwno dla czci If, jak i czci Else.
<% If Request.QueryString("TheNumber") = 5 then Response.Write "<FONT SIZE=""+2"">" Response.Write "Zgadza si!<BR>" Response.Write "</FONT>" else Response.Write "<FONT SIZE=""-2"">" Response.Write "le!<BR>" Response.Write "</FONT>" end if Response.Write "To wszystko" %>

Zauwa, e znikny znaki kontynuacji. Kada z linii jest jednym wierszem kodu. Zwr rwnie uwag na podwjny cudzysw wok +2. Jest to sposb na umieszczenie cudzysowu w cigu znakw. Teraz rozpoznanie warunku jako prawdy przez instrukcj If spowoduje wykonanie wszystkich wierszy kodu, ktre znajduj si ponad instrukcj Else. W przeciwnym wypadku wykonane zostan trzy wiersze kodu

Rozdzia 4 Podstawy ASP

120

znajdujce si poniej instrukcji Else. Nastpnie bez wzgldu na warunek, wykonany zostanie kod ostatniego wiersza. Wynik udzielenia nieprawidowej odpowiedzi jest pokazany na rysunku 4.10.

Rysunek 4.10. Rezultat udzielenia niepoprawnej odpowiedzi w przykadzie z blokiem kodu W obrbie instrukcji If moe znale si rwnie instrukcja ElseIf, ktra sprawdza dodatkowy warunek, jeli pierwszy warunek If nie zosta speniony. Spjrz na poniszy blok kodu:
<% If Request.QueryString("TheAge") < 13 then Response.Write "Jeste dzieckiem" ElseIf Request.QueryString("TheAge") < 20 then Response.Write "Jeste nastolatkiem" ElseIf Request.QueryString("TheAge") < 40 then Response.Write "Jeste dorosy" ElseIf Request.QueryString("TheAge") < 60 then Response.Write "Masz dowiadczenie" Else Response.Write "Dobrze si bawisz" End If %>

Ten blok wywietla wiadomo w oparciu o wprowadzony wiek danej osoby. Na wstpie obliczana jest pierwotna instrukcja If. Jeli warto TheAge jest mniejsza od 13, wywietlona zostanie pierwsza wiadomo i kod przeskoczy do instrukcji End If bez sprawdzania pozostaych warunkw. Jeli pierwszy warunek instrukcji If nie jest prawdziwy, oznacza to, e zmienna TheAge musi mie warto wiksz lub rwn 13. Wtedy brany pod uwag jest drugi warunek:
ElseIf Request.QueryString("TheAge") < 20 then

W tym momencie kod sprawdza, czy dana osoba ma wicej ni 12, a mniej ni 20 lat. Jeli tak nie jest, kod wprowadzi nastpn instrukcj warunkow. Jeli warto zmiennej TheAge jest mniejsza od 20, to przed przejciem do End If wykonany zostanie blok kodu poniej instrukcji warunkowej.

121

ASP Kompendium

programisty

Kod przechodzi w ten sposb przez wszystkie instrukcje ElseIf. Jeli aden z warunkw instrukcji If i ElseIf nie okae si prawd, kod przejdzie do bloku Else. Pamitaj, e nie musisz uywa instrukcji Else. Jeli jej nie bdzie i aden z warunkw nie okae si prawdziwy, kod po prostu wychodzi z instrukcji If. Moesz rwnie zagnieda instrukcje If, to znaczy jedna instrukcja If moe znajdowa si w kolejnej:
<% If Request.QueryString("TheAge") < 13 then Response.Write "Jeste maym/" If Request.QueryString("Sex") = "Female" then Response.Write "dziewczynk" else Response.Write "chopcem" end if Response.Write "." ElseIf Request.QueryString("TheAge") < 20 then Response.Write "Jeste nastolatkiem" ElseIf Request.QueryString("TheAge") < 40 then Response.Write "Jeste dorosy" ElseIf Request.QueryString("TheAge") < 60 then Response.Write "Masz dowiadczenie" Else Response.Write "Dobrze si bawisz" End If %>

Kod ten podobny jest do poprzedniego przykadu, ale uyto tutaj dodatkowej instrukcji If. Teraz jeli pierwszy warunek bdzie prawdziwy, w przegldarce ukae si tekst Jeste maym/. Nastpnie szacowany jest kolejny warunek. W efekcie wywietlany jest dodatkowy tekst, ktrego tre zalena jest od tego, czy dana osoba jest pci mskiej czy eskiej. Bez wzgldu na wprowadzon warto, do przegldarki wysyana jest rwnie kropka. Tak wic przy zastosowaniu wewntrznej instrukcji If masz moliwo uruchomienia najpierw jednej czci kodu , a po przerwie zalenej od warunku zagniedonej instrukcji, wykonania jego dalszej czci. Instrukcje If mog by umieszczone bardzo gboko w kodzie, przez co istnieje dla nich wiele moliwych zastosowa. W instrukcjach If moesz rwnie stosowa operatory And i Or. Jeli uyty zostanie And, obydwa warunki musz zosta spenione. Przykadowo:
If Request.QueryString("TheAge") < 13 and _ Request.QueryString("Sex") = "Female" then

Obydwa warunki musz by prawdziwe. Dana osoba musi by pci eskiej i musi mie mniej ni 13 lat. Inaczej jest w wypadku tego kodu:
If Request.QueryString("TheAge") < 13 or _ Request.QueryString("Sex") = "Female" then

Ta instrukcja If obejmuje wszystkie osoby pci eskiej, a take wszystkich, ktrzy maj mniej ni 13 lat. Aby jej kod zosta wykonany, przynajmniej jeden z tych warunkw musi by speniony. Moesz czy ze sob warunki And i Or w celu tworzenia warunkw zoonych, ale w tym wypadku naley korzysta z nawiasw, aby okreli kolejno sprawdzania warunkw. Przykadowo:
If (LastName = "Flintstone" and FirstName = "Fred") _ Or FirstName = "Wilma" then

Rozdzia 4 Podstawy ASP

122

Zwr uwag na to, e wyraenie w nawiasie bdzie ocenione jako prawda, gdy imi i nazwisko osoby bdzie brzmiao Fred Flintstone. Warunek instrukcji bdzie prawdziwy rwnie w wypadku, gdy imi danej osoby, bez wzgldu na jej nazwisko, bdzie brzmiao Wilma. To co innego ni:
If LastName = "Flintstone" and (FirstName = "Fred" _ Or FirstName = "Wilma") then

Jedyn rnic midzy dwoma ostatnimi przykadami kodu polega na innym rozmieszczeniu nawiasw. Warunek tej instrukcji bdzie uznany za prawd tylko dla dwch osb: Freda Flintstonea i Wilmy Flintstone. Inn instrukcj warunkow, ktr moesz wykorzysta, jest Select Case, ktra zachowuje si bardzo podobnie do If uzupenionej o instrukcje ElseIf. Spjrz na ten przykad:
<% Select Case Request.QueryString("Quantity") Case 1 Response.Write "$50" Case 2 Response.Write "$90" Case 3 Response.Write "$130" Case 4 Response.Write "$150" Case Else Response.Write "$" & Request.QueryString("Quantity") * 40 End Select %>

Pierwszy wiersz instrukcji Select

Case

zawiera testowany warunek:

Select Case Request.QueryString("Quantity")

Potem nastpuje seria moliwych wartoci warunku oraz odpowiedzi na nie. Pierwsza z nich odpowiada wpisaniu liczby 1:
Case 1 Response.Write "$50"

Jeli tekst zmiennej rwny bdzie jeden, wykonany zostanie blok znajdujcy si poniej instrukcji. Tak samo bdzie w wypadku innych pozycji listy. Podobnie jak to byo z instrukcj If, kiedy jeden z blokw jest wykonywany inne s pomijane, a kod przeskakuje do instrukcji End Select. Jeli pierwszy warunek nie jest speniony, kod przechodzi do nastpnego. Jeli aden z warunkw nie jest rozpoznany jako prawdziwy, kod przechodzi do instrukcji Case Else, ktra jest odpowiednikiem czci Else instrukcji If.

Ptle
Mianem ptli okrela si fragment kodu, ktry jest wykonywany wielokrotnie. W tym podrozdziale przyjrzymy si trzem mechanizmom tworzenia ptli: Do Until, For...Next oraz For Each. W ptli Do Until zadanie wykonywane jest dopki wyraenie nie bdzie zinterpretowane jako prawda. Na przykad:
X = 4

123

ASP Kompendium
Do Until X = 5 Response.Write X X = X + 1 Loop

programisty

Ten kod przejdzie przez ptl jeden raz. Kiedy kod wejdzie w ptl, zmienna X bdzie porwnana do pitki. Poniewa podczas pierwszego przejcia przez ptl ma ona warto 4, wyraenie potraktowane zostanie jako fasz. Wtedy kod w ptli zostanie wykonany. W bloku kodu do zmiennej X dodaje si 1, wic kolejn wartoci zmiennej bdzie 5.Przy nastpnym przejciu przez wiersz Do Until, warto zmiennej X bdzie po raz kolejny sprawdzana. Tym razem jednak kod pominie ca ptl. Tutaj na przykad kod ptli nigdy nie bdzie wykonany:
X = 5 Do Until X = 5 Response.Write X X = X + 1 Loop

Poniewa X ma warto 5 ju na samym wstpie, wyraenie w wierszu Do wypadku kod przechodzi od razu do instrukcji Loop. W nastpnym przykadzie kod przejdzie przez ptl trzy razy:
X = 3 Do Until X > 5 Response.Write X X = X + 1 Loop

Until

jest prawd, a w takim

Podczas pierwszego przejcia warto X zmieniana jest na cztery, za drugim razem na pi. Poniewa pi jest ostatni liczb speniajc warunek X > 5, kod ponownie przejdzie przez ptl zmieniajc warto X na sze. Wtedy po raz pierwszy kod pominie ptl. Czsto bdziesz uywa instrukcji Do Until do przejcia kolejno przez zbir rekordw bazy danych. Tak samo czsto bdziesz wybiera poszczeglne rekordy z bazy danych, aby nimi operowa w rnorodny sposb bd prezentowa je uytkownikowi. Zwr uwag na nastpujcy blok pokazujcy wszystkie produkty, ktre odwiedzajcy sklep wirtualny umieci w koszyku na zakupy.
<% set conn = server.createobject ("adodb.connection") conn.open "Ecommerce", "sa", "yourpassword" set RSOrderItems = conn.Execute("select ItemID, " _ & "ItemName, ItemType, Quantity, TotalPrice, " _ & "DetailText from WIOrderItems where " _ & SessionID = " & Session("SessionID")) do until RSOrderItems.EOF %> <P>Item Name: <% Response.Write RSOrderItems("ItemType") %> <% Response.Write RSOrderItems("ItemName") %> <BR>Quantity: <% Response.Write RSOrderItems("Quantity") %> <BR>Price: <% Response.Write RSOrderItems("TotalPrice") %> <%

Rozdzia 4 Podstawy ASP


RSOrderItems.MoveNext Loop %>

124

O czeniu si i pracy z bazami danych pomwimy szerzej w rozdziale 14., nie przejmuj si wic, jeli nie potrafisz zrozumie powyszego kodu. Na wstpie zwr uwag na to, e kod skada si z trzech blokw: pierwszy z nich, zbudowany jedynie z kodu, zawiera informacje inicjujce; drugi czy w sobie HTML z wbudowanym w niego kodem; trzeci blok zawiera kod, ktry koczc ptl, odsya nas z powrotem do bloku pierwszego. Ptla zaczyna si w tym wierszu:
do until RSOrderItems.EOF

Bdziemy porusza si w ptli tak dugo, dopki bdziemy mieli rekordy do przetworzenia. Jeeli rekordw nie bdzie ju za pierwszym razem, kod w ptli nie bdzie w ogle wykonywany. Wewntrz ptli kade pole rekordu jest wpisywane do przegldarki. Nastpujcy wiersz, na przykad, wypisuje ilo danego produktu:
<BR>Quantity: <% Response.Write RSOrderItems("Quantity") %>]

Na samym kocu ptli kod przechodzi do kolejnego rekordu, ktry bdzie przetwarzany:
RSOrderItems.MoveNext

Nastpnie sowo kluczowe Loop odsya kod do instrukcji Do Until i ponownie sprawdzana jest warto wyraenia. Jeli istniej w bazie cztery rekordy, ktre naley wywietli, kod przejdzie przez ptl czterokrotnie. Jeli nie bdzie ani jednego rekordu, ptla zostanie w caoci pominita. Kolejnym sposobem na wielokrotn iteracj kodu jest ptla For...Next. Ilo przej przez ptl For...Next jest okrelona w kodzie liczbowo. Zamiast sprawdza wyraenie, jak to byo w wypadku ptli Do Until, ptla For...Next uruchamiana jest przy jednej liczbie, a jej dziaanie koczy si przy kolejnej. Na przykad:
<% Option Explicit Dim I For I = 1 to 3 Response.Write I & "<BR>" Next %>

W tym przykadzie kod bloku For...Next zostanie wykonany trzy razy. Na pocztku do zmiennej I wpisywana jest warto 1. Poniewa jeden naley do zakresu od 1 do 3, kod uruchomi blok For...Next. Nastpnie warto zmiennej I jest inkrementowana. Teraz wynosi wic ju 2, czyli w dalszym cigu naley do okrelonego zakresu. Kod ponownie przejdzie przez ptl i warto I bdzie wynosia 3. Po kolejnym przejciu bdzie to ju 4 (poza zakresem od 1 do 3), a wtedy kod przeskoczy ptl bez jej wykonywania. Jednake ptla nie musi by uruchamiana przy pierwszej wartoci rwnej jeden. Zwr uwag na ten przykad kodu:
<% Option Explicit Dim I For I = -3 to 6 Response.Write "<FONT SIZE=""" & I & """>Witaj</FONT><BR>" Next

125

ASP Kompendium
%>

programisty

Ta ptla dziaa dla liczb z zakresu od 3 do 6. Wynikiem jest widok pokazany na rysunku 4.11.

Rysunek 4.11. Wynik zastosowania ptli For...Next Kolejnym narzdziem na umieszczenie bloku kodu w ptli jest instrukcja For Each, ktra jest bardzo podobna do For...Next z tym jednak wyjtkiem, e przechodzi ona kolejno przez zbir pozycji. Poniszy kod przechodzi przez zbir o nazwie ServerVariables:
<% Option Explicit Dim TheVariable For Each TheVariable in Request.ServerVariables Response.Write TheVariable & " - " _ & Request.ServerVariables(TheVariable) _ & "<BR>" Next %>

Jak zostanie to omwione w rozdziale 7., zbir ServerVariables zawiera informacje o gociach i ich przegldarkach. Kod przechodzi kolejno przez kad pozycj zbioru. Kade przejcie przez ptl instrukcji For Each odbywa si przy innej zmiennej serwera. Kod dziaa dotd, a nie zostan wywietlone wszystkie zmienne serwera. Wynik wykonania kodu prezentuje rysunek 4.12.

Rozdzia 4 Podstawy ASP

126

Rysunek 4.12. Wyjcie ServerVariables

Konwersja zmiennych
Przyjrzyj si nastpujcemu kodowi:
<% If "12/1/1999" > "9/1/1966" then Respnse.Write "To dziaa" else Response.Write "To nie powinno by widoczne" end if %>

Data 1 grudnia 1999 jest pniejsza od 1 wrzenia 1966 roku. Spodziewasz si wobec tego, e przegldarka wywietli tekst To dziaa. Ale faktyczny wygld ekranu przedstawia rysunek 4.13.Wywietlony tam tekst nie jest tym, ktrego oczekiwae. Problem ley w tym, e kompilator przeprowadza operacj porwnania tekstu, a nie daty. Podczas porwnania tekstu kolejne znaki s zestawiane ze sob, dopki jeden z nich nie zostanie okrelony jako wikszy. Tak wic najpierw porwnywane s ze sob pierwsze dwie cyfry: 1 i 9. Cyfra 9 jest wiksza od jedynki , wic cae wyraenie zinterpretowane zostanie jako fasz, a przy tym warunku kod przechodzi do instrukcji Else.

127

ASP Kompendium

programisty

Rysunek 4.13. Wynik porwnania tekstu Z powodu tego typu niespodziewanych bdw, czasami bdziesz musia dokona konwersji danych. W stronach ASP moesz wykorzysta wiele funkcji konwersji. Jeli poprzedni kod przebudujemy w nastpujcy sposb:
<% If Cdate("12/1/1999") > Cdate("9/1/1966") then Respnse.Write "To dziaa" else Response.Write "To nie powinno by widoczne" end if %>

to otrzymamy poprawny rezultat, pokazany na rysunku 4.14.

Rozdzia 4 Podstawy ASP

128

Rysunek 4.14. Wynik poprawnej konwersji daty Rnica pomidzy tymi dwoma blokami polega na uyciu w drugim z nich funkcji CDate, ktra konwertuje dan na dat. Jeli zmienna nie jest dat, funkcja zwrci bd. VBScript jest wyposaony w kilka funkcji podobnych do CDate. Ich nazwy rozpoczynaj si od litery C, co oznacza, e ich przeznaczeniem jest konwersja. Dalsza cz nazwy okrela wyjciowy typ danych, na ktre funkcja dokonuje konwersji. Na przykad CInt zamienia dan na liczb cakowit, a Cbool na format booleowski.

Funkcje daty i czasu


Zapewne ju zauwaye, analizujc kilka przytoczonych w ksice przykadw kodu, e czsto zachodzi potrzeba operowania datami. W VBScripcie masz do dyspozycji wiele odpowiednich do tego funkcji. Czasami bdziesz musia wykorzysta aktualn dat i czas. Moe zaj potrzeba stworzenia zapytania wykorzystujcego aktualne rekordy lub umieszczenia znacznika czasu w rekordzie bazy danych; by moe bdziesz rwnie chcia wywietla czas i dat na twojej stronie WWW. Czynnoci takie mog by zrealizowane przez trzy funkcje: Date, Time i Now. Funkcja Date zwraca aktualn dat systemow, funkcja Time aktualny czas systemowy, natomiast funkcja Now zarwno dat, jak i czas. Pamitaj jednak, e aktualne wartoci systemowe to takie, ktre serwer uznaje za aktualne. Skadnia tych funkcji jest nastpujca:
<% Response.Write Date & "<BR>" Response.Write Time & "<BR>" Response.Write Now %>

Metoda Response.Write (omwiona w rozdziale 6.) wpisuje tekst do przegldarki. Funkcje nie pobieraj parametrw, a ich wyjcie pokazuje rysunek 4.15.

129

ASP Kompendium

programisty

Rysunek 4.15. Wynik funkcji Date, Time i Now Czsto bdziesz chcia korzysta jedynie z czci daty. Na przykad moesz potrzebowa tylko miesica, aby zbudowa list urodzin pracownikw w biecym miesicu:
If Month(RS("BirthDate")) = Month(Date) then

Ten kod zrealizuje to zadanie. Funkcja Month wypisuje numer miesica aktualnej daty. Po znaku rwnoci pojawia si funkcja Date, ktra zwraca dat systemow, a nastpnie funkcja Month, ktra wybiera z daty aktualny miesic. Dostpne s rozmaite funkcje, ktre realizuj wyodrbnianie czci daty lub czasu. Poniszy kod jest ich przegldem:
<% Response.Write "Rok: " & Year(Date) & "<BR>" Response.Write "Numer miesica: " & Month(Date) & "<BR>" Response.Write "Dzie miesica: " & Day(Date) & "<BR>" Response.Write "Numer dnia tygodnia: " & WeekDay(Date) & "<BR>" Response.Write "Godzina: " & Hour(Time) & "<BR>" Response.Write "Minuta: " & Minute(Time) & "<BR>" Response.Write "Sekunda: " & Second(Time) & "<BR>" %>

Rezultat widoczny jest na rysunku 4.16.

Rozdzia 4 Podstawy ASP

130

Rysunek 4.16. Wynik wyodrbniania funkcji Date i Time Czsto chcesz zna odstp czasu pomidzy dwoma datami. Na przykad chcesz wiedzie jak dawno dany klient paci rachunek. Moe bdziesz chcia wyliczy jak dugo okrelony pracownik pracuje w twojej firmie. Moe zajdzie potrzeba obliczenia czyjego wieku. Tego typu zadania realizuje funkcja DateDiff. Funkcja DateDiff odejmuje od siebie dwie daty i zwraca wynik w wybranych przez ciebie jednostkach czasu. Tymi jednostkami mog by na przykad godziny czy te lata. Format funkcji jest nastpujcy:
DateDiff (UnitForResult, DateSubtracting, DateSubtractedFrom)

Moliwoci wyboru pierwszego parametru prezentuje tabela 4.1. Tabela 4.1. Wyjciowe jednostki funkcji DateDiff. Jednostka Znaczenie yyyy Rok q Kwarta m Miesic d Dzie h Godzina n Minuta s Sekunda Jeli wic chciaby wiedzie ile miesicy upyno od pocztku dwudziestego wieku, kod wygldaby w ten sposb:
<% Response.Write DateDiff("m", "1/1/1901", Date) %>

Jeli chciaby zna ilo dni, ktre upyny od planowego terminu zapaty nalenoci przez klienta, kod mgby by nastpujcy:
<% Response.Write DateDiff("d", RS("DueDate"), Date)

131

ASP Kompendium
%>

programisty

A tak obliczyby wiek pracownika:


<% Response.Write DateDiff("yyyy", RS("EmpAge"), Date) %>

Czasami jednak bdziesz chcia wyliczy jedn dat na podstawie drugiej. Moe to by jutrzejsza data, okrelajca dzie wysyki danego produktu lub dzie zapaty nalenoci, obliczony jako trzydziesty dzie po dacie wystawienia rachunku. By moe bdziesz rwnie chcia zaplanowa wykonanie okrelonych zada w oparciu o dania. Wszystkie te przypadki wymagaj wykonania operacji dodawania bd odejmowania dat. Temu celowi suy funkcja DateAdd. Format funkcji DateAdd jest nastpujcy:
DateAdd(Unit, Amount, DateToChange)

Pierwszy parametr Unit to jednostka operacji. Moesz dodawa lub odejmowa lata, miesice i wszystkie inne jednostki czasu wyszczeglnione w tabeli 4.1. Drugi parametr, Amount, okrela ilo jednostek czasu, ktre chcesz doda bd odj. Trzeci parametr, DateToChange, jest dat, do ktrej bdziesz dodawa lub od ktrej bdziesz odejmowa okrelon wczeniej ilo jednostek. Funkcja zwraca dat w oparciu o wprowadzone parametry. Jeli chciaby obliczy jutrzejsz dat, kod mgby by taki:
<% Response.Write DateAdd("d", 1, Date) %>

Jeli chciaby obliczy dat, jaka bya miesic temu, uyjesz jako pierwszego parametru "m" (Jednostka) oraz drugiego 1 (Ilo):
<% Response.Write DateAdd("m", -1, Date) %>

Aby obliczy, ktra godzina bdzie za trzy godziny, kod bdzie nastpujcy:
<% Response.Write DateAdd("h", 3, Time) %>

Aby osign podany wynik, czasami zajdzie potrzeba poczenia kilku funkcji opisanych w tym podrozdziale. Powiedzmy, e chcesz wpisa do przegldarki zakres dni, ktre upyny od pocztku roku:
<% Response.Write "1/1/" & Year(Date) & " do " & Date %>

Jeli chcesz pozna ostatni dzie biecego miesica, moesz napisa taki kod:
<% Response.Write DateAdd("d", -1, Month(DateAdd("m", 1, Date)) _

Rozdzia 4 Podstawy ASP


& "/1/" & Year(DateAdd("m", 1, Date))) %>

132

Najlepsz metod na odczytanie takich kodw jest przechodzenie od rodka kodu na zewntrz. Metoda ta wietnie sprawdza si rwnie podczas tworzenia logicznej konstrukcji kodu. Na najniszym poziomie ostatniego przykadu kodu znajduje si funkcja Date, ktra zwraca aktualn dat. Pierwsze jej wystpienie jest wykorzystywane przez funkcj DateAdd do okrelenia daty pniejszej o miesic od aktualnej. Z tej wartoci wyodrbniany jest miesic. Jest on skadany z tekstem "/1/". Mamy wic ju miesic i dzie. Nastpnie doczamy do tego rok kolejnego miesica po biecym. W tym momencie cay cig
Month(DateAdd("m", 1, Date)) & "/1/" & Year(DateAdd("m", 1, Date))

jest interpretowany jako pierwszy dzie kolejnego miesica. Ta warto z kolei wykorzystywana jest jako trzeci parametr funkcji DateAdd, ktra odejmuje od tej daty jeden dzie, otrzymujc w wyniku ostatni dzie biecego miesica.

Zatwierdzanie obecnoci i typw danych


Jeli umoliwiasz odwiedzajcym wejcie na twoj witryn, czasami bdziesz musia zatwierdza dane, ktre oni wprowadzaj. Bdziesz musia wiedzie, czy wprowadzona dana jest dat, czy liczb. Moesz sprawdza, czy okrelone pole zostao wypenione lub czy dana naley do poprawnego zakresu. W tym podrozdziale przyjrzymy si funkcjom realizujcym tego typu zadania. Jedn z funkcji, z ktr czsto ju si spotykalimy, jest funkcja IsEmpty, ktra sprawdza obecno danego elementu. Czsto korzysta si z niej do sprawdzenia, czy pole formularza HTML zostao wypenione. Taki mechanizm tekstowy jest w tym wzgldzie bardzo pomocny. Czsto bdziesz chcia uj wszystkie moliwoci formularza w jedn stron ASP. W jednym stanie strona mogaby wywietla formularz z polami, ktre odwiedzajcy musiaby wypeni. W stanie kolejnym odwiedzajcy przesyaby formularz naciskajc przycisk lub grafik. Nastpnie kod strony ASP podejmowaby odpowiedni akcj przetworzenia danych. Sposobem na okrelenie stanu strony jest sprawdzenie, czy przycisk przesania formularza zosta nacinity. Robi si to przy uyciu funkcji IsEmpty. Zwr uwag na formularz pokazany na rysunku 4.17.

Rysunek 4.17. Przykadowy formularz okrelajcy stan przy uyciu funkcji IsEmpty

133

ASP Kompendium

programisty

Kiedy odwiedzajcy wywoaj t stron, powinni ujrze formularz. Gdy nastpnie nacisn przycisk Logowanie, zobacz inn stron, ktr przestawia rysunek 4.18.

Rysunek 4.18. Widok strony po przesaniu formularza Jeli obydwie strony maj by wykonane w ramach jednej strony ASP, musisz uy funkcji IsEmpty do okrelenia stanu przycisku Logowanie, a nastpnie podj odpowiedni akcj w oparciu o wynik funkcji:
<% if not isempty(Request.Form("LogIn")) then set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSUser = conn.Execute("select UserName from C1Login " _ & "where UserName = '" & Request.Form("UserName") _ & "' and Password = '" & Request.Form("Password") _ & "'") if RSUser.EOF then TheMessage = "Wprowadzie niewaciwe dane. " _ & "Sprbuj jeszcze raz" else TheMessage = "Jeste zalogowany!" end if else TheMessage = "Poniej wpisz nazw i haso" end if %>

Funkcja IsEmpty zwraca prawd, jeli testowany element jest pusty lub nie jest obecny. Zwraca natomiast fasz, jeli element posiada warto. W ten sposb przez instrukcj If:
if not isempty(Request.Form("LogIn")) then

Rozdzia 4 Podstawy ASP

134

oraz przy uyciu operatora Not sprawdzamy, czy przycisk Logowanie jest obecny i przycinity. Jeli tak jest, wykonywany jest kod przetwarzajcy zawarto pl formularza. Kiedy uzupeniasz baz o nowe dane lub kiedy musisz wykona obliczenia na pewnych danych (w obydwu z tych przypadkw operacje te dokonywane s poprzez wejcie uytkownika), musisz rozpoznawa, czy typ wprowadzonej wartoci jest poprawny. Musisz wiedzie, czy wprowadzana data jest faktycznie dat, a liczba liczb. Aby sprawdzi, czy dana jest dat, moesz skorzysta z funkcji IsDate. Zwraca ona prawd wtedy, gdy przekazana warto jest dat, w przeciwnym razie zwracany jest fasz. Jeli miaby formularz HTML, mgby uy funkcji IsDate w celu przetestowania wartoci wprowadzonej przez odwiedzajcego do formularza:
<% Option Explicit Dim TheMessage If IsDate(Request.Form("BirthDate")) then TheMessage = "Wprowadzie dat!" Else TheMessage = "Wprowadzie niewaciw warto w pole daty urodzenia!" End If %>

W tym przykadzie funkcja IsDate testuje pole formularza HTML o nazwie BirthDate. Nastpnie kod generuje wiadomo, ktra bdzie wywietlana w HTML-u, ktrej tre bdzie zaleaa od danych wprowadzonych przez uytkownika. Aby sprawdzi, czy zmienna, waciwo czy pole bazy danych jest liczb, moesz uy funkcji IsNumeric. Podobnie jak w wypadku funkcji IsDate, IsNumeric zwraca prawd bd fasz. Prawda zwracana jest wtedy, gdy przekazana funkcji warto jest liczb, w przeciwnym razie wartoci wyjciow bdzie fasz. Jeli chciaby wykorzysta funkcj do testowania wejcia uytkownika w polu formularza HTML, kod mgby wyglda tak:
<% Option Explicit Dim TheMessage If IsNumeric(Request.Form("Quantity")) then TheMessage = "Wprowadzie poprawn ilo!" Else TheMessage = "Wprowadzie niewaciw warto w polu iloci!" End If %>

Kod wywietli tekst wiadomoci, ktrej tre bdzie zaleaa od wartoci wprowadzonej przez odwiedzajcego.

Techniki zatwierdzania danych


Czsto bdzie zachodzia potrzeba zatwierdzania zakresu liczby czy daty. Na przykad data urodzenia powinna by dat, a oprcz tego nie moe by dat przysz; podobnie ilo produktu nie moe by liczb ujemn ani nie moe przekracza ustalonej grnej granicy. W tym podrozdziale poznamy kody, ktre pomagaj rozwizywa takie kwestie zwizane z zatwierdzaniem. Jeli musisz stwierdzi, czy podana data urodzenia nie jest dat przysz, twj kod mgby wyglda tak:
<% Option Explicit Dim TheMessage If IsDate(Request.Form("BirthDate")) then If Cdate(Request.Form("BirthDate")) <= Date then

135

ASP Kompendium
TheMessage = "Warto poprawna" Else TheMessage = "Data urodzenia nie moe by dat przysz!" End If Else TheMessage = "Warto, ktr wprowadzie, nie jest dat" End If %>

programisty

Zauwa, w jaki sposb zastosowanie akapitw poprawio czytelno struktur instrukcji If. Ponadto zwr uwag na funkcj Date, ktra uyta zostaa do porwnania daty wprowadzonej z dat systemow. Jak ju si dowiedziae z treci tego rozdziau, zastosowanie funkcji CDate byo konieczne, aby porwnanie w instrukcji If byo porwnaniem daty, a nie tekstu. Moesz rwnie ustali doln granic dla wprowadzanej daty urodzenia, na przykad 150 lat wstecz. Poniszy kod zawiera to dodatkowe sprawdzanie daty:
<% Option Explicit Dim TheMessage If IsDate(Request.Form("BirthDate")) then If Cdate(Request.Form("BirthDate")) > Date then TheMessage = "Data urodzenia nie moe by dat przysz!" ElseIf DateDiff("yyyy", Request.Form("BirthDate"), Date) > 150 TheMessage = "Poprawna data urodzenia nie zostaa wprowadzona!" Else TheMessage = "Warto poprawna" End If Else TheMessage = "Warto, ktr wprowadzie, nie jest dat" End If %>

Dodatkowa instrukcja ElseIf uywa funkcji DateDiff w celu okrelenia iloci lat pomidzy aktualn dat a dat urodzenia wprowadzon przez odwiedzajcego. Jeli rnica ta wynosi wicej ni 150 lat, wywietlana jest wiadomo o bdzie. Kiedy dana jest liczb, czsto wystpuje potrzeba ustalenia dla niej dolnej i grnej granicy. Jeli dysponujesz polem iloci wypenianym przez goci witryny, to chciaby, aby podana warto nie przekraczaa pewnych rozsdnych granic. Tak moliwo zapewnia poniszy kod:
<% Option Explicit Dim TheMessage If IsNumeric(Request.Form("Quantity")) then If CInt(Request.Form("Quantity")) < 1 then TheMessage = "Musisz zamwi przynajmniej jedn rzecz!" ElseIf CInt(Request.Form("Quantity")) > 250 then TheMessage = "Ilo nie moe by wiksza od 250!" Else TheMessage = "Zamwienie przyjte" End If Else

Rozdzia 4 Podstawy ASP


TheMessage = "Ilo musi by liczb!" End If %>

136

W tym kodzie uyto funkcji CInt. Dziki niej dokonujemy konwersji podanej wartoci na warto cakowit, tak wic realizujemy porwnanie liczbowe, a nie porwnanie tekstu.

Formatowanie liczb, dat i kwot pieninych


Umieszczajc na swojej stronie ASP informacje o liczbach, datach oraz kwotach chciaby, aby byy one wywietlane wsplnie z odpowiednimi znakami interpunkcyjnymi. Na przykad chcesz, aby liczby miay przecinki we waciwym miejscu lub dzie, miesic i rok byy oddzielone od siebie znakiem /. W tym podrozdziale omwimy funkcje wspomagajce takie zadania. Funkcja FormatDateTime pozwala na formatowanie daty lub czasu, lub obu tych wartoci jednoczenie. Funkcja ta ma nastpujc skadni:
FormatDateTime(DateToFormat, HowToFormat)

Pierwszy parametr to data lub czas, ktr chcesz sformatowa. W drugim parametrze okrelasz sposb, w jaki chcesz wywietla dat lub czas. Poniszy kod prezentuje przegld rnych dostpnych formatw wyjciowych:
<% Response.Write "Format oglny (Domylny): " Response.Write FormatDateTime(Now,0) & "<P>" Response.Write "Data duga: " Response.Write FormatDateTime(Now,1) & "<P>" Response.Write "Data krtka: " Response.Write FormatDateTime(Now,2) & "<P>" Response.Write "Czas dugi: " Response.Write FormatDateTime(Now,3) & "<P>" Response.Write "Czas krtki: " Response.Write FormatDateTime(Now,4) %>

Wynik uycia rnych formatw wywietlania czasu prezentuje rysunek 4.19.

137

ASP Kompendium

programisty

Rysunek 4.19. Wyjcie funkcji FormatDateTime Zauwa, e Format oglny jest wartoci domyln, dlatego jeli nie okrelisz adnych parametrw, wywietlony zostanie wanie ten format. Poza tym w wywoaniu zastosowano funkcj Now. Z wyniku tej funkcji podczas formatowania wyodrbniana jest, w zalenoci od potrzeb, data lub czas. Funkcja FormatCurrency pozwala na formatowanie wartoci pieninych. Pamitaj, e sformatowana kwota zostanie opatrzona oznaczeniem tej waluty, ktra zdefiniowana zostaa na komputerze gocia. Funkcja ma nastpujc posta:
FormatCurrency(ValueToConvert, NumDecimalPlaces, LeadingZero, _ NegsInParans, GroupNumbers)

Funkcja zwraca kwot pienin sformatowan jako cig. Wszystkie parametry, oprcz pierwszego, s fakultatywne. Domylne wartoci parametrw s zalene od domylnych ustawie systemu operacyjnego gocia. Zwykle wic funkcj t wywouje si bez okrelania dodatkowych parametrw. Pierwszy parametr, ValueToConvert, jest wartoci, ktr chcesz sformatowa. Drugi, NumDecimalPlaces, okrela ilo wywietlanych miejsc po przecinku. Trzeci parametr, LeadingZero, pozwala na wczenie lub wyczenie zera wiodcego dla liczb, ktrych warto bezwzgldna jest mniejsza od 1. Parametr NegsInParans pozwala na wywietlanie liczb ujemnych albo ze znakiem, albo w nawiasie. Dziki ostatniemu parametrowi, GroupNumbers, moesz wywietli du kwot pienin jako jedn grup cyfr, bez przecinkw oddzielajcych od siebie setki, tysice, miliony itd. Kilka wywoa funkcji przedstawiono poniej:
<% Response.Write FormatCurrency(12345.67) & "<P>" Response.Write FormatCurrency(-12345.67) & "<P>" Response.Write FormatCurrency(12345.67,3) & "<P>" Response.Write FormatCurrency(.67, ,0) & "<P>" Response.Write FormatCurrency(-12345.67,,,0) & "<P>" Response.Write FormatCurrency(12345.67,,,,0) & "<P>" %>

Rozdzia 4 Podstawy ASP

138

Zauwa, e jeli chcesz w wywoaniu pomin niektre parametry, a niektre okreli, musisz zastosowa odpowiedni ilo dodatkowych przecinkw. Wyjcie kodu pokazuje rysunek 4.20.

Rysunek 4.20. Wyjcie funkcji FormatCurrency Funkcja FormatNumber jest bardzo podobna do FormatCurrency z t tylko rnic, e nie wywietla ona symbolu waluty. Ma ona nastpujcy format:
FormatNumber(ValueToConvert, NumDecimalPlaces, LeadingZero, _ NegsInParans, GroupNumbers)

Podobnie jak poprzednio, rwnie funkcja FormatNumber posiada parametry okrelajce ilo miejsc po przecinku, obecno zera wiodcego, wywietlanie minusa dla liczb ujemnych oraz grupowanie cyfr czci cakowitej. Przykady uycia funkcji wyszczeglniono poniej:
<% Response.Write FormatNumber(.67) & "<P>" Response.Write FormatNumber(-12345.67) & "<P>" Response.Write FormatNumber(12345.67123456,5) & "<P>" Response.Write FormatNumber(.67, ,0) & "<P>" Response.Write FormatNumber(-12345.67,,,0) & "<P>" Response.Write FormatNumber(987654321.1234,,,,0) & "<P>" %>

Wyniki tych wywoa pokazuje rysunek 4.21.

139

ASP Kompendium

programisty

Rysunek 4.21. Wyjcie funkcji FormatNumber Inn funkcj formatujc, o ktrej naley wspomnie w tym podrozdziale jest FormatPercent. Jest ona podobna do dwch poprzednich z t tylko rnic, e przekazan warto funkcja mnoy przez 100, a nastpnie dodaje do wyniku symbol procentw. Przyjmuje ona nastpujc posta:
FormatPercent(ValueToConvert, NumDecimalPlaces, LeadingZero, _ NegsInParans, GroupNumbers)

Pierwszy parametr jest formatowan liczb i to ta wanie warto jest mnoona razy 100. Reszta parametrw jest fakultatywna, a ich domylne ustawienia zale od ustawie systemu. Wywoania funkcji FormatPercent mog by nastpujce:
<% Response.Write FormatPercent(.67) & "<P>" Response.Write FormatPercent(-.67) & "<P>" Response.Write FormatPercent(23.67) & "<P>" Response.Write FormatPercent(23.67, 0) & "<P>" %>

Wyjcie tych wywoa prezentuje rysunek 4.22.

Rozdzia 4 Podstawy ASP

140

Rysunek 4.22. Wyjcie funkcji FormatPercent Czasami jednak same wywoania nie wystarczaj. Szczeglnie w wypadku dat przekonasz si, e musisz wyj poza gotowe formaty i tworzy swoje wasne. Uywajc funkcji daty (omwionych wczeniej w tym rozdziale) do wyodrbniania bd czenia ze sob czci daty, moesz znale rozwizanie odpowiadajce twoim potrzebom.

Operowanie cigami
Przy wywietlaniu informacji lub przy uzyskiwaniu ich od odwiedzajcych stron czsto bdziesz musia operowa cigami. By moe zajdzie potrzeba zmiany ich wielkoci liter, podzielenia, zmiany bd wyszukania cigw. Niniejszy podrozdzia omawia funkcje realizujce takie zadania. Na pocztku przyjrzymy si dwm funkcjom zmieniajcym wielko liter w cigu LCase i UCase. Funkcja LCase zamienia wszystkie litery cigu na mae, natomiast funkcja UCase dokonuje konwersji na due litery. Oto przykad uycia funkcji LCase:
<% Option Explicit Dim StringToConvert StringToConvert = "HELLO" Response.Write LCase(StringToConvert) %>

Do przegldarki wysany zostanie cig "hello". A teraz przykad uycia funkcji UCase:
<% Option Explicit Dim StringToConvert StringToConvert = "hello" Response.Write UCase(StringToConvert) %>

Tym razem w przegldarce pojawi si cig "HELLO".

141

ASP Kompendium

programisty

Funkcje te oka si uyteczne podczas pracy ze starszymi systemami baz danych, ktre nie toleruj maych liter. Kolejnym zastosowaniem powyszych funkcji jest konwersja danych na potrzeby tych systemw baz danych, ktre uwzgldniaj wielko liter. Moliwo wydzielenia czci z cigu znakw w stronach ASP daj funkcje Left, Right oraz Mid. Wydzielenie cigu czasami jest konieczne podczas obsugi danych przekazywanych twojemu kodowi, choby wtedy, gdy czci jednego cigu musz by wywietlone w osobnych polach. Funkcje Left, Right oraz Mid pomog w realizacji tego typu zada, ale jak si zaraz przekonasz, czsto podczas dzielenia cigu bdzie trzeba wykorzystywa funkcje Instr i Len. Funkcja Left pozwala na wydzielenie czci cigu patrzc od lewej jego strony. Skadnia funkcji jest nastpujca:
Left(StringToChop, NumCharacters)

Pierwszy parametr jest cigiem, z ktrego bdziesz wycina znaki. Drugi parametr zawiera ilo znakw, ktre chcesz wydzieli. Na przykad:
<% Option Explicit Dim StringToChop StringToChop = "New Mexico" Response.Write Left(StringToChop, 3) %>

Do przegldarki wpisany zostanie tekst "New". Funkcja Right wydziela znaki cigu patrzc od jego prawej strony. Skadnia funkcji:
Right(StringToChop, NumCharacters)

Pierwszy parametr jest cigiem, z ktrego chcesz wydzieli znaki. Drugi parametr okrela ilo wydzielanych znakw, co pokazano poniej:
<% Option Explicit Dim StringToChop StringToChop = "New Mexico" Response.Write Right(StringToChop, 6) %>

Tym razem do przegldarki wysana zostanie tekst "Mexico". Funkcja Mid zwraca znaki wydzielone ze rodka cigu. Jej skadnia jest nieco inna ni w przypadku dwch pozostaych funkcji:
Mid(StringToChop, StartPosition, NumCharacters)

Pierwszy parametr jest cigiem znakw, z ktrego chcesz wydziela znaki. Drugi parametr okrela pozycj pierwszego znaku wydzielanego cigu. Trzeci parametr, opcjonalny, okrela ilo znakw, ktre chcesz wyci. Jeli nie okrelisz tego parametru, funkcja zwrci wszystkie znaki od pozycji pocztkowej (okrelonej przez drugi parametr) do koca cigu. Poniszy kod prezentuje wykorzystanie funkcji Mid:
<% Option Explicit

Rozdzia 4 Podstawy ASP


Dim StringToChop StringToChop = "New Mexico" Response.Write Mid(StringToChop, 5, 3) Response.Write Mid(StringToChop, 5) %>

142

Pierwszym tekstem wpisanym do przegldarki byby "Mex", poniewa parametry okrelaj pity znak cigu jako pocztkowy oraz ilo wydzielanych znakw trzy. Jednak kolejny wiersz wpisze do przegldarki tekst "Mexico". Pozycja pocztkowa w obu instrukcjach jest ta sama, ale brak trzeciego parametru w drugiej instrukcji Response.Write powoduje, e wszystkie znaki poczwszy od pitego, a skoczywszy na ostatnim, znajd si w przegldarce. Jak wspomniano wczeniej, podczas dzielenia cigw przy uyciu wyej opisanych funkcji, bdziesz musia wykorzysta funkcje Instr i Len. Funkcja Len zwraca ilo znakw w cigu. Ma nastpujc skadni:
Len(StringToMeasure)

Zmienn przekazywan funkcji jest nazwa cigu, ktrego dugo chcesz sprawdzi. Ta dugo jest zwracana przez funkcj. Przykadowo:
<% Option Explicit Dim StringToMeasure StringToMeasure = "New Mexico" Response.Write Len(StringToMeasure) %>

Do przegldarki wpisana zostaje liczba 10. Funkcja Instr sprawdza obecno okrelonego cigu znakw w innym cigu. Gdy zostaje znaleziony, funkcja zwraca pozycj znaku, gdzie cig zosta znaleziony. Jeli poszukiwany cig nie jest czci testowanego cigu, funkcja zwraca warto zero. Skadnia funkcji jest nastpujca:
Instr(StartingPosition, String2Search, SearchString, ComparisonType)

Parametr drugi i trzeci musz by podane. Drugi parametr jest cigiem, ktry przeszukujesz. Trzeci parametr reprezentuje cig lub znak, ktrego szukasz. Parametr pierwszy, fakultatywny, okrela pozycj, od ktrej chcesz rozpocz przeszukiwanie. Jeli nie zostanie okrelony, pozycj startow bdzie pocztek cigu. Czwarty parametr okrela, czy typ porwnania ma by binarny czy tekstowy. Podczas porwnania na poziomie binarnym rozpoznawana jest wielko liter; nie znalazby na przykad litery D w sowie duy. Natomiast podczas porwnania tekstu wielko liter nie jest wana, tak wic wynik poszukiwania litery D w sowie duy byby pozytywny. Domyln wartoci parametru jest porwnanie binarne. Jeli chciaby okreli typ porwnania wasnorcznie, dla binarnego wpisz 0, a dla tekstowego 1. Kilka przykadw pomoe wytumaczy sposb wykorzystania tej funkcji.
<% Option Explicit Dim String2Search Dim SearchString String2Search = "Mississippi" SearchString = "s" Response.Write Instr(String2Search, SearchString) '3 jest wpisywane do przegldarki Response.Write Instr(3, String2Search, SearchString)

143

ASP Kompendium
'3 jest wpisywane do przegldarki w dalszym cigu _ poniewa 3 pozycja jest punktem startowym Response.Write Instr(5, String2Search, SearchString) '6 jest wpisywane do przegldarki SearchString = "Z" Response.Write Instr(String2Search, SearchString) '0 jest wpisywane do przegldarki, poniewa cig nie zosta znaleziony SearchString = "P" Response.Write Instr(String2Search, SearchString) 'znowu 0, poniewa wana jest wielko liter Response.Write Instr(1 ,String2Search, SearchString, 1) 'Porwnanie tekstu, wic wynikiem bdzie 9 %>

programisty

Kolejn funkcj, bardzo podobn do Instr, jest funkcja InstrRev. Rnica pomidzy tymi dwoma funkcjami polega na tym, e funkcja InstrRev zaczyna przeszukiwanie cigu od jego koca, podajc jednak pozycj znalezionego znaku liczc od przodu. Skadnia funkcji jest nastpujca:
InstrRev(StartingPosition, String2Search, SearchString, ComparisonType)

Drugi parametr okrela cig, ktry przeszukujesz, trzeci jest szukanym cigiem. Pozostae dwa parametry s fakultatywne. Pierwszy z nich to pozycja startowa, od ktrej nale zacz przeszukiwanie. Przez okrelenia ostatniego parametru wybierasz binarny bd tekstowy typ porwnania. Poniszy blok kodu demonstruje sposb wykorzystania funkcji:
<% Option Explicit Dim String2Search Dim SearchString String2Search = "Mississippi" SearchString = "s" Response.Write InstrRev(String2Search, SearchString) %>

Wynikiem wykonania kodu bdzie wysanie do przegldarki liczby 7, jest to bowiem pozycja pierwszego wystpienia litery s w sowie Mississippi, patrzc od koca cigu. Jednak naprawd uyteczne staj si te funkcje dopiero wtedy, gdy si je poczy. Zwrmy uwag na przykad procedury zatwierdzajcej wprowadzony przez uytkownika adres poczty elektronicznej. Poniszy kod pokazuje, jak to mona zrobi:
<% Option Explicit Dim TheAt Dim TheDot Dim FieldToTest FieldToTest = "bob@somewhere.com" If Len(FieldToTest) < 6 then Response.Write "Adres e-mail jest nieprawidowy!" Else TheAt = InStr(2, FieldToTest, "@") If TheAt = 0 Then

Rozdzia 4 Podstawy ASP


Response.Write "Adres e-mail jest nieprawidowy!" Else TheDot = InStr(cint(TheAt) + 2, FieldToTest, ".") If TheDot = 0 Then Response.Write "Adres e-mail jest nieprawidowy!" ElseIf cint(TheDot) + 1 > Len(FieldToTest) Then Response.Write "Adres e-mail jest nieprawidowy!" Else Response.Write "Adres e-mail jest prawidowy!" End If End If End If %>

144

Na wstpie uyto funkcji Len w celu sprawdzenia, czy wprowadzony adres ma dugo przynajmniej szeciu znakw:
If Len(FieldToTest) < 6 then

Adres poczty musi zawiera symbol mapy @. Kod to sprawdza:


TheAt = InStr(2, FieldToTest, "@") If TheAt = 0 Then

Funkcja Instr sprawdza, czy w cigu wystpi symbol @. Jeli nie, funkcja zwraca zero. Nastpnie w podobny sposb sprawdzana jest obecno kropki w podanym adresie e-mail:
TheDot = InStr(cint(TheAt) + 2, FieldToTest, ".") If TheDot = 0 Then Response.Write "Adres e-mail jest nieprawidowy!"

Zauwa, e startow pozycj, od ktrej zaczyna si poszukiwanie kropki, jest drugi znak za symbolem mapy. Tak wic adres e-mail nie tylko musi zawiera kropk, ale rwnie musi ona znale si na waciwej pozycji. Nastpnie kod sprawdza znaki po kropce:
ElseIf cint(TheDot) + 1 > Len(FieldToTest) Then

Bdzie to cz com adresu e-mail. Teraz przyjrzyjmy si kodowi wypisujcemu samo nazwisko z pola bazy danych mogcego zawiera zarwno imi, jak i nazwisko.
<% Option Explicit 'Tutaj jest kod czcy si z baz danych If Instr(RS("FullName"), " ") then Response.Write Mid(RS("FullName"), Instr(RS("FullName"), " ") + 1) Else Response.Write RS("FullName") End If %>

145

ASP Kompendium

programisty

Pole FullName moe zawiera imi i nazwisko lub po prostu samo nazwisko. Aby sprawdzi, co zostao wpisane w pole, kod sprawdza na pocztku, czy zawiera ono znak spacji:
If Instr(RS("FullName"), " ") then

Jeli spacja si pojawia, to kod zakada, e cig znakw po spacji jest nazwiskiem. Funkcja Mid zwraca wszystkie znaki po znaku spacji:
Response.Write Mid(RS("FullName"), Instr(RS("FullName"), " ") + 1)

Zapamitaj sobie tych kilka funkcji. Rozwizanie wielu problemw zwizanych z kodowaniem bdzie moliwe dziki ich zastosowaniu. Czasami bdziesz chcia stworzy cig, ktry zawieraby jakie znaki niewidoczne, takie jak znak tabulacji czy pusty wiersz. Jeli na przykad chciaby wysa adres e-mail poprzez swj kod, potrzebowaby nowego wiersza w celu rozmieszczenia tekstu. W takich wypadkach moesz uy funkcji Chr:
TheText = "Hello" & Chr(13) & "World"

Zmienna TheText bdzie teraz zawieraa pusty wiersz pomidzy dwoma sowami. Funkcja Replace pozwala na zastpienia jednego cigu znakw innym. Ma ona nastpujcy format:
Replace(String2Change, SearchString, ReplaceString, _ StartPosition, NumberOfChanges, ComparisonType)

Pierwszy parametr okrela cig, w ktrym chcesz dokona zmian. Drugi jest cigiem lub znakiem, ktry bdzie zastpowany. Trzeci parametr zapamituje cig lub znak, na ktry ma by dokonana zmiana. Reszta to parametry opcjonalne. Czwarty okrela pozycj, od ktrej chcesz rozpocz dokonywanie zmian (wszystkie znaki przed wyszczeglnion pozycj zostan pominite i nie bd wysane do przegldarki). Pity definiuje maksymaln ilo zmian. Ostatni parametr precyzuje typ przeprowadzanego poszukiwania, tekstowego, bez rozpoznawania wielkoci liter lub binarnego, gdzie wielko liter jest identyfikowana. Kilka przykadw zastosowania funkcji Replace ukazano poniej:
<% 'zwyka zamiana Response.Write Replace("Mississippi", "s", "x") & "<P>" 'pocztek przeszukiwania od pozycji 5 Response.Write Replace("Mississippi", "s", "x", 5) & "<P>" 'pocztek przeszukiwania od pozycji 1 i dwie zamiany Response.Write Replace("Mississippi", "s", "x", 1, 2) & "<P>" 'pocztek przeszukiwania od pozycji 4 i dwie zamiany Response.Write Replace("Mississippi", "s", "x", 4, 2) & "<P>" 'zwyka zamiana, ale znak nie zosta znaleziony Response.Write Replace("Mississippi", "S", "x") & "<P>" 'to samo, ale teraz porwnywany jest tekst Response.Write Replace("Mississippi", "S", "x", 1, 4, 1) %>

Wyniki kodu s pokazane na rysunku 4.23.

Rozdzia 4 Podstawy ASP

146

Rysunek 4.23. Wyniki funkcji Replace

Liczby losowe
Jeli twoja strona ASP ma przenosi ci do krlestwa gier, bdziesz potrzebowa liczb losowych. Czasami liczby losowe wykorzystuje si przy tworzeniu tosamoci. Dwie instrukcje su do generowania liczb losowych: Randomize i Rnd. Randomize jest jedynie instrukcj uruchamiajc generator liczb losowych; Rnd generuje liczb losow z zakresu od 0 do 1, niezbyt przydatn. Moesz jednak uywa jej w wyraeniach algebraicznych do wygenerowania liczb losowych nalecych do okrelonego zakresu. Wtedy formua jest nastpujca:
Int((Rnd * TopValue) + LowValue)

W tym wyraeniu LowValue oznacza najmniejsz oczekiwan liczb, a TopValue najwiksz dopuszczaln liczb zakresu. Poniszy kod generuje 10 liczb losowych z zakresu od 20 do 50.
<% Option Explicit Randomize Dim I For I = 1 to 10 Response.Write Int((Rnd * 30) + 20) & "<BR>" Next %>

+ LowValue

reprezentuje

Wyniki dziaania tego kodu pokazano na rysunku 4.24.

147

ASP Kompendium

programisty

Rysunek 4.24. Wyniki generowania liczb losowych

Procedury
Dowiedziae si ju, jak tworzy bloki kodu, ktre radz sobie z rnego rodzaju problemami. Teraz moesz zamkn stworzony blok w procedurze, dziki czemu oddzielisz te czci kodu, ktrych uywasz wielokrotnie w twojej stronie ASP, a nastpnie bdziesz wywoywa je tam, gdzie s aktualnie potrzebne. Na przykad wczeniej stworzylimy kod zatwierdzajcy poprawno wprowadzonego adresu e-mail. Moglibymy umieci ten kod w procedurze, a nastpnie wywoywa t procedur w miejscach, gdzie byaby potrzebna. Istniej dwa typy procedur: sub i function. Gwna rnica pomidzy nimi polega na tym, e function zwraca jak warto, kiedy jest wywoywana, a sub tego nie robi. Wemy przykadowy blok kodu:
<% WriteMessage %> <% Sub WriteMessage() Response.Write "TheStuff" end Sub %>

Kod wywouje procedur typu sub o nazwie WriteMessage, ktra wysya wiadomo do przegldarki. adna warto nie jest tutaj zwracana. Zwr uwag na struktur procedury sub. Zaczyna si sowem Sub, po ktrym pojawia si nazwa, a nastpnie dowolne parametry. Procedura zakoczona jest instrukcj End Sub. Procedura function (lub po prostu funkcja) mogaby wyglda nastpujco:
<% Response.Write WriteMessage %> <% Function WriteMessage() WriteMessage = "TheStuff"

Rozdzia 4 Podstawy ASP


End Function %>

148

Zauwa, e w tym przypadku wywoujc WriteMessage oczekuje si jakiej wartoci, ktra mogaby zosta wysana do przegldarki przy uyciu metody Write obiektu Response. Funkcja ma podobn struktur do procedury sub. Rozpoczyna si kluczowym sowem Function, po ktrym okrelona zostaje nazwa funkcji. Nastpnie gdzie w kodzie ustalasz zwracan warto funkcji poprzez umieszczenie w jakim rwnaniu jej nazwy. Funkcja koczy si instrukcj End Function. Twoje procedury mog rwnie zawiera parametry. Przyjrzyj si poniszemu blokowi kodu, ktry zamienia blok zatwierdzajcy poprawno wprowadzonego adresu e-mail na funkcj.
<% Option Explicit Dim LocalTest LocalTest = "mary@somewhere.com" Response.Write ValidateEmailAddress(LocalTest) %> <% Function ValidateEmailAddress(FieldToTest) Dim TheAt Dim TheDot If Len(FieldToTest) < 6 then ValidateEmailAddress = "Adres e-mail jest nieprawidowy!" Else TheAt = InStr(2, FieldToTest, "@") If TheAt = 0 Then ValidateEmailAddress = "Adres e-mail jest nieprawidowy!" Else TheDot = InStr(cint(TheAt) + 2, FieldToTest, ".") If TheDot = 0 Then ValidateEmailAddress = "Adres e-mail jest _ nieprawidowy!" ElseIf cint(TheDot) + 1 > Len(FieldToTest) Then ValidateEmailAddress = "Adres e-mail jest _ nieprawidowy!" Else ValidateEmailAddress = "Adres e-mail jest _ prawidowy!" End If End If End If End Function %>

Zauwa, e teraz funkcji przekazywany jest parametr w gwnym bloku kodu:


Response.Write ValidateEmailAddress(LocalTest)

Ponadto zwr uwag na to, e funkcja wysya wiadomo poprzez przypisanie jej nazwie zwracanej wartoci.

Rozdzia 5. Obiekt Request


Hierarchia i modele obiektw ASP
Czym s hierarchie obiektw?
Aby zapewni logiczn konsekwencj podczas programowania w rodowisku Windows, Microsoft wprowadzi hierarchie obiektw i inne firmy zaczy si do tego stosowa. Hierarchie uatwiaj programowanie rnych obiektw aplikacji w twoim kodzie, poniewa musz one by zgodne z okrelonym wczeniej stylem. Po pierwsze, czym s obiekty? W wiecie rzeczywistym obiekty s przedmiotami takimi jak rower, biurko czy krzeso. To obiekty, rzeczy. W technice komputerowej mianem obiektw okrela si na przykad arkusze kalkulacyjne, dokumenty lub koszyki. Wikszo z nas wie, czym jest hierarchia. Przykadem moe by tutaj hierarchia w firmie, w ktrej skad wchodz dyrektorowie, menederowie, pracownicy i inni. Tak wic hierarchie obiektw s zbiorem obiektw uoonych zgodnie z jak logik. W wiecie komputerw przykadem hierarchii obiektu jest zbir obiektw Excela. Na szczycie hierarchii mamy obiekt aplikacji, ktrym jest sam Excel. Poniej znajduje si skoroszyt, a jeszcze niej w hierarchii jest arkusz roboczy. W ten sposb zbir obiektw jest zorganizowany w porzdku logicznym, lub inaczej mwic w hierarchii obiektw. Obiekty maj waciwoci, metody, zdarzenia i zbiory. Waciwoci s atrybutami opisujcymi obiekt. Metody to dziaania podejmowane przez obiekt. Zdarzenia s zawiadomieniami, ktre otrzymujemy po wystpieniu dziaa. Zbiory to grupy podobiektw. Jak wspomniano wczeniej, rower jest obiektem i ma swoje waciwoci, metody, zdarzenia i zbiory. Waciwoci to atrybuty roweru takie jak kolor, rozmiar opony, typ opon oraz wysoko siodeka. Metodami roweru bd dziaania z nim zwizane, takie jak pedaowanie, kierowanie lub malowanie roweru. Zdarzenia bd w tym wypadku informacjami o zmianach stanu: rower zatrzyma si, teraz jedzie itd. W oparciu o takie zawiadomienia moemy nastpnie podj odpowiednie dziaania. Zbiorami w odniesieniu do roweru s takie jego elementy jak szprychy czy szczki hamulcowe. Wszystkie skadniki zbioru s rwnie obiektami i tak samo mog charakteryzowa si okrelonymi waciwociami, metodami, zdarzeniami i zbiorami. Pamitaj, e metoda moe zmieni waciwo, a zdarzenie moe si ukaza, kiedy metoda zostanie wywoana lub zmieni si waciwo. Jeli pomalujemy rower, zmienimy waciwoci koloru. Arkusz w Excelu jest rwnie obiektem i posiada swoje waciwoci, metody, zdarzenia i zbiory. Arkusz charakteryzuje si kolorem ta, typem czcionki oraz domylnie ustawion szerokoci kolumny wszystko to s waciwoci. Metody arkusza cz w sobie kopiowanie tekstu do schowka, tworzenia pola formuy oraz generowanie wykresw w oparciu o dane arkusza. Zdarzenia w arkuszu roboczym to na przykad powiadomienia o aktywacji i dezaktywacji arkusza czy o zmianie jego zawartoci. Arkusz posiada rwnie zbiory komrek, kolumn, rzdw i komentarzy. Poniewa kady z tych zbiorw zawiera podzbir obiektw, wszystkie elementy podzbioru posiadaj waciwoci, metody, zdarzenia i zbiory. Dostp do waciwoci, metody czy zbioru uzyskujemy dziki skadni kropki. Jeli wic chcielibymy odnie si waciwoci koloru naszego roweru, kod byby taki:

Rozdzia 5 Obiekt Request


If Bicycle.Color = "Czerwony" then Response.Write "Twj rower jest czerwony." End if

150

W drugiej linii tego przykadowego kodu uywamy skadni kropki do wywoania metody Write (wypisywanie tekstu) obiektu Response (odpowied). Tekst Twj rower jest czerwony to parametr, ktry jest informacj dostarczan metodzie w celu szczegowego okrelenia podejmowanego dziaania. Poniej przedstawiony jest kolejny przykad uycia waciwoci i metody przy wykorzystaniu skadni kropki.
Server.ScriptTimeOut = 90 Response.Write Request.Form("NameOfPicture") Response.BinaryWrite ThePicture

Na pocztku ustalamy warto waciwoci ScriptTimeOut obiektu Server, ktra okrela w sekundach maksymalny czas, w ktrym skrypt musi zakoczy swe dziaanie. Nastpnie wykorzystujemy zbir Form, ktry jest zespoem pl obecnych na wywoywanej stronie. Warto dla pozycji NameOfPicture w zbiorze Form jest przekazywana jako parametr do metody Write obiektu Response, ktry zwraca tekst do przegldarki odwiedzajcego stron. W nastpnej kolejnoci wywoujemy metod BinaryWrite obiektu Response i przekazujemy jej parametr o nazwie ThePicture. Metoda BinaryWrite pozwala nam wysya do przegldarki dane nietekstowe, na przykad obrazki. Ponownie wic obiekt posiada waciwoci, metody i zbiory, ktre moemy wywoa i ktrymi moemy operowa przy uyciu skadni kropki. Do zdarze nie odnosimy si tak bezporednio jak do waciwoci, metod i zbiorw. Piszemy cay kod dla zdarzenia, ktry zostanie uruchomiony podczas jego wystpienia. Na przykad jeli chciaby uruchomi kod zapamitujcy czas odwiedzenia naszej witryny WWW przez gocia, moglibymy uy zdarzenia Session_OnStart. Zostao ono omwione bardziej szczegowo w rozdziale 8., teraz pamitaj jedynie o tym, e za kadym razem, kiedy go odwiedza witryn i uruchamia stron ASP, kady kod objty zdarzeniem Session_OnStart bdzie wykonany. Aby zapamita czas odwiedzin witryny, naley stworzy nastpujcy kod:
Sub Session_OnStart Session("StartTime") = Now End Sub

Hierarchie obiektw s ich zgrupowaniem w porzdku logicznym. Strony ASP maj bogat kolekcj obiektw z licznymi waciwociami, metodami, zbiorami i zdarzeniami, ktre zostan omwione zarwno w tym rozdziale, jak i w pozostaych czciach ksiki.

Model obiektw ASP


Model obiektw ASP definiuje pi gwnych obiektw: Request, Response, Application, Server i Session. Obiekty te zostay omwione poniej, a ich streszczenie zawiera tabela 5.1. Tabela 5.1. Podsumowanie modelu obiektw ASP. Obiekt Przeznaczenie Request Odbiera informacje od odwiedzajcych stron. Response Metody i waciwoci do tworzenia odpowiedzi wysyanej odwiedzajcemu stron. Application Zajmuje si waciwociami, ktre zarzdzaj grupowaniem stron WWW w tak zwane aplikacje. Session Metody i waciwoci odnoszce si do poszczeglnych goci strony. Server Zajmuje si tworzeniem skadnikw i ustawie serwera.

151

ASP Kompendium

programisty

Bezporednio przez HTML moemy wysya dane do serwera w formie dwch metod: Post i Get. Uzyskiwanie informacji ley w gestii obiektu Request, ktry umoliwia nam grupowanie waciwoci w zbiory, co pozwala odbiera przesyane informacje. Na przykad, jeli mamy formularz HTML na naszym serwerze, ktry zawiera pole Login, moglibymy otrzymywa dan logowania poprzez nastpujcy kod:
Response.Write "Cze, witamy:" & Request.Form("Login")

Przy uyciu obiektu Request, moemy rwnie otrzyma informacje o przegldarce odwiedzajcego stron w nastpujcy sposb:
Request.ServerVariables("REMOTE_HOST")

Ta metoda zwraca nazw internetow lub adres IP komputera odwiedzajcego. Obiekt Request jest omwiony w tym rozdziale. Obiekt Response, jak to ju moglimy zaobserwowa, jest uywany do wysyania informacji do przegldarki gocia. Na przykad uytkownicy korzysta ze strony opatrzonej formularzem quizu, bdcej czci naszej witryny. Uytkownicy wybieraj odpowied na pytanie, ktra znajduje si na rozwijanej licie opcji. Lista opcji nosi nazw Odpowied. Kiedy gocie wybior ju swoj odpowied naciskaj przycisk Przelij (Submit).To dziaanie pociga za sob wysanie odpowiedzi do naszej strony .asp, ktra zareaguje na ten wybr wykonaniem poniszego kodu:
If Request.Form("Answer") = "42" then Response.Write "Waciwa Odpowied!" Else Response.Write "Bd! Sprbuj ponownie..." End If

Ponownie wic wywietlamy dynamiczn zawarto, bazujc przy tym na dokonanym przez uytkownika wyborze. Moemy rwnie ustawi inne waciwoci przegldarki, ktre okrelaj sposb wywietlania odpowiedzi. Obiekt Response omwiono w rozdziale 6. Kiedy grupujemy strony ASP, ktre s poczone w zbir, tworzymy w ten sposb aplikacj ASP. Jeli przykadowo dysponujemy zbiorem stron, ktre realizuj dodawanie, edytowanie, kasowanie i przegldanie kontaktw naszej firmy, moemy zgrupowa je ze sob w jedn aplikacj ASP. Obiekt Application czy w sobie waciwoci dla tego poziomu. Posiadamy rwnie moliwo tworzenia kodw lub procedur zdarze, ktre uruchamiane s wtedy, gdy kto przeglda strony aplikacji po raz pierwszy, co pozwala na inicjacj zmiennych; kod jest uruchamiany rwnie wtedy, gdy aplikacja koczy swe dziaanie. Gocie witryny mog odwiedzi wicej ni jedn stron. Mog na przykad przegldn twj katalog, wyszuka okrelon pozycj, przejrze informacje o sprzeday, zamwi par rzeczy, a nastpnie zweryfikowa zamwienie. Przechodzenie gocia przez kolejne strony nosi nazw sesji. Obiekt Session zawiera metody i waciwoci pozwalajce na stwierdzenie, kim jest odwiedzajcy. Poniewa strony ASP s jednostkami oddzielnymi, potrzebujemy sposobu na ich powizanie. Nie chcielibymy, aby go musia logowa si na kadej stronie witryny z osobna, wic musimy zachowa pewien porzdek korzystamy wtedy z obiektu Session. Na przykad w wikszoci naszych stron sklepowych ecommerce bdziemy wymagali od uytkownikw zalogowania si przed dokonaniem jakichkolwiek zakupw. Pozwoli to na dostosowanie wygldu strony do typu produktu, ktrego najczciej poszukuj. Dlatego najpierw uruchomimy poniszy kod, zanim jakakolwiek zawarto pojawi si na naszych stronach:
If IsEmpty(Session("UserName")) then Response.Redirect "http://www.whatever.com/login.asp" Else 'poka zwyka stron End If

Rozdzia 5 Obiekt Request

152

W pierwszym wierszu kodu sprawdzamy, czy uytkownik si zalogowa. Jeli nie, waciwo UserName obiektu Session nie bdzie miaa adnej zawartoci. Jeli tak bdzie, wysyamy uytkownika na stron logowania. Obiekty Application i Session omwiono w rozdziale 8. Gwnym przeznaczeniem obiektu Server jest umoliwianie pocze z innymi skadnikami, ktre stworzylimy lub zainstalowalimy w naszym systemie. Na przykad jednym ze skadnikw serwera IIS s obiekty danych wsppracujcych (CDO Collaborative Data Objects). Wysyajc e-mail przy uyciu obiektw CDO ze strony ASP, potrzebujemy kilku wierszy kodu:
Set TheMail = Server.CreateObject("CDONTS.NewMail") TheMail.Send "gbuczek@somewhere.com", "you@whoknows.com", "Co jest?", Set TheMail = Nothing "Tekst wiadomoci..."

Tutaj uywamy metody CreateObject obiektu Server w celu wykorzystania skadnika CDO. Poniewa skadnik CDO podlega standardowemu modelowi obiektw, ktry omawialimy, korzystamy ze skadni kropki, aby wysa e-mail przy uyciu metody Send. Metoda ta ma cztery parametry, oddzielone od siebie przecinkami. Pierwszy z nich jest adresem wysyajcego, drugi adresem docelowym, trzeci to temat wiadomoci, czwarty natomiast to jej tre. Obiekt Server omwiono w rozdziale 7.

Odbieranie informacji od odwiedzajcego


W tym podrozdziale omwimy obiekt Request. Jak wspomniano wczeniej, obiekt ten suy odbieraniu informacji od gocia, ktry uzyskuje dostp do twojej strony ASP. Kiedy gocie wypeni pola formularza, ktry stworzye, zazwyczaj naciskaj przycisk Przelij (Submit). Te dane s przesyane do serwera, a pniej s dla ciebie dostpne poprzez obiekt Request. Przez ten obiekt moesz otrzyma rwnie znacznik cookie od uytkownika. Obiekt Request moe dostarczy ci rwnie informacji nagwka, jak rwnie certyfikaty bezpieczestwa klienta.

Zbiory obiektu Request


Obiekt Request zawiera pi zbiorw, ktre zostay omwione poniej, a ktrych krtki opis zawarty jest w tabeli 5.2. Tabela 5.2. Zbiory obiektu Request. Zbir Przeznaczenie Form Pola przesyane z formularza poprzez metod Post. QueryString Pola przesyane z formularza poprzez metod Get. ServerVariables Pola nagwka dostpne w chwili, kiedy strona jest wywoywana przez przegldark odwiedzajcego. Cookies Odbiera cookie od odwiedzajcego. ClientCertificate Odbiera pola certyfikatu klienta od przegldarki odwiedzajcego. Zbir Form Wikszo witryn WWW posiada formularze. Jeli chcesz doda goci do listy pocztowej, przedstawiasz im formularz, w ktry wpisuj swj adres poczty elektronicznej. Jeli masz witryn e-commerce, bdziesz potrzebowa formularza odbierajcego informacje o fakturach i wysyce; by moe masz witryn zawierajc ankiet na temat aktualnych wydarze, zbierajc opinie goci poprzez formularz. Odwiedzajcy nastpnie przekazuj informacje do formularza poprzez kliknicie przycisku, grafiki lub po prostu klawisza Enter. Dane wpisane przez goci w polach formularza s przesyane do strony okrelonej w znaczniku Form. Na przykad:

153

ASP Kompendium
<FORM ACTION="http://www.whatever.com/shoppingcart.asp" METHOD=GET>

programisty

Ten wiersz wyle zawarto formularza do strony shoppingcart.asp. Kiedy umieszczasz znacznik Form na twojej stronie WWW, uzupeniasz go parametrem Action, ktry okrela sposb przesyania danych. Moesz uy metody Post, jak w tym przykadzie:
<FORM ACTION="http://www.whatever.com/shoppingcart.asp" METHOD=POST>

Kiedy korzystasz z metody Post, pola s wysyane w postaci strumienia binarnego i nie s widziane jako cz cza do strony. Moesz rwnie wykorzysta metod Get:
<FORM ACTION="http://www.whatever.com/shoppingcart.asp" METHOD=GET>

Kiedy uywasz metody Get, liczba wysanych bajtw jest ograniczona, a pola pojawiaj si jako cz cza do strony. Spjrzmy na przykad na wyszukiwark tak jak Go To. Kiedy wprowadzisz sowo kluczowe do wyszukania, stanie si ono czci adresu URL stronie wynikw wyszukiwania, jak to pokazano na rysunku 5.1.

Rysunek 5.1. Adres URL zawierajcy pola formularza W polu wyszukiwania wpisaem "Active Server Page". Zauwa, e ta fraza jest czci adresu URL w polu adresowym przegldarki Internet Explorer. Wynika to z zastosowania metody Get podczas przesyania formularza. Kiedy formularz jest przesyany przy uyciu metody Post, jego pola dostpne s poprzez zbir Form. Kiedy s przesyane przy wykorzystaniu metody Get, zbir QueryString bdzie zawiera przesane dane. Podczas tworzenia formularza na stronie WWW wykorzystujesz rne pola, na przykad pola tekstowe, z hasem, ukryte oraz obszary tekstowe. Definiujc kady z tych elementw na stronie WWW, nadajesz im okrelone nazwy. Na przykad jeli masz stron zbierajc informacje o uytkownikach, formularz mgby by zdefiniowany w nastpujcy sposb:

Rozdzia 5 Obiekt Request


<FORM ACTION="http://www.somewhere.com/processform.asp" METHOD="POST"> Nazwa:<BR> <INPUT TYPE="text" SIZE=30 MAXLENGTH=50 NAME="Name"> <P>Adres e-mail:<BR> <INPUT TYPE="text" SIZE=30 MAXLENGTH=50 NAME="EmailAddress"> <P>Zainteresowania:<BR> <SELECT NAME="Interests" SIZE=4 MULTIPLE> <OPTION VALUE="Nowoci">Nowoci <OPTION VALUE="Sport">Sport <OPTION VALUE="Wycieczki">Wycieczki <OPTION VALUE="Inne">Inne </SELECT> <P><INPUT TYPE="submit" NAME="SubmitButton" VALUE="OK"> </FORM>

154

Formularz korzysta z metody Post, wic pola dostpne s poprzez zbir Form. Formularz jest wysyany do strony processform.asp, jak to zostao okrelone w parametrze Action znacznika Form. Na stronie processform.asp moemy odnie si do dowolnego elementu formularza, ktry zosta przesany poprzez zbir Form. Jeli wic bdziemy chcieli uzyska dostp do pola Name, kod byby nastpujcy:
TheName = Request.Form("Name")

Zmienna TheName niesie w sobie zawarto, ktr uytkownik wprowadzi w pole tekstowe, tak wic w celu odniesienia si do pola w zbiorze Form okrelamy jego nazw, a zwracana jest warto tego pola. W podobny sposb uzyskalibymy dostp do pola EmailAddress:
SendToAddress = Request.Form("EmailAddress")

Moesz wykorzysta t sam procedur, aby uzyska dostp do ukrytych pl. Nawet przycisk jest czci formularza i jest przesyany wraz z nim. Tak wic poniszy kod:
ButtonValue = Request.Form("SubmitButton")

zapamita warto "OK" w zmiennej ButtonValue. Zauwa, e pole wyboru o nazwie Zainteresowania pozwala odwiedzajcemu na wybranie wicej ni jednej wartoci, poniewa w znaczniku znajduje si sowo kluczowe Multiple. Wartoci dostarczane s w postaci listy oddzielonej przecinkami. Jeli wic nasza strona processform.asp zawieraaby taki kod:
response.write request.form("Interests")

a odwiedzajcy wybraby Sport, przegldarka wywietliaby:


Sport

Jeli odwiedzajcy zaznaczyby Sport i Nowoci, w przegldarce ukazaby si ten tekst:


Sport, Nowoci

155

ASP Kompendium

programisty

Kiedy pole formularza zawiera wiele wartoci, tak jak w tym przypadku, moesz zaznaczy kad pozycj indywidualnie, tak wic w polu moe si znale zbir zaznacze. Liczb zaznacze moesz pozna przy uyciu waciwoci Count. Wyjciem tego kodu:
response.write request.form("Interests").count

byaby liczba 2, poniewa dokonano dwch zaznacze. Moemy odnie si do kadego elementu w tablicy zaznacze w nastpujcy sposb:
response.write request.form("Interests")(1) & "<P>" response.write request.form("Interests")(2)

Tym razem wyjciowa warto dla przegldarki byaby taka:


Sport Nowoci

Jeli odwiedzajcy dokona tylko jednego zaznaczenia, drugi wiersz ostatniego kodu wywoaby stan bdu, najlepiej wic uywa waciwoci Count podczas odnoszenia si do dowolnej zaznaczonej pozycji. Moemy rwnie odnie si do dowolnej pozycji zbioru poprzez uycie bloku For Each:
For Each TheStuff in Request.Form("Interests") 'insert code that would process each item response.write TheStuff & "<BR>" Next

Blok For Each przechodzi kolejno przez kad pozycj zbioru. Zmiennej TheStuff przypisywana jest warto dowolnego elementu zbioru Zainteresowania. Jeli wic odwiedzajcy wybierze Sport i Nowoci, to podczas pierwszego przejcia przez blok kodu do zmiennej TheStuff zostanie wpisany cig Sport, a za nastpnym przejciem Nowoci. Po dwch iteracjach skocz si pozycje w zbiorze i kod bloku nie bdzie ju wykonywany. Zbir QueryString Jak wspomniano wczeniej, podczas przesyania pl formularza korzystamy z metody Get lub Post. Poprzedni podrozdzia ukazywa metod Post, ktra bya wykorzystywana przez zbir Form. W tej czci zwrcimy uwag na zbir QueryString, ktry uywa metody Get. Wczeniej rwnie moge uywa metody Get, ale w formularzach oglnie rzecz biorc uywa si metody Post, aby nie martwi si o ograniczenia dotyczce dugoci cigw. Zbir QueryString jest tak naprawd uywany wtedy, gdy musisz przekaza parametry poprzez cze. Przypumy, e masz stron, ktra pokazuje list sprzedanych produktw. Kiedy gocie klikn dany produkt, powinni ujrze szczegy z nim zwizane. Mgby mie setki stron wywietlajcych kady produkt lub tylko jedn stron ASP wywietlajc dowolny z nich. Wymagaoby to zastosowania numeru identyfikacyjnego produktw (ProductID) i odwoa do bazy danych, w ktrej umieszczone byyby szczegy. Aby przekazywa ProductID do strony poprzez cze, mgby korzysta ze zbioru QueryString. Mgby wywietla nazw produktu jako cze do strony ze szczegami za pomoc nastpujcego kodu:
<A HREF="http://www.somewhere.com/productdetails.asp?ProductID =2355">Pasta</A>

Go, ktry klikn sowo Pasta zostaje poczony ze stron productdetails.asp. Numer identyfikacyjny pasty do zbw (2355) jest wysyany do tej strony. Zwr uwag na struktur cza. Po rozszerzeniu .asp nastpuje

Rozdzia 5 Obiekt Request

156

znak zapytania oznaczajcy, e teraz pojawi si parametr. Kady parametr jest par nazwa-warto. Jeli przekazywany jest wicej ni jeden parametr, kady kolejny oddzielony jest od siebie ampersandem (&). Jeli wic kolejnym naszym parametrem bdzie typ klienta (CustomerType), cze bdzie wygldao nastpujco:
http://www.somewhere.com/productdetails.asp?ProductID=2355& CustomerType=Normal

Kod strony productdetails.asp jest odpowiedzialny za wykorzystanie przekazanego numeru ProductID w celu okrelenia, ktry produkt powinien by wywietlony. Aby wyszuka ProductID, wykorzystany zostanie zbir QueryString:
TheStuff = Request.QueryString("NameOfField")

Pole NameOfField zawiera warto, ktr chcesz przypisa zmiennej TheStuff. W stronie productdetails.asp wykorzystuje si numer ProductID w nastpujcy sposb:
<% Option Explicit Dim conn Dim RSProduct set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSProduct = conn.Execute("select * from Products where " _ & "ProductID = " & Request.QueryString("ProductID")) %>

Kod czc si z baz danych, wykorzystuje ADO (omwimy ADO w rozdziale 14.). Zauwa jednak, e QueryString jest wykorzystywany do wyszukiwania okrelonego numeru ProductID, ktry z kolei jest uywany przez instrukcj SQL do znalezienia w bazie danych rekordu zawierajcego informacje o odpowiednim produkcie. Jeli przesyasz formularz przy uyciu metody Get, moesz uy zbioru QueryString w celu wyszukania wartoci przesanych formularzy. Te same zasady, ktre obowizyway dla zbioru Form, obowizuj rwnie dla tego zbioru. Po prostu uywasz nazwy pola formularza, aby uzyska warto przesan:
TheName = Request.QueryString("Name")

Jeli pole zawiera wiele wartoci jak pole wyboru, moesz odnie si do wybranego elementu okrelajc jego numer:
response.write request.querystring("Interests")(2)

Moemy rwnie odnie si do kadej pozycji zbioru QueryString w podobny sposb. Jeli wic uyjemy metody Get dla znacznika Form, formularz bdzie wyglda tak, jak to prezentuje rysunek 5.2.

157

ASP Kompendium

programisty

Rysunek 5.2. Przykad formularza uywajcego metody Get Moglibymy stworzy w naszej stronie productdetails.asp kod przechodzcy kolejno przez kade pole formularza:
For Each TheStuff in Request.QueryString Response.Write TheStuff & ": " & Request.QueryString(TheStuff) & "<P>" Next

Wynik wykonania tego kodu prezentuje rysunek 5.3.

Rozdzia 5 Obiekt Request

158

Rysunek 5.3. Wynik przetworzenia strony Zwr uwag na par rzeczy na stronie wyjciowej. Spjrz na adres strony. Poniewa uyto metody Get, pola formularza s czci cza. Ponadto znajduje si tam rwnie przycisk przesyania, poniewa jest on czci formularza HTML. Moesz to wykorzysta w celu umoliwienia twoim gociom dokonania wyboru rodzaju dziaania przy pomocy wikszej iloci przyciskw. Jedynie ten przycisk, ktry jest nacinity, jest przekazywany. W bloku kodu wykorzystujemy instrukcj For Each, aby przej kolejno przez zbir QueryString. Zmiennej TheStuff przypisywane s wszystkie elementy formularza po kolei w czasie przechodzenia kodu przez struktur ptli For Each. Zmienna TheStuff zawiera w rzeczywistoci nazw pola, dlatego jest uywana do wyszukania poprawnej wartoci okrelonego pola. Zbir ServerVariables Zbir ServerVariables wyszukuje liczne nagwki pl oraz zmienne rodowiskowe. Moesz na przykad uy zbioru ServerVariables do wyszukania typu przesania formularza, nazwy ostatnio przegldanej strony, cieki do aktualnej strony, adresu IP gocia lub typu serwera internetowego. Wyszukanie jednej z tych pozycji w zbiorze ServerVariables jest proste okrel po prostu nazw zmiennej serwera, ktr chcesz otrzyma. Jeli na przykad chciaby pozna ciek do biecej strony, kod byby taki:
ThePath = Request.ServerVariables("PATH_INFO")

A poniszy kod wywietla w przegldarce nazw strony poprzednio przegldanej:


Response.Write Request.ServerVariables("HTTP_REFERER")

Niektre pola nagwkw i zmienne rodowiskowe powinne by dostpne przez cay czas. Wyszczeglniono je w tabeli 5.3. Pozostae zmienne serwera, ktre nie s osigalne przez cay czas, ale mog mie due znaczenie, pokazuje tabela 5.4. Tabela 5.3. Standardowe zmienne serwera. Zmienna serwera Przeznaczenie ALL_HTTP Zawiera pen list niestandardowych nagwkw w formie HTTP_NAME: warto. ALL_RAW Podobna do ALL_HTTP z t rnic, e nagwki s ukazywane dokadnie tak, jak s odbierane, bez przedrostka HTTP i innego formatowania. APPL_MD_PATH Zawiera logiczn ciek do metabazy. APPL_PHYSICAL_PATH Zawiera fizyczn ciek do metabazy. AUTH_PASSWORD Haso wprowadzone podczas uywania podstawowego uwierzytelniania. AUTH_TYPE Typ uywanego uwierzytelniania, przeprowadzanego w celach bezpieczestwa. AUTH_USER Nazwa uwierzytelnianego uytkownika. CERT_COOKIE Cig zawierajcy unikalny identyfikator certyfikatu klienta. CERT_FLAG Pierwsza flaga jest ustawiana, kiedy obecny jest certyfikat klienta. Druga flaga jest ustawiana, jeli Wydawca Certyfikatu zostaje uznany za wiarogodne rdo. CERT_ISSUER Wydawca certyfikatu klienta. CERT_KEYSIZE Liczba bitw klucza bezpieczestwa SSL. CERT_SECRETKEYSIZE Liczba bitw klucza bezpieczestwa SSL dla serwera. CERT_SERIALNUMBER Numer seryjny certyfikatu klienta. CERT_SERVER_ISSUER Wydawca Certyfikatu serwera. CERT_SERVER_SUBJECT Pole tematu certyfikatu serwera.

159

ASP Kompendium

programisty
CERT_SUBJECT CONTENT_LENGTH CONTENT_TYPE GATEWAY_INTERFACE HTTPS HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE HTTPS_SERVER_ISSUER HTTPS_SERVER_SUBJECT INSTANCE_ID INSTANCE_META_PATH LOCAL_ADDR LOGON_USER PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_NAME SERVER_PORT SERVER_PORT_SECURE

SERVER_PROTOCOL SERVER_SOFTWARE URL

Pole tematu certyfikatu klienta. Liczba bitw zgaszanych przez klienta serwerowi wraz z daniem. Typ dania. Wersja CGI w formie numeru CGI. Zawiera cig on, gdy danie jest bezpieczne, jeli nie cig off. Liczba bitw SSL uywanych przy daniu. Liczba bitw uywana na serwerze. Wydawca certyfikatu dla serwera. Pole tematu certyfikatu serwera. Numer identyfikacyjny egzemplarza serwera WWW. cieka do metabazy dla tego okrelonego egzemplarza. Adres IP serwera. Jeli uytkownik jest zalogowany w systemie NT, to pole zawiera nazw tego uytkownika. cieka dostpu do danej strony poza katalogiem macierzystym nazwy domeny. Fizyczna cieka dania. Dowolna dana przekazana metod Get lub wystpujca po znaku zapytania w czu. Adres IP komputera, ktry wystosowa danie. Tumaczona nazwa komputera wystosowujcego danie, jeli takowa istnieje. Jeli nie, pole zawiera adres IP. Nazwa uytkownika, jeli takowa zostaa wysana przez gocia. Wykorzystana metoda dania, Post lub Get. Pooenie pliku wirtualnego wywoywanego skryptu. Nazwa serwera. Port uywany podczas dania. Jeli danie byo wystosowane przez bezpieczne poczenie, pole to bdzie zawierao warto 1; jeli nie, wartoci bdzie 0. Uywany protok z numerem wersji, to znaczy HTTP/1.1. Nazwa i wersja oprogramowania uruchamianego przez serwer. cieka do wywoywanej strony.

Tabela 5.4. Niestandardowe zmienne serwera. Zmienna serwera Przeznaczenie HTTP_CONNECTION Typ poczenia pomidzy klientem a serwerem. HTTP_REFERER Strona, ktr go odwiedza bezporednio przed biec stron, jeli przejcia dokonano poprzez cze. HTTP_USER_AGENT Typ przegldarki i jej wersja wraz z systemem operacyjnym gocia. Aby przejrze wartoci wszystkich zmiennych serwera i dostpnych typw, mgby umieci w stronie ASP nastpujcy kod:
For Each TheStuff in Request.ServerVariables Response.Write TheStuff & ": " _ & Request.ServerVariables(TheStuff) & "<P>"

Rozdzia 5 Obiekt Request


Next

160

Kod ten wyszczeglni list wszystkich zmiennych serwera wraz z ich wartociami w nastpujcej formie:
Zmienna serwera: Warto

Zbir Cookies Znaczniki cookie s wykorzystywane do zapamitywania informacji na komputerze odwiedzajcego. Moesz uy swojego kodu do odzyskania wartoci zapisanych na komputerze gocia. Mgby na przykad zapamita nazw uytkownika odwiedzajcego w znaczniku cookie. Gdyby gocie odwiedzili twoj witryn ponownie, wiedziaby kim byli. W znaczniku cookie moesz rwnie zapamita preferencje gocia, takie jak ulubione typy produktw lub ich pooenie. Poniewa jednak dane przechowywane s w systemie gocia, nie moesz uywa jedynie cookie do identyfikacji odwiedzajcego. Problem polega na tym, e uytkownicy mog usun cookies ze swojego komputera; mog mie rwnie zainstalowany program usuwajcy cookies; mog rwnie odwiedza twoj witryn korzystajc z komputera innego ni ich wasny, wtedy cookie znajduje si gdzie indziej. Znaczniki moesz odebra poprzez zbir Cookies. Jeli zapamitae cookie o nazwie UserName na komputerze gocia, odzyskasz ten znacznik w nastpujcy sposb:
TheValue = request.cookies("UserName")

Zmienna TheValue bdzie zawieraa warto cookie o nazwie UserName. Jeli takowe nie istnieje, zmienna TheValue pozostanie pusta. Cookies mog by rwnie zoone. Jeden znacznik moe zawiera wicej ni jedna warto. Jeli wic chciaby odczyta nazw gocia oraz ulubion kategori produktw, podczas gdy obie te wartoci znajdowayby si w tym samym cookie o nazwie Preferences, kod byby nastpujcy:
TheValue = Request.Cookies("Preferences")("UserName") FavCategory = Request.Cookies("Preferences")("FavCategory")

Moesz sprawdzi, czy znacznik cookie jest prosty, czy zoony poprzez waciwo znacznika zwan HasKeys. Jeli cookie jest zoony, zawiera wicej ni jedn warto. W tym przypadku wartoci waciwoci HasKeys jest prawda. Jeli znacznik cookie jest prosty, warto HasKeys to fasz. Odwoanie do waciwoci wyglda tak:
If Request.Cookies("Preferences").HasKeys then Response.Write "Zoony cookie" Else Response.Write "Prosty cookie" End if

W poniszym kodzie wywietlamy zawarto dwch cookies: jednego prostego, drugiego zoonego. Wywietlana jest rwnie zawarto waciwoci HasKeys:
response.write "Simple Cookie: " _ & request.cookies("SampleCookie1") & "<P>" response.write "Czy cookie 1 ma klucz?: " _ & request.cookies("SampleCookie1").HasKeys & "<P>" response.write "Cay zoony cookie: " _ & request.cookies("SampleCookie2") & "<P>" response.write "Czy cookie 2 ma klucz?: " _ & request.cookies("SampleCookie2").HasKeys & "<P>" response.write "Cookie zoony cz 1: " _

161

ASP Kompendium
& request.cookies("SampleCookie2")("Part1") & "<P>" response.write "Cookie zoony cz 1: " _ & request.cookies("SampleCookie2")("Part2")

programisty

Wynik wykonania kodu pokazano na rysunku 5.4.

Rysunek 5.4. Wynik przykadowego kodu ze znacznikami cookie Zbir ClientCertificate Coraz bardziej ronie zapotrzebowanie na pozytywn identyfikacj goci, w szczeglnoci jeli chodzi o obszar e-commerce. Jednym ze sposobw identyfikacji s certyfikaty klienta. Uytkownicy mog kupi certyfikat klienta od organizacji okrelanej mianem Wydawcy Certyfikatu (CA Certificate Authority), ktra jest firm wydajc certyfikaty dla indywidualnych osb. Certyfikat jest zwykle zwizany z adresem poczty elektronicznej i hasem. Normalnie podczas pracy z certyfikatem decydujesz, jakim organizacjom CA ufasz. Przez zaufanie do CA rozumiemy akceptacj certyfikatw przez ni wydanych. Dwie najsynniejsze organizacje wydajcego certyfikaty to Thawte (http://www.thawte.com) i Verisign (http://www.verisign.com). Zbioru ClientCertificate obiektu Request uywasz do kwestionowania wartoci certyfikatu gocia. Powiedzmy, e chciaby pozna dat wyganicia wanoci certyfikatu. Kod byby taki:
ExpDate = Request.ClientCertificate("ValidUntil")

Niektre obiekty zbioru ClientCertificate zawieraj klucze podrzdne. Na przykad jednym z elementw zbioru jest wydawca certyfikatu, organizacja CA. Jeli chciaby pozna okrelon nazw CA, kod wygldaby tak:
CAName = Request.ClientCertificate("Issuer0")

Poniszy kod przechodzi kolejno przez wartoci zbioru ClientCertificate:


For Each CCValue in Request.ClientCertificate

Rozdzia 5 Obiekt Request


Response.Write CCValue & ": " & Request.ClientCertificate(CCValue) & "<P>" Next

162

Bardziej czytelne wyjcie tego kodu zaprezentowano na rysunku 5.5.

Rysunek 5.5. Wyjcie strony ClientCertificate W dalszej czci tego rozdziau przyjrzymy si przykadowi praktycznego wykorzystania zbioru ClientCertificate, a take krokom jakie naley podj, aby wyszukiwa certyfikaty oraz da dostpu do nich poprzez serwer IIS.

Waciwo obiektu Request


Obiekt Request ma tylko jedn waciwo, ktr omwiono poniej i podsumowano w tabeli 5.5. Tabela 5.5. Waciwo
TotalBytes

Przeznaczenie Liczba bajtw wysanych podczas wywoywania strony.

Waciwo TotalBytes
Waciwo TotalBytes zawiera liczb bajtw w parametrze wywoania strony ASP. Jeli masz stron z nastpujcym formularzem:
<FORM ACTION="./processform.asp" METHOD="POST"> Name:<BR><INPUT TYPE="text" SIZE=30 MAXLENGTH=50 NAME="Name"> <P>Email Address:<BR><INPUT TYPE="text" SIZE=30 MAXLENGTH=50 NAME="EmailAddress"> <P>Interests:<BR><SELECT NAME="Interests" SIZE=4 MULTIPLE> <OPTION VALUE="News">News <OPTION VALUE="Sports">Sports

163

ASP Kompendium
<OPTION VALUE="Hiking">Hiking <OPTION VALUE="Other">Other </SELECT> <P><INPUT TYPE="submit" NAME="SubmitButton" VALUE="OK"> </FORM>

programisty

i go wpisa Dave w pole Name, zostawi puste pole adresu e-mail oraz zaznaczy News w polu Interests, to poniszy kod zwrci warto 54:
Response.Write Request.TotalBytes

Liczba 54 jest iloci bajtw lub znakw w daniu, ktra jest sum znakw pl przesanych i nazw pl formularza:
Nazwa pola: Name = 4 bajty Nazwa pola: EmailAddress = 12 Nazwa pola: Interests = 9 Nazwa pola: Submit Button = 12 Dana wprowadzona: Dave = 4 Dana wprowadzona: Email (NA) = 0 Dana wprowadzona: News = 4 Dana wprowadzona: OK. (Submit Button) = 2 Ampersandy: 3 Znaki rwnoci = 4 Oglnie = 54

Jeli uywae metody Get przy przesyaniu formularza, waciwo TotalBytes zwrci warto 0. Waciwo ta dostpna jest jedynie podczas przesyania formularza przy uyciu metody Post.

Metoda obiektu Request


Obiekt Request ma tylko jedn metod, ktr omwiono poniej i podsumowano w tabeli 5.6. Tabela 5.6. Waciwo
BinaryRead

Przeznaczenie Zwraca nieprzetworzon dan przesan poprzez formularz.

Metoda BinaryRead
Metoda BinaryRead zwraca dan przekazan poprzez formularz w niskopoziomowej, nieprzetworzonej formie. Bajty zwracane s w takiej postaci, w jakiej zostay przesane bez przetworzenia ich przy uyciu zbioru Form. Metoda przybiera nastpujc form:
TheStuff = Request.BinaryRead(NumberOfBytesToRetrieve)

reprezentuje liczb bajtw, ktr chcesz wydoby z danej przesanej. TheStuff jest tablic tych bajtw. Po wywoaniu NumberOfBytesToRetrieve zawiera liczb bajtw, ktre zostay odebrane. Jeli chcesz odebra wszystkie przesane bajty, kod byby taki:
NumberOfBytesToRetrieve

Rozdzia 5 Obiekt Request


TheStuff = Request.BinaryRead(Request.TotalBytes)

164

Prawie zawsze o wiele atwiej jest pracowa z danymi przesanymi poprzez formularz uywajc zbioru Form. Ta metoda odbierania danych przesanych jest naprawd odpowiednia tylko wtedy, gdy istnieje niskopoziomowego dostpu do przesania formularza, ktremu towarzyszy plik binarny.

Obiekt Request w dziaaniu


W tym podrozdziale zwrcimy uwag na liczne przykady stron i rozwiza wykorzystujcych obiekt Request. Po pierwsze poznamy kroki, jakie naley podj, aby uywa certyfikatw klienta. W odpowiednim przykadzie zobaczysz, jak skonfigurowa serwer IIS do odbierania certyfikatw klienta oraz w jaki sposb klient moe taki certyfikat otrzyma. Nastpnie przyjrzymy si programowi usugowemu, ktry przesya poczt elektroniczn zawarto formularza osobom wyszczeglnionym w tym formularzu. Podobna strona ASP jest wykorzystywana do zapamitywania danych w tabeli bazy danych. Zwrcimy rwnie uwag na przykad formularza logowania goci na witrynie. Formularz ten bdzie wykorzystywa cookies w celu rozpoznania uytkownikw. Uytkownikom nie rozpoznanym lub nie posiadajcym odpowiedniego cookie bdzie umoliwia logowanie si.

Przykad certyfikatu klienta


Jednym ze sposobw identyfikacji uytkownikw twojej witryny s certyfikaty klienta, ktre informuj ci o tym, czy osoby odwiedzajce witryn s faktycznie tymi, za ktre si podaj. Uytkownicy otrzymuj certyfikat od Wydawcy Certyfikatu. Poniewa kady moe by wydawc, ty sam decydujesz, ktremu z nich chcesz zaufa. W ten sposb Wydawca Certyfikatu peni rol porednika pomidzy tob a gomi twojej witryny. Aby skonfigurowa stron jako uywajc certyfikatw klienta, musisz skorzysta z Konsoli Zarzdzania Microsoftu serwera IIS. Wyszukaj stron, ktr chcesz zabezpieczy certyfikatami klienta i kliknij j prawym przyciskiem myszy; nastpnie wybierz Waciwoci (Properties). Powiniene zobaczy dialog pokazany na rysunku 5.6.

Rysunek 5.6. Dialog Waciwoci pliku serwera IIS Przejd do zakadki Bezpieczestwo pliku (File Security) i nacinij przycisk Edytuj (Edit) w czci Zabezpieczenie komunikacji (Secure Communications). Powiniene ujrze dialog z rysunku 5.7.

165

ASP Kompendium

programisty

Rysunek 5.7. Dialog Zabezpieczenie komunikacji Aby zabezpieczy kana podczas dostpu do strony musisz zaznaczy kratk Wymagaj bezpiecznego kanau podczas dostpu do zasobu (Require Secure Channel when accessing this resource). Kiedy to zrobisz, w nastpnej kolejnoci moesz zaznaczy opcj Wymagaj certyfikatu klienta (Require Client Certificate). Moesz rwnie uy certyfikatw klienta w celu mapowania dostpu uytkownikw do okrelonych kont NT. Realizujesz to przez zaznaczenie kratki Uaktywnij mapowanie certyfikatu klienta (Enable Client Certificate Mapping) i naciskajc przycisk Edytuj (Edit). Kiedy to zrobisz, zobaczysz dialog pokazany na rysunku 5.8.

Rysunek 5.8. Dialog Mapowanie kont, zakadka Podstawowe W zakadce Podstawowe (Basic) moesz przydzieli okrelony certyfikat klienta do okrelonego konta klikajc przycisk Dodaj (Add). Wiksze moliwoci prezentuje zakadka Zaawansowane (Advanced), ktra pozwala na uycie wieloznacznikw do mapowania dostpu grup osb do okrelonych kont NT. Mgby na przykad mapowa dostp do okrelonego konta kadej osoby z certyfikatem pochodzcym od jednego wydawcy; mgby rwnie mapowa opierajc si na organizacji zwizanej z wacicielem certyfikatu. Aby przydzieli wiele certyfikatw do jednego konta NT, kliknij przycisk Dodaj (Add) w zakadce Zaawansowane (Advanced). Wywietli si pierwsze okno kreatora, pokazane na rysunku 5.9.

Rozdzia 5 Obiekt Request

166

Rysunek 5.9. Dodawanie mapowania zaawansowanego, krok pierwszy Po pierwsze, wpisujesz jak nazw dla twojej reguy, ktra suy jedynie temu, aby rozpoznawa ta regu. W pierwszym filtrowaniu okrelasz, czy chcesz mapowa wszystkich Wydawcw Certyfikatu, czy tylko wybranych. Aby ograniczy ich liczb, nacinij przycisk Wybierz (Select), a wtedy zobaczysz list wydawcw. Po wybraniu opcji Wydawcy (Issuers), nacinij przycisk Dalej (Next), a zobaczysz dialog pokazany na rysunku 5.10.

Rysunek 5.10. Reguy mapowania W dialogu regu moesz dodawa, edytowa oraz usuwa okrelone reguy filtrowania dla tego mapowania. Naciskajc przycisk Nowy (New), wywietlisz okno pokazane na rysunku 5.11., w ktrym stworzysz regu w oparciu o testowane pola i kryteria, ktre musz one spenia. Regua na rysunku 5.11. wyszukuje te firmy, ktrych nazwa rozpoczyna si od liter ABC w podrzdnym kluczu Organizacja (Organization) klucza Temat (Subject). Nacinij OK w celu potwierdzenia reguy, a nastpnie kliknij przycisk Dalej (Next). Ukae si wtedy trzecie okno kreatora, pokazane na rysunku 5.12.

Rysunek 5.11. Przykadowa regua

167

ASP Kompendium

programisty

Rysunek 5.12. Przydzielanie reguy do okrelonego konta W kroku trzecim wybierasz konto, ktre chcesz mapowa zgodnie z odpowiedni regu lub okrelasz, ktrym certyfikatom odmwi dostpu. Nacinij nastpnie przycisk Zakocz (Finish), a konfiguracja twojego zaawansowanego mapowania zostanie zakoczona. Drug stron zapewnienia bezpieczestwa jest otrzymanie przez gocia certyfikatu klienta. Wymaga to od uytkownika wejcia na ktr z witryn WWW Wydawcw Certyfikatu, na przykad Verisign lub Thawte, gdzie generalnie mog skorzysta z kreatorw certyfikatu klienta, rnicych si midzy sob w zalenoci od witryny. Wikszo znaczcych Wydawcw Certyfikatu pobiera opat za t usug. Kiedy te dwie strony bezpieczestwa zostan zrealizowane, twoi gocie mog ju odwiedza twoj zabezpieczon witryn, a podawane informacje dotyczce ich tosamoci, mog by uznane za godne zaufania. Strona zabezpieczona winna by adresowana poprzez https:// zamiast http://. Jeli uytkownicy prbowaliby wej na witryn bez certyfikatu, zobacz ostrzeenie podobne do tego pokazanego na rysunku 5.13, pochodzce od przegldarki Netscape Navigator. Nastpnie ujrz wiadomo przegldarki, informujc o koniecznoci posiadania certyfikatu klienta umoliwiajcego przegldanie strony.

Rysunek 5.13. Ostrzeenie wywietlane przez przegldark Netscape Navigator

Rozdzia 5 Obiekt Request

168

Rysunek 5.14. Wiadomo informujca o koniecznoci przedstawienia certyfikatu Gocie posiadajcy certyfikat otrzymaj wiadomo przegldarki, ktra powiadomi ich o koniecznoci przedstawienia certyfikatu oraz poprosi o wybranie ktrego. Ten dialog pokazano na rysunku 5.14. Nastpnie ujrz zabezpieczon stron. Na stronie moesz uy zbioru Request.ClientCertificate w celu zatwierdzenia dostpu gocia. Kod mgby uywa pola numeru seryjnego w celu wyszukania w twojej bazie danych informacji o tosamoci gocia. Wtedy mgby wykorzysta dane zapamitane w bazie w celu wywietlenia widoku strony zgodnego z preferencjami twojego uytkownika. Taki kod mgby wyglda nastpujco:
<% Option Explicit Dim conn Dim RSVisitor set conn = server.createobject ("adodb.connection") conn.open "DBName", "sa", "yourpassword" set RSVisitor = conn.Execute("select * from Visitors where SerialNumber = " _ & Request.ClientCertificate("SerialNumber")) If RSVisitor.EOF Then conn.execute "insert into Visitors (SerialNumber) values " _ & Request.ClientCertificate("SerialNumber") Response.Redirect "./config.asp?User=" _ & Request.ClientCertificate("SerialNumber") & "&Type=New" Else Layout = RSVisitor("Layout") FavCat = RSVisitor("FavCat") End If %>

Kod bazy danych zosta omwiony bardziej szczegowo w rozdziaach 13. i 14. Na pocztku kod czy si z baz danych:
set conn = server.createobject ("adodb.connection") conn.open "DBName", "sa", "yourpassword"

Kod korzysta z numeru seryjnego pochodzcego z certyfikatu gocia w celu znalezienia jego rekordu w bazie danych:
set RSVisitor = conn.Execute("select * from Visitors where SerialNumber = " _ & Request.ClientCertificate("SerialNumber"))

169

ASP Kompendium

programisty

Jeli gocia nie ma w bazie danych, ustawiana jest nastpujca flaga:


If RSVisitor.EOF Then

W tym przypadku jest on dodawany do bazy danych:


conn.execute "insert into Visitors (SerialNumber) values " _ & Request.ClientCertificate("SerialNumber")

i jest wysyany do kolejnej strony w celu okrelenia swoich preferencji:


Response.Redirect "./config.asp?User=" _ & Request.ClientCertificate("SerialNumber") & "&Type=New"

W przeciwnym wypadku dane znajdujce si w bazie s wykorzystane do ustawienia aspektw wywietlania strony:
Layout = RSVisitor("Layout") FavCat = RSVisitor("FavCat")

Procesor e-mail dla formularza


Jedna ze stron kadej praktycznie witryny posiada formularz informacji dodatkowych. Taka strona zazwyczaj prosi goci o podanie informacji o sobie oraz pozwala na zadanie pytania. Nastpnie zawarto formularza jest wysyana do wyznaczonej osoby. Poniej zaprezentowano przykad takiej witryny. Co waniejsze, wykorzystuje ona kod do przetworzenia formularza. Kod jest sposobem na przedoenie formularza i wysanie jego zawartoci poczt elektroniczn do kogokolwiek, kto wyszczeglniony zosta w specjalnym polu. Pierwsz stron jest strona dania informacji dodatkowych, pokazana na rysunku 5.15. Formularz strony moe zawiera elementy o dowolnych typach i w dowolnej iloci, musi jednak zawiera dwa specjalne, ukryte elementy formularza:
<INPUT TYPE=HIDDEN NAME="SendTo" VALUE="gbuczek@thuntek.net"> <INPUT TYPE=HIDDEN NAME="CompleteMessage" VALUE=" Dzikujemy za podanie niezbdnych informacji"

Rozdzia 5 Obiekt Request

170

Rysunek 5.15. Formularz informacji dodatkowych Pole SendTo zapamituje adres e-mail tej osoby, do ktrej naley wysa zawarto formularza. Innym polem specjalnym jest CompleteMessage, ktre zawiera tekst ukazujcy si gociowi po przesaniu formularza. Kolejnym interesujcym elementem jest przycisk typu Submit:
<INPUT TYPE=SUBMIT NAME="SubmitButton" VALUE="Send">

Pamitaj o tym, co powiedzielimy wczeniej przycisk jest wysyany wraz ze wszystkimi innymi polami formularza. Jeli jednak przycisk jest okrelany mianem SubmitButton, nie jest wysyany z reszt pl. Bdziesz mg to stwierdzi przegldajc kod. Rysunek 5.16. pokazuje stron, ktra wywietlana jest po naciniciu przycisku Wylij. Zwr uwag na wiadomo ukazan na tej stronie. Jest to tekst wysany do formularza poprzez pole CompleteMessage.

171

ASP Kompendium

programisty

Rysunek 5.16. Strona ukazujca si po przesaniu formularza informacji dodatkowych Nastpnie kod wysya e-mail do osoby wskazanej w polu SendTo. Jego tekst oparty jest na wprowadzonych wczeniej danych, a przedstawia si w ten sposb:
Imi i nazwisko: Dave Smith Adres e-mail: Dave@whatever.com Telefon: 111-111-1111 Dzia(3): Sprzeda, Zatrudnienie, Zwroty Wiadomo: Przykadowa wiadomo

Zawarto formularza jest wysyana do strony ASP, ktra tworzy odpowiedni e-mail. Gwny blok kodu tej strony wyglda nastpujco:
<% Option Explicit Dim TheMessage Dim TheFormField For Each TheFormField in Request.Form If TheFormField <> "SendTo" and "CompleteMessage" _ and TheFormField <> "SubmitButton" Then If Request.Form(TheFormField).Count > 1 Then TheMessage = TheMessage & TheFormField & "(" _ & Request.Form(TheFormField).Count & "): " _ & Request.Form(TheFormField) & chr(13) else TheMessage = TheMessage & TheFormField & ": " _ & Request.Form(TheFormField) & chr(13) end if end if TheFormField <>

Rozdzia 5 Obiekt Request


Next Dim ObjMail Set objMail = CreateObject("CDONTS.NewMail") objMail.Send "na@na.com", cstr(Request.Form("SendTo")), _ "New More Info Request", cstr(TheMessage) Set objMail = Nothing %>

172

Przypis Powyszy kod uywa kilku obiektw, ktrych do tej pory nie omwilimy, a ktrych zastosowanie byo niezbdne w tym przykadzie.

Kod posiada ptl, ktra przejdzie kolejno przez kade przesane pole. W ptli do zmiennej TheFormField wpisywany jest kady punkt zbioru Form:
For Each TheFormField in Request.Form

Wysany e-mail nie powinien zawiera treci pl specjalnych, okrelajcych adresata wiadomoci, informacji wywietlanej gociowi oraz przycisku typu Submit:
If TheFormField <> "SendTo" and TheFormField <> "CompleteMessage" _ and TheFormField <> "SubmitButton" Then

Jeli element jest czci pola zoonego, wskazywana jest liczba elementw:
If Request.Form(TheFormField).Count > 1 Then TheMessage = TheMessage & TheFormField & "(" _ & Request.Form(TheFormField).Count & "): " _ & Request.Form(TheFormField) & chr(13)

W przeciwnym wypadku w zmiennej tekstowej wiadomoci e-mail zapamitywana jest tylko nazwa pola i jego warto:
TheMessage = TheMessage & TheFormField & ": " _ & Request.Form(TheFormField) & chr(13)

Nastpnie ptla kodu przechodzi do nastpnego pola:


Next

Dalsza cz kodu korzysta obiektu danych wsppracujcych (omwionego w rozdziale 9.) w celu wysania wiadomoci e-mail do osoby okrelonej w polu SendTo:
Dim ObjMail Set objMail = CreateObject("CDONTS.NewMail") objMail.Send "na@na.com", cstr(Request.Form("SendTo")), _ "New More Info Request", cstr(TheMessage) Set objMail = Nothing

173

ASP Kompendium

programisty

Procesor bazy danych dla formularza


Kolejnym zadaniem, czsto wykonywanym przy uyciu formularzy, jest zapamitywanie przesanych informacji w tabeli bazy danych. Obiekt Request po raz kolejny uyty jest tutaj przy przekazywaniu do formularza przetwarzajcego pl ukrytych i tych wypenianych przez odwiedzajcego. Tym razem przyjrzymy si przykadowej ankiecie. Go odwiedza nasz witryn i wypenia ankiet. Jej zawarto jest wpisywana w tabel bazy danych, a do zapisywania jakichkolwiek danych formularza w bazie wykorzystujemy kod. Kod uywa obiektu Request w celu wyszukania nazw pl i ich wartoci, nazwy tabeli oraz wiadomoci prezentowanej gociowi. Strona ankiety pokazana jest na rysunku 5.17. Moe ona zawiera rozmaite pola formularza. Nazwa kadego elementu formularza musi by taka sama jak nazwa pola w tabeli docelowej, do ktrej zostanie dodany rekord. Na przykad uycie takiego pola formularza:
<TEXTAREA WRAP=PHYSICAL NAME="Service" ROWS=3 COLS=61></TEXTAREA>

wymaga zastosowania dla pola tabeli nazwy Service. Formularz HTML zawiera rwnie nastpujce pola ukryte:
<INPUT TYPE=HIDDEN NAME="CompleteMessage" VALUE="Dzikujemy za podanie niezbdnych informacji"> <INPUT TYPE=HIDDEN NAME="TableName" VALUE="C5Survey">

Rysunek 5.17. Strona ankiety Ukryte pole CompleteMessage zapamituje wiadomo, ktra bdzie wywietlana po przesaniu formularza. Pole TableName przechowuje nazw tabeli, w ktrej dane maj by zapisane. Kiedy gocie nacisn przycisk Wylij, ujrz stron pokazan na rysunku 5.18. Kod strony process_form.asp odbiera przesane dane i dodaje je do bazy. Gwny blok kodowy jest nastpujcy:
<% Option Explicit Dim TheFields Dim TheValues

Rozdzia 5 Obiekt Request


Dim TheFormField Dim TheQuery For Each TheFormField in Request.Form If TheFormField <> "TableName" and TheFormField <> "CompleteMessage" _

174

and TheFormField <> "SubmitButton" Then TheFields = TheFields & TheFormField & ", " TheValues = TheValues & "'" & Request.Form(TheFormField) & "', " end if Next TheFields = left(TheFields, Len(TheFields) - 2) TheValues = left(TheValues, Len(TheValues) - 2) Dim conn set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" conn.execute "insert into " & Request.Form("TableName") _ & " (" & TheFields & ") values (" & TheValues & ")" %>

Rysunek 5.18. Strona wywietlana po przesaniu ankiety przez gocia Kod przechodzi kolejno przez wszystkie przesane pola, ktre s dostpne poprzez zbir Form:
For Each TheFormField in Request.Form

Kod nie przetwarza poniszych pl, poniewa nie maj one by dodane do bazy danych:
If TheFormField <> "TableName" and "CompleteMessage" _ and TheFormField <> "SubmitButton" Then TheFormField <>

Wszystkie inne pola i ich wartoci czone razem, poniewa bd potrzebne do stworzenia waciwego zapytania:

175

ASP Kompendium
TheFields = TheFields & TheFormField & ", " TheValues = TheValues & "'" & Request.Form(TheFormField) & "', "

programisty

Nastpnie kod przechodzi w ptli do kolejnej pozycji zbioru Form:


Next

Kady cig znakw stworzony wczeniej bdzie w tym momencie posiada dodatkowy przecinek i spacj na kocu. Ten fragment kodu usuwa niepotrzebne znaki:
TheFields = left(TheFields, Len(TheFields) - 2) TheValues = left(TheValues, Len(TheValues) - 2)

W kocu kod bazy danych (omwiony gruntownie w rozdziaach 13. i 14.) dodaje przesane dane do danych przekazanych poprzez pole TableField w zbiorze Form:
Dim conn set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" conn.execute "insert into " & Request.Form("TableName") _ & " (" & TheFields & ") values (" & TheValues & ")"

Witryna logowania
Wiele witryn posiada obszary poufne, przed dostpem do ktrych gocie musz si najpierw zalogowa. Czasami spotyka si cae witryny tego typu. Kolejny przykad pokae w jaki sposb stworzy stron logowania korzystajc ze znacznika cookie do zapamitania odpowiednich informacji o uytkowniku. Strona zapamituje rwnie informacje o gociach w bazie danych tak, aby mogli wej na witryn rwnie wtedy, gdy ich cookie nie jest dostpny. Narzdzie to pokazuje sposb wykorzystania obiektu Request w celu gromadzenia informacji pochodzcych od goci. Uytkownicy otrzymuj informacje ze zbioru Form, a ich komputery ze zbioru Cookie. Kiedy gocie odwiedzaj witryn po raz pierwszy, ukazuje si im widok pokazany na rysunku 5.19. Poniewa s tu po raz pierwszy, nie posiadaj w swoim systemie znacznika cookie. Kod nie wie czy s oni uytkownikami, ktrzy ju odwiedzali stron, nie majcymi obecnie cookie, czy s cakiem nowi. Jeli s nowymi gociami strony, mog klikn cze, po czym zostan odesani do strony rejestrujcej nowego uytkownika, pokazanej na rysunku 5.20.

Rozdzia 5 Obiekt Request

176

Rysunek 5.19. Formularz logowania

Rysunek 5.20. Strona nowego uytkownika Tutaj uytkownicy podaj swoje imi (nazw), haso oraz ulubion rzecz. Kod wpisuje te informacje do bazy danych, jak rwnie wysya do systemu uytkownika znacznik cookie pozwalajcy mu odwiedza witryn w przyszoci. Kiedy ju uytkownik zakoczy procedur logowania, ujrzy stron pokazan na rysunku 5.21.

177

ASP Kompendium

programisty

Rysunek 5.21. Strona witajca witryny logowania Przy nastpnych wizytach uytkownicy bd odsyani wprost do tej strony, jeli tylko cookie bdzie znajdowa si na ich komputerach; jeli tak nie bdzie, bd oni odesani z powrotem do strony logowania. Tym razem jednak uzyskaj dostp do witryny zaraz po wpisaniu nazwy uytkownika i hasa, poniewa ich dane znajduj si w bazie. Nastpnie te informacje zostan zapisane w znaczniku cookie w ich komputerze i za kolejnym razem (miejmy nadziej!) bd oni mogli przej od razu do strony powitania.
Przypis Kod uyty w tym przykadzie zawiera pewne instrukcje, ktre nie zostay jeszcze omwione. Zostay one jednak zastosowane tutaj, aby przykad by kompletny.

Wejciowa strona tej przykadowej witryny jest odpowiedzialna za sprawdzanie, czy dany go posiada nasz znacznik cookie. Jeli tak, strona wywietla zawarto dostosowan do uytkownika. Jeli nie, go odsyany jest do strony logowania. Gwny blok kodu tej strony jest nastpujcy:
<% Option Explicit If not Len(Request.Cookies("Login")("UserName")) > 1 Then Response.Redirect "./login.asp" End If %>

Kod uywa obiektu Request do sprawdzenia cookie. Znacznik jest zoony, jeli zawiera wicej ni jedno pole. Aby si przekona, czy cookie w ogle istnieje, sprawdzana jest dugo znacznika.
If not Len(Request.Cookies("Login")("UserName")) > 1 Then

Jeli cookie nie ma w sobie przynajmniej jednego znaku, nie jest obecny i odwiedzajcy odesani zostaj do strony logowania:
Response.Redirect "./login.asp"

Rozdzia 5 Obiekt Request

178

W innym wypadku widok strony jest dostosowywany wedug nazwy odwiedzajcego i jego ulubionej kategorii, w oparciu o znaleziony znacznik cookie:
Witamy na witrynie uytkownika o imieniu <% Response.Write Request.Cookies("Login")("UserName")%> Kliknij tutaj aby zobaczy wszystkie produkty z Twojej ulubionej kategorii, ktr jest <% Response.Write Request.Cookies("Login")("FavCat")%>

Zauwa, e ponownie mamy do czynienia ze zoonym cookie. Gwna nazwa cookie brzmi Login, a kluczami podrzdnymi s UserName i FavCat. Strona logowania pozwala gociom odwiedza witryn, jeli tylko znajduj si oni w bazie danych. Jeli tak jest, znacznik cookie jest wysyany do ich systemu, a sami uytkownicy s odsyani do strony witajcej.
<% Option Explicit Dim RSUser Dim conn If not isempty(Request.Form("Login")) Then set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSUser = conn.Execute("select * from C5Login where " _ & "UserName = '" & Request.Form("UserName") & "' and " _ & "Password = '" & Request.Form("Password") & "'") If not RSUser.EOF Then response.cookies("Login")("UserName") = request.form ("username") response.cookies("Login")("FavCat") = request.form("FavCat") response.cookies("Login").Expires = "2/2/2002" response.redirect "./welcomeback.asp" end if End If %>

Strona ma dwa stany. Albo gocie dopiero weszli na stron i naley wywietli formularz, albo przesali formularz i informacje musz by skonfrontowane z baz danych. Funkcja IsEmpty jest uywana w celu sprawdzenia nacinicia przycisku Zaloguj. Jeli przycisk by nacinity, formularz zosta przesany:
If not isempty(Request.Form("Login")) Then

W tym przypadku, bdziemy musieli sprawdzi dane odwiedzajcego w naszej bazie danych:
set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSUser = conn.Execute("select * from C5Login where " _ & "UserName = '" & Request.Form("UserName") & "' and " _ & "Password = '" & Request.Form("Password") & "'")

Jeli rekord odwiedzajcego zosta znaleziony, ustawiona zostanie flaga EOF:


If not RSUser.EOF Then

Nastpnie musimy wysa cookie do systemu gocia i ustali dat wyganicia wanoci znacznika:

179

ASP Kompendium
response.cookies("Login")("UserName") = request.form ("username") response.cookies("Login")("FavCat") = request.form("FavCat") response.cookies("Login").Expires = "2/2/2002"

programisty

Wtedy go odsyany jest do strony witajcej.


response.redirect "./welcomeback.asp"

Kod nowej strony dodaje goci do bazy danych, zapisuje w ich systemie cookie i wysya ich do strony powitania. Kod strony:
<% Option Explicit Dim conn If not isempty(Request.Form("Add")) Then set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" conn.execute "insert into C5Login (UserName, Password, FavCat) " _ & "values (" _ & "'" & Request.Form("UserName") & "', " _ & "'" & Request.Form("Password") & "', " _ & "'" & Request.Form("FavCat") & "')" response.cookies("Login")("UserName") = request.form("username") response.cookies("Login")("FavCat") = request.form("FavCat") response.cookies("Login").Expires = "2/2/2002" response.redirect "./welcomeback.asp" End If %>

Podobnie jak strona logowania, rwnie ta strona ma dwa stany. Albo moe mie widok formularza, albo widok przetwarzania. Widok formularza po prostu przedstawia takowy w celu wypenienia go informacjami pochodzcymi od goci. Drugi z widokw dokonuje przetworzenia danych wprowadzonych w formularzu. Stan okrelany jest na podstawie sprawdzenia przycisku Dodaj:
If not isempty(Request.Form("Add")) Then

Jeli przycisk jest nacinity, musimy doda nowego gocia do bazy danych:
set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" conn.execute "insert into C5Login (UserName, Password, FavCat) " _ & "values (" _ & "'" & Request.Form("UserName") & "', " _ & "'" & Request.Form("Password") & "', " _ & "'" & Request.Form("FavCat") & "')"

Nastpnie cookie wraz z dat wanoci s wpisywane do systemu gocia:


response.cookies("Login")("UserName") = request.form("username") response.cookies("Login")("FavCat") = request.form("FavCat") response.cookies("Login").Expires = "2/2/2002"

Rozdzia 5 Obiekt Request

180

a odwiedzajcy jest odsyany do strony powitania.


response.redirect "./welcomeback.asp"

Rozdzia 6. Obiekt Response


Wysyanie informacji do goci
W ostatnim rozdziale przyjrzelimy procesowi pozwalajcemu na bezporednie i porednie dostarczanie nam informacji o daniu i rodowisku goci. W tym rozdziale zwrcimy uwag na drug tego procesu wysyanie informacji gociom i ich systemom operacyjnym. Spjrz na rysunek 6.1. Owalna otoczka wskazuje na rol obiektu Response, ktry pozwala na przekazywanie dynamicznej zawartoci do przegldarki. Korzystasz z informacji zebranych przez system goci oraz przez skadniki twojego systemu w celu przygotowania tekstu, grafik i wielu innych rzeczy, ktre maj by wysane do odwiedzajcego. Realizuje si to poprzez obiekt Response.

Rysunek 6.1. Rola obiektu Response w procesie ASP W tym rozdziale omawiamy zbir, waciwoci i metody obiektu Response. Poznasz sposoby wpisywania cookie do przegldarki gocia. Nauczysz si sprawowa kontrol podczas wysyania wynikw kodu do gocia. Bdziesz wiedzia jak wpisywa nagwki do przegldarki. Przyjrzymy si rwnie wysyaniu danych innych ni tekst, takich jak grafiki. Na kocu rozdziau przyjrzymy si kilku praktycznym przykadom uycia obiektu Response.

Zbir obiektu Response


Obiekt Response posiada jeden tylko zbir, ktry omwiono poniej i podsumowano w tabeli 6.1. Tabela 6.1. Zbir obiektu Response Zbir Przeznaczenie Cookies Wpisywanie znacznikw cookie do przegldarek goci.

Rozdzia 6 Obiekt Response

182

Zbir cookie
Jak wspomniano w poprzednim rozdziale, cookies s sposobem na zapisanie informacji na komputerze gocia. Pniej moesz wykorzysta twj kod w celu wyszukania wartoci zapisanych w systemie gocia. Na przykad mgby zapamita w cookie najczstsze kryteria wyszukiwania uyte przez gocia na twojej witrynie WWW. Nastpnie kiedy odwiedzajcy zaczby ponownie wyszukiwa, mgby przedstawi mu ostatnie pi kryteriw; mgby rwnie zapamita w cookie pooenie gocia i wywietli tak lokaln informacj, kiedy ponownie bdzie odwiedza twoj witryn. Poniewa jednak dane przechowywane s w systemie gocia, cookie nie moe by jedynym sposobem identyfikacji goci. Zawsze powiniene dysponowa jak alternatyw dla cookies. Pamitaj, e uytkownicy mog w kadym czasie skasowa kod, mog mie na komputerze program blokujcy cookies lub mog odwiedza twoj witryn z innego systemu. Umieszczania cookie na komputerze gocia dokonuje si przy uyciu zbioru Cookies obiektu Response. Aby wpisa pojedynczy, prosty znacznik cookie do systemu gocia, naley stworzy nastpujcy kod:
Response.Cookies("NameOfCookie") = "Warto"

jest nazw cookie zapamitanego na systemie gocia. Warto reprezentuje tekst zapamitywany w cookie. Tak wic ten kod:
NameOfCookie
Response.Cookies("SearchCriteria1") = "ASP"

wpisze do systemu gocia cookie o nazwie SearchCriteria1. Znacznik bdzie zawiera warto ASP. Jeli cookie ju istnieje, stara warto bdzie zastpiona now. Poprzedni kod tworzy prosty cookie zawierajcy pojedyncz warto. Jednak znacznik moe by rwnie zoony i moe zawiera klucze podrzdne. Odniesienia to danego klucza dokonuje si poprzez okrelenie nazwy cookie wraz z nazw klucza podrzdnego w nastpujcej formie:
Response.Cookies("NameOfCookie")("NameOfKey") = "Warto"

W tym przykadzie NameOfCookie jest nazw cookie gwnego, a NameOfKey reprezentuje nazw klucza podrzdnego, do ktrego si odnosimy. Warto to tekst wpisywany do cookie. W naszym przykadzie zwizanym z kryteriami przeszukiwania, moglibymy zapamitywa najczciej wykorzystywane kryteria wyszukiwania w zoonym cookie. Spjrz na rysunek 6.2. To uproszczony widok naszej strony wyszukiwania, kiedy go korzysta z niej po raz pierwszy. Pole najczciej wykorzystywanych kryteriw jest puste. Jednak po kilku przeszukiwaniach pole zostanie zapenione elementami do wyboru, jak to pokazano na rysunku 6.3.

183

ASP Kompendium

programisty

Rysunek 6.2. Pierwotny widok strony wyszukujcej

Rysunek 6.3. Widok strona po zakoczeniu wyszukiwania Kod realizujcy to zadanie uywa cookies. Blok kodowy na pocztku strony wpisuje znaczniki cookies:
<% If Len(Request.Form("Search")) > 0 Then Response.Cookies("SearchCriteria")("5")Request.Cookies ("SearchCriteria")("4") Response.Cookies("SearchCriteria")("4")Request.Cookies ("SearchCriteria")("3") Response.Cookies("SearchCriteria")("3")Request.Cookies ("SearchCriteria")("2")

Rozdzia 6 Obiekt Response


Response.Cookies("SearchCriteria")("2")Request.Cookies ("SearchCriteria")("1") Response.Cookies("SearchCriteria")("1") = Request.Form("Search") End If %>

184

Po pierwsze kod upewnia si, czy go wprowadzi nowe kryterium wyszukiwania:


If Len(Request.Form("Search")) > 0 Then

Jeli tak si stao, kady cookie przeskakuje o jeden poziom w gr. Czwarte kryterium z listy najczciej uywanych staje si pitym, trzecie czwartym i tak dalej:
Response.Cookies("SearchCriteria")("5")Request.Cookies ("SearchCriteria")("4") Response.Cookies("SearchCriteria")("4")Request.Cookies ("SearchCriteria")("3") Response.Cookies("SearchCriteria")("3")Request.Cookies ("SearchCriteria")("2") Response.Cookies("SearchCriteria")("2")Request.Cookies ("SearchCriteria")("1")

Nastpnie nowo wprowadzone kryterium jest dokadane do listy najczciej uywanych:


Response.Cookies("SearchCriteria")("1") = Request.Form("Search")

W formularzu HTML obiekt wyboru Select jest wypeniany tymi znacznikami cookie za kadym razem, kiedy strona jest adowana:
<SELECT NAME="OldSearch" SIZE=1> <OPTION VALUE="<% Response.Write Request.Cookies("SearchCriteria")("1") %>"><% Response.Write Request.Cookies("SearchCriteria")("1") %> <OPTION VALUE="<% Response.Write Request.Cookies("SearchCriteria")("2") %>"><% Response.Write Request.Cookies("SearchCriteria")("2") %> <OPTION VALUE="<% Response.Write Request.Cookies("SearchCriteria")("3") %>"><% Response.Write Request.Cookies("SearchCriteria")("3") %> <OPTION VALUE="<% Response.Write Request.Cookies("SearchCriteria")("4") %>"><% Response.Write Request.Cookies("SearchCriteria")("4") %> <OPTION VALUE="<% Response.Write Request.Cookies("SearchCriteria")("5") %>"><% Response.Write Request.Cookies("SearchCriteria")("5") %> </SELECT>

Znacznik cookie bdzie jednak obecny tylko przez czas, w ktrym odwiedzajcy jest poczony z twoj witryn. Aby znacznik pozosta duej na systemie gocia, musisz okreli poprzez waciwo Expires odpowiedni dat i czas (lub jedn z tych wartoci) wanoci cookie. Skadnia jest waciwo Expires nastpujca:

185

ASP Kompendium
Response.Cookies("NameOfCookie").Expires = Data

programisty

okrela moment upynicia wanoci cookie. NameOfCookie jest nazw tego znacznika, dla ktrego chcesz ustali dat wanoci. W naszym przykadzie kod wygldaby tak:
Data
Response.Cookies("SearchCriteria").Expires = "5/1/2005"

Istniej trzy inne waciwoci cookie, ktre moesz okreli: Domain, Path i Secure. Moesz ograniczy wysyanie cookie do jednej tylko nazwy domeny przy uyciu waciwoci Domain. Jeli wic napisaby taki kod:
Response.Cookies("SearchCriteria").Domain = "whatever.com"

to przekazywanie cookies zostaoby ograniczone jedynie do domeny whatever.com. Moemy pj dalej i ograniczy cookie do wyszczeglnionej cieki katalogu wykorzystujc waciwo Path. Jeli chcielibymy ograniczy przesyanie cookie do katalogu o nazwie Docs, kod byby taki:
Response.Cookies("SearchCriteria").Path = "/docs/"

Ostatni waciwoci zbioru Cookies, ktr naley omwi jest Secure. Ta booleowska waciwo zapamituje, czy cookie zosta bezpiecznie przesany bd otrzymany. Kod jest nastpujcy:
Response.Cookies("SearchCriteria").Secure = FALSE

Waciwoci obiektu Response


Waciwoci obiektu pozwalaj na kontrol sposobw wysyania danych do przegldarki odwiedzajcego. Waciwoci zostay omwione poniej, a podsumowano je w tabeli 6.2. Tabela 6.2. Waciwoci obiektu Response Waciwo Przeznaczenie Buffer Waciwo booleowska okrelajca czy wyjcie ASP jest wysane zaraz po pojawieniu si, czy jako blok. CacheControl Uywana do wskazania informacji dotyczcych buforowania dla serwerw proxy. Charset Uywana do ustalenia typu znakw, ktry jest doczany do nagwka typu zawartoci. ContentType Okrela nagwek typu zawartoci, ktry ustala typ danych zwracanych, na przykad HTML, obraz. Expires Okres wanoci buforowanej strony w minutach. ExpiresAbsolute Okrelona data i czas (lub jedno z nich) upynicia okresu wanoci buforowanej strony. IsClientConnected Waciwo booleowska sprawdzajca, czy klient w dalszym cigu jest poczony z witryn. PICS Docza pola etykiety PICS do zwracanych nagwkw. Status Nagwek wiersza stanu zwracany do przegldarki.

Rozdzia 6 Obiekt Response

186

Waciwo Buffer
Waciwo Buffer jest booleowsk waciwoci, okrelajc czy wyjcie strony ASP jest wysyane na bieco podczas uruchamiania, czy jest zapamitywane dopki cay kod nie bdzie kompletny lub nie zostanie wywoana metoda Flush. Uywajc waciwoci Buffer, musisz to zrobi przed wpisaniem jakiejkolwiek informacji do przegldarki. Jak stwierdzono wczeniej, jest to waciwo booleowska, co oznacza, e moe przyjmowa dwie wartoci: prawd (True) i fasz (False). Spjrzmy na dwa przykadowe bloki kodw rnicych si midzy sob ustawieniem waciwoci Buffer. Pierwszy kod jest buforowany.
<% Option Explicit Response.Buffer = True Response.Write "Zapytanie uruchomione" Dim conn Dim RSTotalSales set conn = server.createobject ("adodb.connection") conn.open "Sales", "sa", "YourPassword" set RSTotalSales = conn.Execute("select Sum(TotalAmount) as TotalSales " _ & "from Sales") Response.Write RSTotalSales("TotalAmount") %>

Scenariuszem tego bloku kodu jest prezentowanie strony ukazujcej cakowit kwot sprzeday dla wszystkich rekordw w tabeli bazy danych. Szacowany czas zapytania bdzie wynosi 20 sekund. Bufor jest wczony. Kiedy wic kod dojdzie do tego wiersza:
Response.Write "Zapytanie uruchomione..."

tekst jest umieszczany w buforze i nie jest wysyany do przegldarki. Kod jest kontynuowany i 20 sekund pniej jego dziaanie jest zakoczone. Tekst Zapytanie uruchomione, jak rwnie wynik zapytania s w tym momencie wysyane do przegldarki. Teraz zwr uwag na dziaanie tego bloku kodowego:
<% Option Explicit Response.Buffer = False Response.Write "Zapytanie uruchomione" Dim conn Dim RSTotalSales set conn = server.createobject ("adodb.connection") conn.open "Sales", "sa", "YourPassword" set RSTotalSales = conn.Execute("select Sum(TotalAmount) as TotalSales " _ & "from Sales") Response.Write RSTotalSales("TotalAmount") %>

Kiedy kod dojdzie do wiersza:


Response.Write "Zapytanie uruchomione..."

187

ASP Kompendium

programisty

tekst natychmiastowo wysany jest do przegldarki. teraz wic gocie otrzymuj informacj o tym, e co si dzieje w czasie ich oczekiwania na zakoczenie dziaania zapytania. Ta technika udzielania gociom stopniowego sprzenia zwrotnego jest bardzo wana przy procedurach, ktrych czas dziaania zajmuje wicej ni kilka sekund. Bez takiego sprzenia, szczeglnie w Internecie, gocie mogliby stwierdzi, e co poszo nie tak i opuszcz twoj witryn.

Waciwo CacheControl
Wielu uytkownikw uzyskuje dostp do Internetu poprzez serwer proxy. Przekazuj oni swe danie przez przegldark, ktra nastpnie wysya je do serwera proxy, penicego rol lejka dla wielu komputerw wysyajcych dania do Internetu. Jedn z rzeczy przechowywanych przez proxy jest podrczna pami stron, do ktrych dostpu dali jego uytkownicy. Zamiast wic wyszukiwa wielokrotnie t sam stron w Internecie, proxy jedynie zwraca buforowan stron tej osobie, ktra wystosowaa danie. Dziaa to zazwyczaj dobrze, gdy masz do czynienia ze statycznymi stronami HTML, chocia przy dynamicznych stronach ASP czsto nie bdziesz chcia ich buforowa. Waciwo CacheControl jest sposobem na poinstruowanie serwera proxy o tym, czy zastosowa buforowanie. Kod musi wystpowa przed HTML-em, a jego forma jest nastpujca:
Response.CacheControl = "Public"

lub
Response.CacheControl = "Private"

Domylnym ustawieniem waciwoci jest Private, co oznacza, e zawarto nie powinna by buforowana. Jeli chcesz buforowa tekst twojej strony ASP, po prostu ustal dla waciwoci warto Public.

Waciwo Charset
Waciwo Charset pozwala na modyfikacj parametru o tej samej nazwie w nagwku typu zawartoci. Kod ma nastpujc skadni:
Response.Charset = "CharSetValue"

reprezentuje nazw zestawu znakw, ktrego chcesz uy. Jeli uyjesz wicej ni jednego wiersza kodu modyfikujcego waciwo Charset, tylko ostatnia warto bdzie zastosowana. Poniewa wiersz kodu modyfikuje nagwek, musi on poprzedza HTML wysyany do przegldarki.
CharSetValue

Waciwo ContentType
Kiedy odsyasz zawarto do przegldarki, bez wzgldu na to czy jest to HTML czy twj kod, okrelasz typ zawartoci, ktry informuje przegldark i rodzaju zwracanych danych. Wysyasz HTML, obrazek, wideo, audio? O tym poinformuje przegldark wanie typ zawartoci. Moesz ustawi t warto w kodzie uywajc waciwoci ContentType. Jeli na przykad chciaby zaznaczy, e wysyae HTML, kod wygldaby tak:
Response.ContentType = "text/HTML"

Jeli chciaby zasygnalizowa wysanie obrazu gif, kod byby taki:


Response.ContentType = "image/GIF"

Rozdzia 6 Obiekt Response

188

Domyln wartoci dla tej waciwoci jest text/HTML. Pierwsza cz wartoci okrela typ, a druga podtyp zawartoci. Tabela 6.3. wyszczeglnia gwne typy. Tabela 6.3. Typy zawartoci Typ
Application Audio Image Message Multipart Text Video

Definicja Nieokrelona informacja binarna. Przesyane dane obejmuj format audio. Transmitowana jest grafika, zazwyczaj plik gif lub jpeg. Tre wiadomoci. Dane przesyane cz w sobie rne typy. Wysyany jest sam tekst, zwyky lub HTML. Przesyane dane maj format video, taki jak avi lub mpeg.

Waciwo Expires
Przegldarka odwiedzajcego zawiera pami podrczn, ktra jest obszarem pamici systemu gocia przechowujcym poprzednio przegldane strony. Pozwala to gociom na przegld danej strony WWW bez koniecznoci ponownego jej adowania pod warunkiem, e si nie zmienia. Przy stronach HTML zazwyczaj dziaa to wietnie strona znajduje si w buforze dopki nie musi by uaktualniona, a wtedy adowana jest ponownie. Jednak przy stronach ASP bdziesz potrzebowa lepszej kontroli nad czasem pozostawania strony w podrcznej pamici gocia przed jej bezporednim uaktualnieniem na twoim serwerze. Jednym ze sposobw na zrealizowanie tego zadania jest waciwo Expires ustalajca czas w minutach, podczas ktrego strona bdzie dostpna w podrcznej pamici odwiedzajcego. Waciwo ma nastpujc skadni:
Response.Expires = NumMinutes

gdzie NumMinutes okrela ilo minut buforowania strony. Za przykad wemy prosty przykad kodu:
<% Response.Expires = 2 Response.Write Now %>

Wynik wykonania kodu prezentuje rysunek 6.4.

189

ASP Kompendium

programisty

Rysunek 6.4. Wyjcie kodu uywajcego waciwoci Expires Kod wpisuje do przegldarki aktualne wartoci daty i godziny systemu operacyjnego serwera. Zauwa jednak, e warto waciwoci Expires wynosi 2. Jeli go zamknie przegldark i powrci do strony wcigu dwch minut, zobaczy dokadnie t sam dat i godzin. Jeli powrci do strony po czasie wikszym ni dwie minuty, strona bdzie uaktualniona. W ten sposb waciwo ustala zakres czasu, ktry musi upyn zanim strona bdzie uaktualniona, chyba e go nacinie przycisk Odwie (Refresh) swojej przegldarki. Ten typ kodu jest uyteczny w sytuacjach, kiedy masz stron, ktra jest czciej wywoywana ni zmieniana. Twoja strona moe by buforowana przez czas tylu minut, w ktrym jej zawarto bdzie poprawna.

Waciwo ExpiresAbsolute
Kolejn metod definiowania czasu buforowania strony jest waciwo ExpiresAbsolute, ktra umoliwia ustalenie granicznej daty lub godziny (lub obu tych wartoci) poprawnoci strony, w nastpujcej formie:
Response.ExpiresAbsolute = "5/14/2004 14:13"

Poprawne uycie tej waciwoci moe zaoszczdzi serwerowi niepotrzebnego zajmowania pasma oraz zbdnego przetwarzania wysyanej strony w sytuacjach, kiedy strona jest zmieniana raz na jaki czas. Na przykad twoja witryna moe mie stron z prognoz pogody. Tak strona moe si zmienia tylko jeden raz dziennie. Jeli odwiedzajcy powrci na stron w cigu tego samego dnia, nie zajdzie potrzeba ponownego wysyania strony. Moe ona znajdowa si po prostu w pamici podrcznej. Albo powiedzmy, e dysponujesz stron zawierajc list zaj, ktra jest uaktualniana co pitek. Jeli kto przeglda stron w poniedziaek, nie bdziesz chcia aby serwer wysya mu t stron ponownie w przecigu caego tygodnia a do pitku. Aby rozwiza ten problem, mgby stworzy nastpujcy kod:
<% Option Explicit Dim TheExpireDate If WeekDay(Date) = 1 then TheExpireDate = DateAdd("d", 5, Date) ElseIf WeekDay(Date) = 2 then TheExpireDate = DateAdd("d", 4, Date)

Rozdzia 6 Obiekt Response


ElseIf WeekDay(Date) = 3 then TheExpireDate = DateAdd("d", 3, Date) ElseIf WeekDay(Date) = 4 then TheExpireDate = DateAdd("d", 2, Date) ElseIf WeekDay(Date) = 5 then TheExpireDate = DateAdd("d", 1, Date) ElseIf WeekDay(Date) = 6 then TheExpireDate = DateAdd("d", 7, Date) Else TheExpireDate = DateAdd("d", 6, Date) End If Response.ExpiresAbsolute = TheExpireDate %>

190

Na wstpie korzystamy z dyrektywy Option deklarowa wszystkie nasze zmienne:


Option Explicit

Explicit,

ktra informuje kompilator o tym, e zamierzamy

Nastpnie deklarujemy zmienn TheExpireDate, ktra zapamituje dat upynicia wanoci strony:
Dim TheExpireDate

Pamitaj, e strona z list zaj jest uaktualniana w kady pitek, skoro wic aktualn dat jest niedziela, strona utraci wano za pi dni:
If WeekDay(Date) = 1 then TheExpireDate = DateAdd("d", 5, Date)

Jeli poniedziaek, strona straci wano za cztery dni:


ElseIf WeekDay(Date) = 2 then TheExpireDate = DateAdd("d", 4, Date)

Jeli aktualnym dniem jest wtorek, brakuje trzech dni do pitku:


ElseIf WeekDay(Date) = 3 then TheExpireDate = DateAdd("d", 3, Date)

W rod naley doda dwa dni do aktualnego dnia:


ElseIf WeekDay(Date) = 4 then TheExpireDate = DateAdd("d", 2, Date)

Dodajemy jeden dzie, jeli aktualnym dniem w systemie jest czwartek:


ElseIf WeekDay(Date) = 5 then TheExpireDate = DateAdd("d", 1, Date)

W pitek strona pozostanie aktualna przez cay tydzie:


ElseIf WeekDay(Date) = 6 then

191

ASP Kompendium
TheExpireDate = DateAdd("d", 7, Date)

programisty

Aby zostaa wykonany warunek instrukcji Else, musi by sobota. Dodajemy wic sze dni:
Else TheExpireDate = DateAdd("d", 6, Date)

Nastpnie kod uywa zmiennej TheExpireDate w celu ustawienia waciwoci ExpiresAbsolute:


Response.ExpiresAbsolute = TheExpireDate

Waciwo IsClientConnected
Waciwo IsClientConnected informuje o tym, czy go w dalszym cigu jest poczony z twoj witryn. Ta waciwo booleowska, przeznaczona jedynie do odczytu, zwraca prawd lub fasz. Jeli wartoci zwracan jest prawda, go cay czas jest poczony. Jeli wartoci jest fasz, go opuci twoj stron. Waciwo zazwyczaj uywana jest w instrukcji If w ten sposb:
If Response.IsClientConnected = True then

Pamitaj jednak, e instrukcja If oblicza wyraenie, tak wic wystarczy napisa:


If Response.IsClientConnected then

Moesz uy tej waciwoci w stronach o kodzie, ktrego uruchomienie moe zaj wicej ni kilka sekund. Jeli go opuci stron podczas dziaania kodu, jego dziaanie powinno by wstrzymane w celu oszczdzenia zasobw serwera. Spjrz na ten blok kodowy:
<% Option Explicit Dim conn Dim RSTotals Response.Buffer = False set conn = server.createobject ("adodb.connection") conn.open "Sales", "sa", "yourpassword" set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales99") response.write RSTotals("TotalSales") & "<P>" If Response.IsClientConnected Then set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales98") response.write RSTotals("TotalSales") & "<P>" If Response.IsClientConnected Then set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales97") response.write RSTotals("TotalSales") & "<P>" End If End If %>

Na pocztku deklaracja pary zmiennych przy uyciu dyrektywy Option


Option Explicit Dim conn

Explicit:

Rozdzia 6 Obiekt Response


Dim RSTotals

192

Scenariusz strony jest nastpujcy: chcemy uruchomi kilka zapyta, a kade z nich zajmie troch czasu, tak wic nie chcemy, aby strona bya buforowana. Chcielibymy, aby gocie widzieli wynik kadego zapytania w chwili ich pojawiania si, buforowanie jest wic wyczone:
Response.Buffer = False

Nastpnie czymy si z baz danych i uruchamiamy zapytanie:


set conn = server.createobject ("adodb.connection") conn.open "Sales", "sa", "yourpassword" set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales99")

Wtedy kod wysya wynik zapytania do przegldarki:


response.write RSTotals("TotalSales") & "<P>"

Dalej musimy si upewni, czy go w dalszym cigu jest poczony, poniewa nie chcemy uruchamia nastpnego zapytania, jeli opuci on stron:
If Response.IsClientConnected Then

Jeli go jest poczony, uruchamiane jest kolejne zapytanie, a jego wynik wpisywany jest do przegldarki:
set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales98") response.write RSTotals("TotalSales") & "<P>"

W kocu kod sprawdza, czy go jest poczony ze stron przed uruchomieniem ostatniego zapytania:
If Response.IsClientConnected Then set RSTotals = conn.Execute("select Sum(Sales) as TotalSales from Sales97") response.write RSTotals("TotalSales") & "<P>"

Waciwo PICS
Waciwo PICS umoliwia dodanie etykiety PICS do nagwka odpowiedzi. Waciwo ma nastpujc skadni:
Response.PICS = Warto

gdzie Warto reprezentuje tekst etykiety PICS, ktr chcesz doda. Oglnie rzecz biorc etykiety PICS uywane s do okrelenia wartoci znamionowej pod ktem zawartoci. Niektre przegldarki i niezalene narzdzia dodatkowe wyszukuj taki znacznik w celu okrelenia, czy wywietli stron filtrujc j na podstawie informacji pochodzcych od gocia, jak to jest w wypadku rodzicielskiej kontroli zawartoci stron. Uyby ten znacznik na stronie ASP, ktra miaaby zmienn zawarto w zalenoci od twojego kodu. Aby dowiedzie si nieco wicej o systemach wskanikw, moesz odwiedzi stron Recreational Software Advisory Council (http://www.rsac.org).

193

ASP Kompendium

programisty

Waciwo Status
Ostatni waciwoci obiektu Response jest Status, ktra pozwala na ustalenie wartoci zwracanego nagwka stanu. Mgby na przykad uy takiego kodu, aby przegldarka mylaa, e strona nie zostaa znaleziona:
Response.Status = 404

Ten kod wytworzy wyjcie pokazane na rysunku 6.5. Moe to by uyteczne w okolicznociach dynamicznego tworzenia warunku, ktry w rzeczywistoci nie jest prawdziwy. Ustawienie stanu moe by rwnie uyteczne podczas debuggingu w celu stwierdzenia co si stanie, jeli wystpi okrelony stan.

Rysunek 6.5. Wynik ustawienia wartoci statusu 404 widziany w przegldarce Internet Explorer 5

Metody obiektu Response


Metody obiektu Response zostay omwione poniej, a podsumowano je w tabeli 6.4. Tabela 6.4. Metody obiektu Response Metoda Definicja AddHeader Pozwala na dodanie wasnego, dostosowanego nagwka do odpowiedzi. AppendToLog Ta metoda zapewnia moliwo wpisania informacji do dziennika zdarze systemu NT. BinaryWrite Metoda uywana do wysyania informacji nietekstowych do przegldarki. Clear Usuwa dowolne buforowane wyjcie. End Zatrzymuje dowolne przetwarzanie kodu strony ASP. Flush Wysya zawarto bufora do przegldarki. Redirect Odsya przegldark do innej strony. Write Wysya tekst do przegldarki.

Rozdzia 6 Obiekt Response

194

Metoda AddHeader
Moesz uy metody AddHeader aby doda do wyjcia strony HTML swj wasny, dostosowany do wasnych potrzeb nagwek. Metoda przyjmuje nastpujc form:
Response.AddHeader NameOfHeader, ValueOfHeader

jest nazw, ktr chcesz uy dla nagwka, a ValueOfHeader jest wartoci wysyan do nagwka. Poniewa metoda ta wpisuje tre do nagwka HTTP, musi wystpowa przed kadym wyjciem HTML. Na przykad kod:
NameOfHeader
Response.AddHeader "StorageValue", "Red63"

stworzy pozycj nagwka o nazwie StorageValue i wartoci

Red63.

Metoda AppendToLog
Bardzo porczna metoda AppendToLog pozwala na dodanie tekstu do dziennika zdarze serwera WWW dla okrelonego dania. Tekst moe mie do 80 znakw i nie mog znale si w nim przecinki. Metoda ma nastpujc form:
Response.AppendToLog Text2Add

jest zmienn zawierajc tekst, ktry chcesz doda do dziennika zdarze. Aby skorzysta z tej funkcji, musisz wczy rejestracj dla tej witryny, w ktrej strona jest ulokowana. Moesz to zrobi poprzez Konsol zarzdzania Microsoftu wybierajc Witryn WWW (Web Site), a nastpnie klikajc j prawym przyciskiem i zaznaczajc Waciwoci (Properties). Przejd do zakadki Witryna WWW (Web Site), a wtedy ukae si dialog pokazany na rysunku 6.6. Upewnij si czy zaznaczye kratk Wcz rejestracj (Enable Logging).
Text2Add

Rysunek 6.6. Waciwoci witryny WWW Gdyby napisa taki kod:


Response.AppendToLog "mymessage"

to w dzienniku zdarze formatu W3C znalazaby si nastpujca pozycja:


1999-08-14 16:27:40 207.66.52.164 W3SVC3 NETSTATS2000 204.238.18.144 GET /aspbook/c6/logtry.asp mymessage 200 0 429 382 47088 80 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.0;+Windows+98;+DigExt) Login=FAVCAT=Music&USERNAME=Dave+Smith; +NSCookie=207%2E66%2E52%2E130%3A8%2F14%2F99+9%3A45%3A50+AM; +ASPSESSIONIDQGQQQQPF=GACBAFHAFIIOKEDDDBPAMJHJ

Zauwa, e dodany do dziennika tekst znajduje si w rodku tej pozycji i jest pogrubiony. Poza tym zwr uwag na to, e tekst pojawi si tylko w pozycji dziennika odnoszcej si do tej okrelonej strony.

Metoda BinaryWrite
Metoda BinaryWrite umoliwia wysyanie nietekstowych, binarnych informacji do przegldarki. Metoda ma nastpujc form:
Response.BinaryWrite DateToWrite

195

ASP Kompendium

programisty

Zmienna DataToWrite zawiera informacj binarn, ktr chcesz wysa do przegldarki. Zazwyczaj wysya si przegldarce zamiast tekstu dane obrazki lub dwik. Bardzo ciekawym sposobem wykorzystania tej funkcji jest moliwo umieszczenia znacznika ASP jako rda obrazka w standardowej stronie HTML. Za przykad wemy witryn WWW posiadajc stron pogodow podobn do tej pokazanej na rysunku 6.7. Ta prosta strona stworzona zostaa na bazie HTML-a:
<HMTL> <HEAD> <TITLE>Pogoda</TITLE> </HEAD> <BODY> <P>Dzisiejsza pogoda:<P> <IMG SRC="./mount71.gif"> </BODY> </HTML>

Rysunek 6.7. Strona z pogod Znacznik obrazka zawiera zdjcie reprezentujce aktualn pogod. Znacznik ten mgby by wyjciem strony ASP, jeli zmieniby rdo obrazka w nastpujcy sposb:
<IMG SRC="./weatherpict.asp">

Wtedy w stronie weatherpict.asp uyby metody BinaryWrite, aby zwrci binarn reprezentacj wywietlanego obrazka w stronie HTML. Kod takiej strony ASP mgby wyglda w ten sposb:
<% Option Explicit Dim conn Dim RSWeather

Rozdzia 6 Obiekt Response


Dim ThePicture set conn = server.createobject ("adodb.connection") conn.open "Pogoda", "sa", "yourpassword" set RSWeather = conn.Execute("select PathToCurrentWeather from WeatherCond" _ & "where WheatherDate = " & Date & "'") response.contenttype = "image/gif" set ObjBin = server.createobject("bin.binary") ThePicture = ObjBinReadFile(RSWeather("PathToCurrentWeather")) response.binarywrite(ThePicture) set ObjBin = Nothing %>

196

Po pierwsze informujemy przegldark o zamiarze deklarowania wszystkich naszych zmiennych:


Option Explicit

Nastpnie deklarowana jest para zmiennych bazy danych:


Dim conn Dim RSWeather

Potem deklarowana jest zmienna, ktra bdzie zapamitywaa binarne dane obrazka:
Dim ThePicture

Kod bazy danych wyszukuje obrazek reprezentujcy aktualny stan pogodowy:


set conn = server.createobject ("adodb.connection") conn.open "Pogoda", "sa", "yourpassword" set RSWeather = conn.Execute("select PathToCurrentWeather from WeatherCond" _ & "where WheatherDate = " & Date & "'")

Domylnie zwracana jest strona HTML. Strona ta wywietli obrazek pokazujcy warunki pogodowe, tak wic typ zawartoci musi by ustawiony w taki sposb, aby odzwierciedla warto zwracan:
response.contenttype = "image/gif"

Nastpnie uywamy jednego z wielu dostpnych na rynku niezalenych obiektw sterujcych, pozwalajcego otworzy plik binarny:
set ObjBin = server.createobject("bin.binary") ThePicture = ObjBinReadFile(RSWeather("PathToCurrentWeather"))

W kocu plik binarny jest wpisywany do przegldarki przy uyciu metody BinaryWrite obiektu Response:
response.binarywrite(ThePicture)

197

ASP Kompendium

programisty

Metoda Clear
Metoda Clear oprnia bufor. Poniewa metoda ta obsuguje bufor, musisz mie wczon waciwo Buffer, w przeciwnym razie wystpi bd. Metoda ma nastpujc skadni:
Response.Clear

Spjrz na ten kod:


<% Response.Buffer = True Response.Write "Hello" Response.Write " World!" %>

Ten kod wysya tekst "Hello


<% Response.Buffer = True Response.Write "Hello" Response.Clear

World!"

do przegldarki. Ten kod:

Response.Write " World!" %>

wpisze do przegldarki jedynie "World!". Tekst "Hello" by w buforze, kiedy ten zosta oprniony. Teraz zwr uwag na ten kod:
<% Response.Write "Hello" Response.Clear Response.Write " World!" %>

Ten kod wywoa stan bdu, poniewa bufor nie by wczony.

Metoda End
Metoda End obiektu Response nakazuje kompilatorowi zatrzymanie przetwarzania kodu. Przybiera ona nastpujc form:
Response.End

Wiemy, e kod uyty w poprzednim podrozdziale:


<% Response.Write "Hello" Response.Write " World!" %>

wpisze do przegldarki tekst "Hello


<%

World!".

Ale taki kod:

Rozdzia 6 Obiekt Response


Response.Write "Hello" Response.End Response.Write " World!" %>

198

wywietli w przegldarce jedynie tekst "Hello". Jeli korzystasz z buforowania wyjcia, zawarto bufora wysyana jest do przegldarki w chwili wywoania metody End. Metody tej uywa si zazwyczaj w instrukcji If. Sprawdzasz jaki warunek, a jeli zostanie on speniony koczysz przetwarzanie. Na przykad podczas dodawania rekordu pracownika do tabeli moesz sprawdza czy pewne pola s obecne lub czy maj okrelony typ. Jeli nie, generujesz wiadomo o bdzie, ktra jest wywietlana odwiedzajcemu i zatrzymujesz przetwarzanie.

Metoda Flush
W tym rozdziale przyjrzelimy si waciwociom kontrolujcym czas wysyania i jako danych wysyanych do przegldarki. Zwrcilimy uwag na waciwo Buffer, ktra pozwala przetrzymywa dane przed wysaniem ich do przegldarki; metod Clear oprniajc bufor; ponadto metod End wstrzymujc dalsze przetwarzanie kodu. Jeszcze jedna metoda pozwala na kontrol zachowania wyjcia: metoda Flush, ktra natychmiastowo wysya dowolne buforowane wyjcie do przegldarki. Poniewa metoda ta oprnia bufor, wywoa ona stan bdu, jeli bufor bdzie wyczony. Metoda ma nastpujc skadni:
Response.Flush

Dziki poczeniu waciwoci Buffer i metody Flush moesz sprawowa kompletn kontrol nad tym, w ktrym momencie rne wyniki kodw s wysyane do przegldarki. Powiedzmy, e masz stron wytwarzajc serie raportw w postaci tabel HTML, ktrych tre oparta jest na wynikach zapyta dziaajcych w bazie z danymi o sprzeday. Taka strona mogaby mie wygld podobny do tego pokazanego na rysunku 6.8. Strona aduje si 30 sekund. Kady kolejny rok sprzeday zajmuje 15 sekund, a kady miesic kolejnych kilka sekund. Zdecydowae, aby pokazywa gociowi dane kadego roku po przetworzeniu ich jako pojedynczej jednostki. Moesz zrealizowa to zadanie ustawiajc dla waciwoci Buffer warto True. Nastpnie po kodzie kadego roku moesz zastosowa metod Flush w celu natychmiastowego wysania tych danych do przegldarki.

199

ASP Kompendium

programisty

Rysunek 6.8. Raport sprzeday

Metoda Redirect
Metoda Redirect wysya przegldark do innej strony w celu otrzymania odpowiedzi. Metoda ma nastpujc form:
Response.Redirect URL

W tym przypadku URL oznacza adres strony, do ktrej przegldarka jest odsyana. Metoda ta jest uyteczna w wielu rozmaitych przypadkach. Gwnym przeznaczeniem metody jest przetworzenie dania w jaki sposb, a nastpnie wysanie osoby do innej strony, czasami nie bdcej stron ASP. Przykadowo moesz dysponowa katalogiem wywietlajcym informacje o twoich produktach, ich cen, opis itd. Moesz mie przycisk, przez ktry gocie wysyaliby zamwienie na dany produkt do strony ASP. Strona zawieraaby rwnie ikon ze zdjciem produktu. Taka strona pokazana jest na rysunku 6.9. Kiedy gocie kliknliby ikon produktu, zobaczyliby wikszy jego obraz. Zazwyczaj taka ikona jest czem do obrazka. Jednak dla informacji marketingowych by moe bdziesz chcia obserwowa, jaka liczba goci da dostpu do wikszego obrazka produktu.

Rozdzia 6 Obiekt Response

200

Rysunek 6.9. Przykad katalogu produktw Moesz to zrobi czc si ze stron ASP, ktra zapamitywaaby dania w bazie danych, a nastpnie readresowaaby goci do wikszego obrazka produktu. Kolejnym czstym przykadem zastosowania metody Redirect s paski reklamowe (banery), ktre s obrazami umieszczanymi w witrynie w celu reklamowania jakiej innej witryny. Kiedy gocie klikn baner, zostan przeniesieni na witryn reklamowan na pasku. Liczba goci, ktrzy kliknli baner jest bardzo wana, poniewa czsto uywana jest ona do okrelenia opaty za reklam. Prawdopodobnie chciaby mie stron ASP pomidzy banerem a witryn reklamujcego si. Kiedy gocie klikn baner, danie zostanie wysane do strony ASP, ktra zapamita to dziaanie. Nastpnie kod strony ASP readresuje gocia do strony reklamodawcy.

Metoda Write
Metoda Write (czsto uywan w ostatnich kilku rozdziaach) jest metod, z ktrej najprawdopodobniej bdziesz korzysta najczciej. Umoliwia ona zwracanie do przegldarki danych niebinarnych. Metoda przyjmuje nastpujc form:
Response.Write Text2Write

gdzie Text2Write jest tekstem, ktry chcesz wysa do przegldarki. Na przykad ten wiersz kodu:
Response.Write "Hello World!"

wyle do przegldarki tekst "Hello World!" w tym miejscu, gdzie kod zosta napisany. Moesz wypisywa teksty, daty, liczby itd. Moesz rwnie wbudowa HTML w tekst wysyany przy uyciu metody Write:
Response.Write "<B>Hello World!</B>"

Ten wiersz kodu wypisze tekst "Hello World!" wraz ze znacznikami pogrubienia HTML. Czasami musisz wstawi cudzysw do cigu znakw, ktry wysyasz do przegldarki. Moesz to zrobi w taki sposb:

201

ASP Kompendium
Response.Write "Bob mwi, ""Hello World!"""

programisty

Podwjny cudzysw oznacza, e chcesz umieci cudzysw w cudzysowie.

Obiekt Response w dziaaniu


W tym podrozdziale zwrcimy uwag na kilka przykadw uycia metod, waciwoci i zbioru obiektu Response, dziki ktrym moesz stworzy programy usugowe, gotowe do zastosowania od razu. Pierwszym przykadem bdzie dodanie obiektu wyboru do strony gwnej, ktrego gocie mogliby uywa w celu szybkiego odnajdywania cieki do najbardziej popularnych stron witryny. Nastpnie rzucimy okiem na narzdzie implementujce pasek zaawansowania, ktry jest podobny do paska w diagramie, ale wskazuje postp w wykonywaniu zadania. Narzdzie to bdzie wykorzystywao buforowanie. Ponadto zwrcimy uwag na stron pozwalajc gociom zapamitywa ich osobiste preferencje przeszukiwania witryny. Zbir Cookies uywany jest do zapamitywania ulubionych kolorw i czcionek, a metoda Write do dostosowania widoku strony.
Przypis Ten podrozdzia zawiera w swojej treci pewne obiekty i metody, ktre nie byy jeszcze omwione. Uyto ich jednak tutaj, aby przykady byy kompletne.

Readresowanie i obiekt wyboru


W tej przykadowej witrynie, strona gwna zawiera standardowe cza nawigacyjne z gwnymi obszarami witryny. Oprcz tego zawiera te obiekt sterujcy Select, ktry gocie wykorzysta mog do przegldu najpopularniejszych stron witryny. Witryna wykorzystuje metod Redirect podczas odsyania goci do strony wybranej w obiekcie sterujcym. Uywa ona rwnie metody Write w celu wypenienia obiektu. Strona gwna pokazana jest na rysunku 6.10.

Rysunek 6.10. Strona gwna wykorzystujca readresowanie przy uyciu obiektu wyboru

Rozdzia 6 Obiekt Response

202

Obiekt sterujcy Select, ktry wywietla list najpopularniejszych stron witryny WWW, zawiera informacje o stronach i ich lokalizacji wzite z tabeli bazy danych. Gocie wybieraj stron z listy, a nastpnie, kiedy nacisn przycisk Go, s do niej przenoszeni. Jedna z pozycji na licie to strona transakcji miesica. Kiedy zostanie ona wybrana z listy, a go nacinie przycisk Go, zostanie przeniesiony do strony, ktra zostaa pokazana na rysunku 6.11.

Rysunek 6.11. Strona transakcji miesica ukazujca si po wybraniu jej w obiekcie wyboru Obiekt Select jest wypeniany z tabeli bazy danych SQL Servera. Tabela zawiera nazwy stron wywietlanych w obiekcie oraz adresy URL w postaci wartoci przekazywanych obiektowi. Wyszczeglnienie pl tabeli bazy danych prezentuje tabela 6.5. Tabela 6.5. Pola tabeli C6Redirect Nazwa pola Typ pola Dugo PageName varchar 100 PageUrl varchar 100 Pole PageName zapamituje nazw strony wywietlany w obiekcie wyboru. Pole PageUrl przechowuje pooenie tej strony. Kod strony gwnej wyszukuje dane z tabeli C6Redirect.
<% Option Explicit Dim conn Dim RSMostPopular set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSMostPopular = conn.Execute("select * from C6Redirect") %>

Na pocztku kod informuje kompilator o zamiarze deklarowania wszystkich naszych zmiennych:


Option Explicit

203

ASP Kompendium

programisty

Nastpnie deklarowane s dwie zmienne, ktre wykorzystamy do czenia si z baz oraz wyszukiwania potrzebnych danych:
Dim conn Dim RSMostPopular

Teraz kod czy si z baz danych i wyszukuje informacje o najpopularniejszych stronach:


set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSMostPopular = conn.Execute("select * from C6Redirect")

Wyszukane w bazie dane s wykorzystywane w drugim bloku kodu tworzcym obiekt sterujcy Select.
<SELECT NAME="RedirectTo"> <% Do Until RSMostPopular.EOF %> <OPTION VALUE="<% response.write RSMostPopular("PageURL") %>"> <% response.write RSMostPopular("PageName") %></OPTION> <% RSMostPopular.MoveNext Loop %> </SELECT>

Obiekt Select wywouje pole RedirectTo:


<SELECT NAME="RedirectTo">

Nastpnie kod uruchamia ptl przechodzc przez wszystkie rekordy tabeli najpopularniejszych stron:
<% Do Until RSMostPopular.EOF %>

Metoda Write obiektu Response uywana jest przy dodawaniu opcji do obiektu wyboru. Zauwa, e metoda Write wystpuje w jednym wierszu z HTML-em. Poza tym zwr uwag na to, e dokonujemy dwch wpisw dla jednego rekordu: pierwszy zapamituje wewntrzn warto opcji stron, do ktrej odsyany jest go po dokonaniu wyboru; drugi wpis zawiera prezentowan nazw strony:
<OPTION VALUE="<% response.write RSMostPopular("PageURL") %>"> <% response.write RSMostPopular("PageName") %></OPTION>

Nastpnie kod przechodzi do kolejnego rekordu:


<% RSMostPopular.MoveNext Loop %>

Rozdzia 6 Obiekt Response

204

Tabela 6.6. ukazuje przykadowe rekordy, ktre mog zosta umieszczone w tabeli bazy. Rekordy z tabeli 6.6. wytworz nastpujcy HTML:
<SELECT NAME="RedirectTo"> <OPTION VALUE="./clearance.asp ">Sprzeda</OPTION> <OPTION VALUE="./deal_of_the_month.html">Transakcja miesica</OPTION> <OPTION VALUE="../index.html">Numery telefonw</OPTION> <OPTION VALUE="mailto:jsmith@whatever.com">E-mail</OPTION> </SELECT>

Tabela 6.6. Przykadowe rekordy tabeli C6Redirect Strona Definicja Sprzeda ./clearance.asp Transakcja miesica ./deal_of_the_month.html Numery telefonu ../index.html E-mail mailto:jsmith@whatever.com Zwr uwag na pozycj E-mail, ktra funkcjonuje jak cze pocztowe i otwiera now wiadomo zaadresowan wedug wartoci pola. Kiedy go nacinie przycisk Go, formularz jest przesyany do strony redirectcombo.asp, jak to okrelono w znaczniku Form:
<FORM NAME="LAYOUTFORM" ACTION="./redirectcombo.asp" METHOD=POST>

Kod tej strony readresuje gocia wedug wystosowanego dania:


<% If not isempty(Request.Form("RedirectTo")) Then Response.Redirect Request.Form("RedirectTo") else Response.Redirect "../index.html" End If %>

Wstpnie powyszy kod upewnia si, czy pole RedirectTo byo przesane wraz z formularzem:
If not isempty(Request.Form("RedirectTo")) Then

Jeli tak, gocie s odsyani do adresu URL okrelonego w polu RedirectTo:


Response.Redirect Request.Form("RedirectTo")

W przeciwnym razie wprowadzili oni t stron w sposb nie pozwalajcy na dostp do niej, s wic odsyani do strony gwnej:
Response.Redirect "../index.html"

Pasek zaawansowania
Ta przykadowa strona pokazuje jak stworzy pasek zaawansowania, ktry stanowiby wizualny sygna postpu w wykonywaniu jakiego zadania. Narzdzie wykorzystuje metod Write w celu sterowania wyjciem

205

ASP Kompendium

programisty

HTML. Wcza rwnie funkcj buforowania i przy uyciu metody Flush dokadnie kontroluje czas ukazywania si wyjcia. Kiedy gocie wejd na stron, zobacz widok pokazany na rysunku 6.12. Nastpnie strona rozpoczyna swj dugi proces tworzenia raportu. Pasek zaawansowania wskazuje jak daleko posun si proces, jak to pokazano na rysunku 6.13.

Rysunek 6.12. Pasek zaawansowania w pocztkowym stanie

Rysunek 6.13. Pasek zaawansowania w poowie procesu Pasek zaawansowania pokazuje odwiedzajcemu, e strona cay czas pracuje a do chwili, gdy proces si nie zakoczy, a wtedy ukae si wynik prezentowany na rysunku 6.14.

Rozdzia 6 Obiekt Response

206

Rysunek 6.14. Pasek zaawansowania w caoci Do stworzenia paska zaawansowania kod wykorzystuje opnienia czasowe symulujce dziaanie kodu podczas tworzenia raportu. Pierwszy blok kodu jest nastpujcy:
<% Option Explicit Response.Buffer = True Dim DelayTime %>

Po pierwsze informujemy kompilator o deklarowaniu zmiennych:


Option Explicit

Nastpnie wczamy bufor, poniewa bdziemy uywa metody Flush:


Response.Buffer = True

Tworzona jest rwnie zmienna przechowujca czas opnienia potrzebny do symulacji dugoci procesu:
Dim DelayTime

Kolejny blok kodowy kreli pasek zaawansowania:


<% Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 10 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If Do Until Second(Time) = DelayTime

207

ASP Kompendium
Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 5 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If Do Until Second(Time) = DelayTime Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 16 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If Do Until Second(Time) = DelayTime Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 1 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If Do Until Second(Time) = DelayTime Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 1 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If Do Until Second(Time) = DelayTime Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 1 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If Do Until Second(Time) = DelayTime Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush DelayTime = Second(Time) + 1 If DelayTime > 59 Then DelayTime = DelayTime - 60 End If

programisty

Rozdzia 6 Obiekt Response


Do Until Second(Time) = DelayTime Loop Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Flush %>

208

Na wstpie uywamy tutaj metody Write w celu umieszczenia paska zaawansowania o pierwotnej dugoci, aby nasz go widzia jaki postp w procesie ju od samego pocztku.
Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Zauwa, e metoda Write jest wpisana w znacznik obrazka HTML. Poza tym zastosowano tu podwjny cudzysw, co oznacza, e jeden cudzysw znajduje si w drugim. Ten znacznik HTML jest nastpnie wyprowadzany z bufora:
Response.Flush

Dalej, w celu symulacji dziesiciosekundowego opnienia, wyszukiwana jest ilo sekund w aktualnym czasie, a do tej wartoci dodawane jest 10:
DelayTime = Second(Time) + 10

Z powodu dodania wartoci 10 do liczby sekund, ich ilo moe przekroczy 59, musimy to sprawdzi:
If DelayTime > 59 Then

Jeli liczba przekroczy 59, odejmowana jest warto 60 w celu przywrcenia odpowiedniego zakresu sekund:
DelayTime = DelayTime 60

Kod opnia swe dziaanie, aby zademonstrowa uycie paska zaawansowania:


Do Until Second(Time) = DelayTime Loop

Nastpnie obrazki okrelajce postp procesu s wpisywane do bufora podczas wykonywania tej czci kodu:
Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>" Response.Write "<IMG HEIGHT=12 WIDTH=10 SRC=""../assets/images/redbar2.gif"" BORDER=0>"

Pniej bufor zostaje oprniony i powysze wiersze kodu s wysyane do przegldarki:


Response.Flush

Proces powtarza si podczas caego okresu wykonywania zadania, a do jego ukoczenia. Tak jak wida w bloku kodu, rnym jego fragmentom przekazywane s rne wielkoci obrazka postpu. Powiniene zastosowa ten typ uzupeniania dugoci paska w twoim bloku kodowym. Pomyl o tym, jaki czas zajmie wykonanie danego zadania i zastosuj odpowiedni szybko postpowania paska, porwnujc ten cakowity okres z czasami wykonania poszczeglnych blokw.

209

ASP Kompendium

programisty

Strona preferencji
Strona preferencji pokazuje w jaki sposb moesz zapamita ulubiony wygld twojej witryny wybrany przez goci, ktrym umoliwiono ustalenie czcionek i kolorw strony. Kiedy wracaj na witryn, jej widok oparty jest na ich wasnych preferencjach. Strona uywa zbioru Cookies do zapamitania i wyszukania preferencji goci. W celu wywietlenia zawartoci strony w formacie wymaganym przez odwiedzajcego, wykorzystywana jest metoda Write. Podczas pierwszych odwiedzin strony, gocie widz domylny schemat kolorw ukazany na rysunku 6.15.

Rysunek 6.15. Strona preferencji, widok pocztkowy Gocie mog wybra wasny ukad kolorw i czcionek. Kiedy nacisn przycisk Zapisz, ich preferencje s zapamitywane, a strona przybiera wybrany przez nich wygld, jak to pokazano na rysunku 6.16.

Rozdzia 6 Obiekt Response

210

Rysunek 6.16. Strona preferencji po dokonaniu przez gocia podanych zmian w widoku Poniewa preferencje zapamitywane s w cookie, podczas nastpnych odwiedzin gocie ujrz widok strony oparty na ich wyborze. Jeli znacznik cookie znikn lub gocie odwiedzaj stron przy uyciu innego systemu, ujrz jej pierwotny widok z pocztkowym schematem kolorw. Kod strony zapamituje i wyszukuje wartoci znacznika cookie. Okrela, czy formularz zosta przesany i podejmuje odpowiednie dziaanie w oparciu o warunek. Kod formatuje rwnie sam stron, bazujc na wyborze dokonanym przez gocia. Gwny blok kodowy przedstawia si nastpujco:
<% Option Explicit Dim BackgroundColor Dim LargeFontColor Dim SmallFontColor Dim LargeFont Dim SmallFont If IsEmpty(Request.Form("Save")) Then If not len(Request.Cookies("Prefs")("BackgroundColor")) > 0 Then Response.Cookies("Prefs")("BackgroundColor") = "#FFFFFF" BackgroundColor = "#FFFFFF" Response.Cookies("Prefs")("LargeFontColor") = "#000000" LargeFontColor = "#000000" Response.Cookies("Prefs")("SmallFontColor") = "#000000" SmallFontColor = "#000000" Response.Cookies("Prefs")("LargeFont") = "Arial,Helvetica,Univers,Zurich BT" LargeFont = "Arial,Helvetica,Univers,Zurich BT" Response.Cookies("Prefs")("SmallFont") = "Times New Roman,Times,Times NewRoman" SmallFont = "Times New Roman,Times,Times NewRoman" Response.Cookies("Prefs").Expires = "2/2/2002" Else BackgroundColor =Request.Cookies("Prefs")("BackgroundColor") LargeFontColor = Request.Cookies("Prefs")("LargeFontColor")

211

ASP Kompendium
SmallFontColor = Request.Cookies("Prefs")("SmallFontColor") LargeFont = Request.Cookies("Prefs")("LargeFont") SmallFont = Request.Cookies("Prefs")("SmallFont") End If else Response.Cookies("Prefs")("BackgroundColor") = Request.Form("BackgroundColor") BackgroundColor = Request.Form("BackgroundColor") Response.Cookies("Prefs")("LargeFontColor") = Request.Form("LargeFontColor") LargeFontColor = Request.Form("LargeFontColor") Response.Cookies("Prefs")("SmallFontColor") = Request.Form("SmallFontColor") SmallFontColor = Request.Form("SmallFontColor") Response.Cookies("Prefs")("LargeFont") = Request.Form("LargeFont") LargeFont = Request.Form("LargeFont") Response.Cookies("Prefs")("SmallFont") = Request.Form("SmallFont") SmallFont = Request.Form("SmallFont") Response.Cookies("Prefs").Expires = "2/2/2002" end if %>

programisty

Kod informuje kompilator o zamiarze deklarowania zmiennych:


Option Explicit

Nastpnie deklarowane s zmienne zapamitujce preferencje gocia lub preferencje domylne:


Dim BackgroundColor Dim LargeFontColor Dim SmallFontColor Dim LargeFont Dim SmallFont

Pniej okrelany jest stan. Jeli przycisk Zapisz (Save) nie zosta nacinity, formularz nie jest przesyany:
If IsEmpty(Request.Form("Save")) Then

Oznacza to, e mamy w tym miejscu pierwotny widok strony. Nastpnie kod sprawdza, czy go dysponuje znacznikiem cookie z zapisanymi w nim preferencjami, a robi to poprzez funkcj Len, testujc dugo jednego z podkluczy znacznika:
If not len(Request.Cookies("Prefs")("BackgroundColor")) > 0 Then

Jeli cookie nie zostaje znaleziony, tworzony jest nowy znacznik zapamitujcy domylne ustawienia w systemie gocia:
Response.Cookies("Prefs")("BackgroundColor") = "#FFFFFF"

Nastpnie w zmiennej uywanej do modyfikacji strony ustawiana jest domylna preferencja:


BackgroundColor = "#FFFFFF"

Ta sama metoda jest uywana do zapamitania wszystkich innych preferencji:

Rozdzia 6 Obiekt Response


Response.Cookies("Prefs")("LargeFontColor") = "#000000" LargeFontColor = "#000000" Response.Cookies("Prefs")("SmallFontColor") = "#000000" SmallFontColor = "#000000" Response.Cookies("Prefs")("LargeFont") "Arial,Helvetica,Univers,Zurich BT" LargeFont = "Arial,Helvetica,Univers,Zurich BT" Response.Cookies("Prefs")("SmallFont") = "Times New Roman,Times, Times NewRoman" SmallFont = "Times New Roman,Times,Times NewRoman"

212

Nastpnie ustalana jest data wanoci dla cookie:


Response.Cookies("Prefs").Expires = "2/2/2002"

Przejcie kodu do czci Else instrukcji If drugiego poziomu oznacza, e gocie wanie weszli na stron, ale odwiedzali j ju wczeniej. Maj wic cookie z preferencjami i ten znacznik uywany jest do ustawienia zmiennych wykorzystywanych podczas definiowania widoku strony:
BackgroundColor =Request.Cookies("Prefs")("BackgroundColor") LargeFontColor = Request.Cookies("Prefs")("LargeFontColor") SmallFontColor = Request.Cookies("Prefs")("SmallFontColor") LargeFont = Request.Cookies("Prefs")("LargeFont") SmallFont = Request.Cookies("Prefs")("SmallFont")

Cz Else gwnej instrukcji If jest wykonywana, gdy speniony bdzie warunek przesania formularza. W tym przypadku przesane wartoci s wykorzystane do ponownego wypenienia cookie:
Response.Cookies("Prefs")("BackgroundColor") = Request.Form("BackgroundColor")

Ustawiany jest rwnie biecy widok strony na podstawie domylnych preferencji:


BackgroundColor = Request.Form("BackgroundColor")

To samo z innymi preferencjami:


Response.Cookies("Prefs")("LargeFontColor") = Request.Form("LargeFontColor") LargeFontColor = Request.Form("LargeFontColor") Response.Cookies("Prefs")("SmallFontColor") = Request.Form("SmallFontColor") SmallFontColor = Request.Form("SmallFontColor") Response.Cookies("Prefs")("LargeFont") = Request.Form("LargeFont") LargeFont = Request.Form("LargeFont") Response.Cookies("Prefs")("SmallFont") = Request.Form("SmallFont") SmallFont = Request.Form("SmallFont")

Ustalana jest te data wanoci cookie:


Response.Cookies("Prefs").Expires = "2/2/2002"

W wierszu HTML strona moe zosta sformatowana zgodnie z domylnymi preferencjami lub preferencjami gocia. Na przykad poniszy wiersz kodu ustala kolor ta:

213

ASP Kompendium
<BODY BGCOLOR="<% Response.Write BackgroundColor %>">

programisty

A ten wiersz kodu ustawia czcionk i kolor dla jednego z wierszy tekstu:
<FONT FACE="<% Response.Write LargeFont %>" Color=" <% Response.Write LargeFontColor %>">

Rozdzia 7. Obiekt Server


Wejcie na szczyt
Do tej pory przyjrzelimy si obiektowi Request, ktry, jak moge stwierdzi, pozwala na otrzymywanie informacji o gociu. Poznalimy rwnie obiekt Response, ktrego uywamy do wysyania informacji do przegldarki gocia. W tym rozdziale zwrcimy uwag na kolejny element modelu obiektw ASP obiekt Server. Obiekt Server uywa jednej waciwoci i czterech metod pozwalajcych na komunikacj z Internetowym serwerem informacyjnym (IIS) i wykorzystanie jego funkcjonalnoci. Przez komunikacj z serwerem IIS rozumiemy moliwo zmiany sposobw jego pracy ze stron. Funkcjonalno obiektu Server pozwala na podjcie takich dziaa w skrypcie, dla ktrych sam skrypt nie posiada odpowiednich mechanizmw. Rysunek 7.1. prezentuje rol, jak odgrywa obiekt Server w modelu przetwarzania strony ASP. Zgodnie z modelem gocie wpisuj w przegldarce stron, ktr chc przeglda bd klikaj cze bdce czci innej strony, ktra jest stron ASP. danie przemierza Internet podajc do twojego serwera. Ten nastpnie wyszukuje podan stron i jeli jest to strona ASP, rozpoczyna jej przetwarzanie. Obiekt Server odgrywa rol wanie w tym momencie, kiedy strona jest przetwarzana. Obiekt pozwala wczy inne skadniki w proces przetwarzania strony oraz komunikowa si z samym serwerem. Przetworzona strona jest nastpnie wysyana do przegldarki odwiedzajcego. 1. danie http://www.cds.com/sales.asp 2. Internet 3. IIS wyszukuje stron ASP 4. IIS interpretuje stron ASP i korzysta ze skadnikw Skadniki 5. Internet 6. HTML w przegldarce: Cze Bob! Dzisiaj w sprzeday mamy Rysunek 7.1. Rola obiektu Server w modelu obiektw ASP

Waciwo obiektu Server


Obiekt Server zawiera jedn tylko waciwo, ktra umoliwia komunikacj z serwerem. Ta waciwo zostaa omwiona poniej, a podsumowana jest w tabeli 7.1. Tabela 7.1. Waciwo obiektu Server. Waciwo Przeznaczenie ScriptTimeout Czas uruchomienia strony ASP (w sekundach) przed jej przeterminowaniem.

215

ASP Kompendium

programisty

Waciwo ScriptTimeout
Z rnorakich powodw przetwarzanie kodu moe zaj duo czasu. Serwer moe by bardzo zajty, skadnik moe utkn w ptli lub twj wasny program moe zawiera kod powtarzajcy si w nieskoczono. Gwnie z takich powodw by moe ustalisz maksymalny czas dziaania twojego skryptu przed jego zatrzymaniem i zwrceniem bdu przegldarce wystosowujcej danie. Moesz ustali ten czas uruchamiania na poziomie serwera WWW, przegldajc jego waciwoci i naciskajc przycisk Konfiguracja (Configuration) w zakadce Katalog gwny (Home Directory). W ten sam sposb moesz ustawi t waciwo na poziomie strony WWW. Moesz to rwnie zrobi na poziomie aplikacji ASP klikajc prawym przyciskiem myszy wybran aplikacj w widoku Konsoli zarzdzania Microsoftu serwera IIS, a nastpnie zaznaczajc Waciwoci (Properties). Nastpnie, gdy przejdziesz do zakadki Katalog (Directory) po naciniciu przycisku Konfiguracja (Configuration), zobaczysz dialog pokazany na rysunku 7.2. Rysunek 7.2. Ustawianie maksymalnego czasu uruchamiania strony ASP W zakadce Opcje aplikacji (App Options) tego dialogu znajduje si pole tekstowe o nazwie Czas uruchamiania skryptu ASP (ASP Script Timeout). Tutaj moesz ustali maksymaln ilo sekund uruchamiania skryptu. W swoim kodzie moesz zwikszy ten czas uruchamiania przy uyciu waciwoci ScriptTimeout obiektu Server. Waciwo ma nastpujc skadni:
Server.ScriptTimeout = NumberOfSeconds

Zmienna ScriptTimeout jest liczb sekund, podczas ktrych skrypt moe by uruchamiany przed jego przeterminowaniem. Warto tej waciwoci moesz wywietli w oknie przegldarki poprzez nastpujcy kod:
<% Response.Write "<B>Ta strona moe by uruchamiana przez " Response.Write Server.ScriptTimeout Response.Write "sekund przed przeterminowaniem.</B>" %>

Ta strona wypisze domyln warto waciwoci, jak to pokazano na rysunku 7.3.

Rozdzia 7 Obiekt Server

216

Rysunek 7.3. Wyjcie waciwoci ScriptTimeout Moesz rwnie okreli warto waciwoci w kodzie zwikszajc w ten sposb czas potrzebny na zakoczenie jego przetwarzania. Poniszy kod ustala ten maksymalny czas na poziomie 200 sekund:
<% Server.ScriptTimeout = 200 Response.Write "<B>Ta strona moe by uruchamiana przez " Response.Write Server.ScriptTimeout Response.Write "sekund przed przeterminowaniem.</B>" %>

Wyjcie tego kodu pokazuje, e warto si zmienia, co prezentuje rysunek 7.4. Warto ta musi by liczb wiksz od zera, w przeciwnym wypadku wystpi stan bdu.

217

ASP Kompendium

programisty

Rysunek 7.4. Wyjcie kodu programowo zmieniajcego warto waciwoci

Metody obiektu Server


Obiekt Server posiada cztery metody, ktrych moesz uy podczas realizacji rozmaitych zada. S one omwione poniej, a podsumowano je w tabeli 7.2. Tabela 7.2. Metody obiektu Server. Metoda Przeznaczenie CreateObject Pozwala na tworzenie skadnikw serwera. HTMLEncode Koduje tekst w formacie HTML. MapPath Zwraca fizyczn ciek cieki wirtualnej bd wzgldnej. URLEncode Modyfikuje przekazany tekst tak, e jest on zakodowany w formacie URL.

Metoda CreateObject
Z t metod spotkae si ju wielokrotnie w tej ksice. W rzeczywistoci bez tej metody strony ASP byyby tak ograniczone w swojej funkcjonalnoci, e mao kto chciaby z nich korzysta. Metoda CreateObject pozwala na tworzenie egzemplarza skadnika serwera, co oznacza obiekt znajdujcy si na serwerze, zwykle bibliotek DLL, posiadajc wasne obiekty, zbiory, metody, waciwoci i zdarzenia. Termin tworzy egzemplarz oznacza moliwo dostpu do skadnika serwera poprzez twj kod. Skadniki serwera mona podzieli na trzy rne kategorie. Istniej skadniki bdce czci serwera IIS. Takie skadniki s specjalnie zaprojektowane tak, aby rozszerza moliwoci pracy ze stronami ASP. cz one w sobie skadnik moliwoci przegldarki, ktry dostarcza informacji o przegldarce wysyajcej danie; skadnik rotatora ogosze pozwalajcy umieci na witrynie paski reklamowe i zarzdza nimi; oraz skadnik licznika stron, dziki ktremu mona uzyska informacje o trafnych odpowiedziach. Drugim typem skadnikw serwera s te, ktre zwikszaj funkcjonalno strony, ale niekoniecznie s zaprojektowane specjalnie na potrzeby stron ASP. Ten typ skadnikw obejmuje Microsoft Word , ktrego moesz uy do sformatowania tekstu w formie dokumentu Word; Graph Generator, ktry tworzy w locie wykres w oparciu o wyjcie mogce znajdowa si na twojej stronie WWW; oraz zaawansowany program matematyczny dostarczajcy stronie wyniku oblicze naukowych. Ostatnim typem skadnikw serwera bd te, ktre tworzysz sam. Przyjdzie czas, gdy bdziesz potrzebowa stworzy procedur, ktrej nie moesz wykona w ramach strony ASP oraz nie znajdujcej si na serwerze. Czasami stworzysz taki skadnik w celu ominicia pewnych bdw i niedoborw w stronie ASP. Kolejnym powodem tworzenia wasnych skadnikw serwera jest kapsukowanie, ktre oznacza umieszczenie kodu w jednym miejscu, a nastpnie uywanie go w wielu innych pooeniach; jeli potem kod musi zosta zmieniony, naley to uczyni tylko w jednym miejscu. Metoda ma nastpujcy format:
Set MyObject = Server.CreateObject(NameOfAppClass)

Deklaracj musisz rozpocz od kluczowego sowa Set. Jeli tak nie zrobisz (atwo o tym zapomnie), wystpi bd, co pokazano na rysunku 7.5.

Rozdzia 7 Obiekt Server

218

Rysunek 7.5. Bd metody CreateObject Duym problemem zwizanym z wystpieniem tego bdu jest fakt, e wiadomo o bdzie nie jest opisowa. Poza tym nie wystpi w tym miejscu, gdzie uye instrukcji CreateObject, ale w miejscu pierwszego uycia obiektu poprzez jego metody i waciwoci. W poprzednim przykadzie ukazujcym skadni MyObject jest zmienn, ktra staje si kopi obiektu serwera. Poprzez metod CreateObject przekazywany jest pojedynczy parametr NameOfAppClass. Oglnie rzecz biorc jest on cigiem zawierajcym nazw serwera i klas, ktr chcesz stworzy w serwerze. Tak wic forma tego cigu bdzie nastpujca:
Aplikacja.Klasa

Jeli na przykad chciaby ustanowi poczenie z baz danych, kod wygldaby tak:
set Conn = server.createobject ("ADODB.Connection")

W tym przykadzie nazw aplikacji serwera jest ADODB. Klasa tworzona nosi nazw Connection. Ustanawiany obiekt jest umieszczony w zmiennej Conn. Spjrzmy na kolejny przykad:
set MyWord = server.createobject("Word.Application")

Tutaj zmienna MyWord bdzie obiektem dostarczonym przez klas o nazwie Application skadnika serwera, jakim jest Word. Kiedy ju stworzysz swj obiekt, moesz zacz korzysta z jego metod, waciwoci i zbiorw. Poniszy przykad pokazuje jak mona to zrobi.
<% Option Explicit Dim conn Dim RSEmp set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" conn.execute "delete from Emps where EmpID = " & Request.Form("EmpID")

219

ASP Kompendium
set RSEmp = conn.Execute("select * from Emps where EmpID = " _ & Request.Form("NewEmpID")) Response.Write "<P>" & RSEmp("FirstName") Response.Write "<P>" & RSEmp("LastName") set conn = Nothing set RSEmp = Nothing %>

programisty

Na pocztku kompilator otrzymuje informacj o zamiarze deklarowania naszych zmiennych. Pamitaj, e pomaga to bardzo podczas usuwania bdw ze stron ASP o duej objtoci:
Option Explicit

Nastpnie definiujemy dwie zmienne. Jedna z nich zapisuje obiekt poczenia w bazie danych:
Dim conn

Druga bdzie przetrzymywaa zestaw rekordw wzity z bazy danych:


Dim RSEmp

Tutaj metoda CreateObject wykorzystana jest do stworzenia obiektu aplikacji ADODB z klas Connection:
set conn = server.createobject ("adodb.connection")

Kiedy ju stworzylimy poczenie, moemy zacz z niego korzysta. Tutaj metoda Open obiektu Connection jest uywana przy poczeniu z okrelon nazw rda danych:
conn.open "ASPBook", "sa", "yourpassword"

Nastpnie metoda Execute obiektu Connection jest uywana do usuwania rekordu z bazy danych:
conn.execute "delete from Emps where EmpID = " & Request.Form("EmpID")

W nastpnym wierszu kodu ponownie korzystamy z metody Execute, ale tym razem zwraca ona kolejny obiekt:
set RSEmp = conn.Execute("select * from Emps where EmpID = " _ & Request.Form("NewEmpID"))

Zmienna RSEmp nie jest tworzona z metod CreateObject, ale z metod metody Execute obiektu poczenia. Jednak RSEmp jest obiektem i to obiektem typu Recordset (zestawem rekordw). Typ ten czy w sobie zbir Fields, ktry uywany jest do wyszukiwania danych w polach bazy:
Response.Write "<P>" & RSEmp("FirstName") Response.Write "<P>" & RSEmp("LastName")

Poniewa uyto tutaj obiektw, ktre s bardziej zoone od standardowych zmiennych zapamitujcych liczb lub tekst, korzystamy z wikszej iloci zasobw. Moesz zwolni zasoby uywane przez obiekt, porwnujc je do wartoci Nothing, jak tutaj:
set conn = Nothing set RSEmp = Nothing

Rozdzia 7 Obiekt Server

220

W nastpnym przykadzie kodu tworzona jest kopia obiektu CDO (Collaborative Data Object). Ten obiekt wykorzystywany jest do wysyania wiadomoci e-mail poprzez twj kod i pracy z programem Microsoft Exchange.
<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") ObjMail.Send "susan@whatever.com", "jill@whatever.com", "Cze", "Jak si masz?" Set objMail = Nothing %>

Na pocztku instrukcja deklaracji zmiennych:


Option Explicit

Nastpnie tworzona jest zmienna przeznaczona do przetrzymywania obiektu e-mail:


Dim objMail

Metoda CreateObject uyta jest w celu stworzenia kopii klasy NewMail serwera CDONTS:
Set objMail = Server.CreateObject("CDONTS.NewMail")

Nastpnie pojawia si metoda Send obiektu objMail, wysyajca wiadomo e-mail. Metodzie przekazywane s cztery parametry:
ObjMail.Send "susan@whatever.com", "jill@whatever.com", "Cze", _ "Jak si masz?"

Pniej uwalniamy zasoby obiektu:


Set objMail = Nothing

Metoda HTMLEncode
Zamy, e twoja strona ASP wywietlajca pytania quizu sprawdza, czy studenci rozumiej zasady porwnania numerycznego. Na przykad chciaby wywietli pytanie pokazane na rysunku 7.6.

221

ASP Kompendium

programisty

Rysunek 7.6. Przykad strony quizu Zauwa, e uywamy znakw < i >, ktre oczywicie maj specjalne znaczenie na naszej stronie WWW. Jeli strona ASP zawieraaby poniszy kod, nie otrzymaby podanego wyjcia:
<% Response.Write "Pytanie 1:" & "<P>" Response.Write "P = 5, B = 8. Uywajc operatorw <, >, i =" _ & "okrel relacj pomidzy liczbami P i B." & "<P>" Response.Write "A. P<B" & "<P>" Response.Write "B. P>B" & "<P>" Response.Write "C. P=B" & "<P>" %>

Zamiast tego otrzymasz stron pokazan na rysunku 7.7. Zauwa, e odpowiedzi nie znajduj si tam, gdzie by powinny. Jest to spowodowane tym, e niektre fragmenty tekstu zostay zinterpretowane przez przegldark jako znaczniki HTML.

Rozdzia 7 Obiekt Server

222

Rysunek 7.7. Nieprawidowy tekst na stronie quizu Moesz obej ten problem stosujc metod HTMLEncode obiektu Server, ktra ma nastpujc skadni:
ConvertedText = Server.HTMLEncode(TextToConvert)

Zmienna TextToConvert jest tekstem, ktry chcesz konwertowa. ConvertedText to zakodowany tekst HTML, zwracany przez metod. Jeli wic poprawilibymy poprzedni kod w taki sposb:
<% Response.Write "Pytanie 1:" & "<P>" Response.Write "P = 5, B = 8. Uywajc operatorw <, >, i =" _ & "okrel relacj pomidzy liczbami P i B." & "<P>" Response.Write Server.HTMLEncode("A. P<B") & "<P>" Response.Write Server.HTMLEncode("B. P>B") & "<P>" Response.Write Server.HTMLEncode("C. P=B") & "<P>" %>

to otrzymalibymy podane wyjcie, poniewa tekst posiadaby waciwie zakodowane sekwencje HTML, mianowicie:
A. P&lt;B<P>B. P&gt;B<P>C. P=B<P>

Metoda MapPath
Metoda MapPath obiektu Server zamienia wirtualn lub wzgldn ciek widzian przez serwer WWW na rzeczywist ciek fizyczn. Metoda przyjmuje nastpujc form:
ConvertedPath = Server.MapPath(PathToConvert)

Zmienna PathToConvert jest ciek, ktr chcesz zamieni, a zmienna ConvertedPath jest ciek zamienion na jej katalog fizyczny.

223

ASP Kompendium

programisty

Na przykad:
<% Response.Write "cieka do katalogu nadrzdnego: " & "<BR>" Response.Write Server.MapPath("../") & "<P>" & "<P>" Response.Write "cieka do katalogu biecego: " & "<BR>" Response.Write Server.MapPath ("./") & "<P>" & "<P>" Response.Write "cieka do pliku w katalogu biecym: " & "<BR>" Response.Write Server.MapPath ("myfile.txt") & "<P>" & "<P>" Response.Write "cieka do katalogu gwnego: " & "<BR>" Response.Write Server.MapPath ("/") & "<P>" & "<P>" %>

Po pierwsze mapowana jest cieka do katalogu nadrzdnego:


Response.Write Server.MapPath("../") & "<P>" & "<P>"

Nastpnie cieka do katalogu biecego:


Response.Write Server.MapPath ("./") & "<P>" & "<P>"

Pniej mapujemy plik w katalogu biecym:


Response.Write Server.MapPath ("myfile.txt") & "<P>" & "<P>"

Na kocu mapujemy katalog macierzysty serwera:


Response.Write Server.MapPath ("/") & "<P>" & "<P>"

Wyjcie kodu prezentuje rysunek 7.8.

Rysunek 7.8. Wyjcie metody MapPath

Rozdzia 7 Obiekt Server

224

Metoda URLEncode
Kiedy przesyasz formularz metod Post lub dostarczasz cza z cigiem zapytania, tekst w cigu nie moe zawiera w sobie pewnych znakw, poniewa staje si on czci cza. Moesz na przykad chcie wyszuka znaczenie zapisu http:// i w tym celu korzystasz z wyszukiwarki. Gdy wpiszesz taki cig i naciniesz przycisk przesania, ujrzysz rezultaty poszukiwa. Cz cza do wyniku szukania jest twoim zapytaniem. Zauwa, e teraz twj cig http:// zosta zamieniony na:
http%3A%2F%2F

Znak dwukropka zamieniony zosta na co, co nie zostanie odrzucone ani nie zaskoczy przegldarki i serwera. Moesz zrealizowa to zadanie manualnie w twoim kodzie przy uyciu metody URLEncode, ktra ma nastpujc skadni:
ConvertedText = Server.URLEncode(Text2Convert)

Text2Convert

jest tekstem, ktry chcesz zamieni, a ConvertedText jest wynikiem metody. Za przykad wemy

taki kod:
<% Response.Write Server.URLEncode("Hello? World!") & "<P>" Response.Write Server.URLEncode("http://www.whatever.com") & "<P>" Response.Write Server.URLEncode("Yes, 10% of $20.") & "<P>" Response.Write Server.URLEncode("';:[]{}") & "<P>" %>

Wynik wykonania kodu pokazano na rysunku 7.9.

Rysunek 7.9. Wynik kodu uywajcego metody URLEncode

225

ASP Kompendium

programisty

Obiekt Server w dziaaniu


W tym podrozdziale zwrcimy uwag na rozwizania wykorzystujce obiekt Server i inne obiekty omwione do tej pory. Przykad bdzie uywa metody CreateObject obiektu Server w celu stworzenia kopii Microsoft Worda umoliwiajcej kreowanie wasnych dokumentw Word.

Automatyzacja biura
W tym przykadzie uywamy serwera Microsoft Word w kodzie do wygenerowania dokumentu Word. Go przekazuje nam okrelone dane, ktre wykorzystamy w celu stworzenia dokumentu; ta informacja zostanie poczona z szablonem dokumentu. Nastpnie dokument dostosowany do potrzeb klienta jest prezentowany gociowi. Kod wykorzystuje metod CreateObject do stworzenia kopii Worda. Uywa rwnie metody MapPath obiektu Server w celu okrelenia fizycznego pooenia wyjciowego dokumentu Word. Zastosowano take obiekty Request i Response, ktre wyszukuj wejciowe dane gocia i odsyaj go odpowiedniego dokumentu Word. Zanim przyjrzymy si kodowi, wczeniej zwrcimy uwag na to, co waciwie ona ma robi. Kiedy gocie po raz pierwszy odwiedzaj stron, widz menu pokazane na rysunku 7.10. Zawiera ona list wszystkich dostpnych formularzy listw. Jeli go wybra list w sprawie bilansu, zobaczy formularz pokazany na rysunku 7.11.

Rysunek 7.10. Menu wyboru formularza listu

Rozdzia 7 Obiekt Server

226

Rysunek 7.11. Formularz listu w sprawie bilansu Wikszo pl formularza bilansu odnosi si do zakadek w szablonie Worda, ktre zaznaczaj te miejsca w dokumencie, gdzie znajd si teksty wpisane w poszczeglne pola. Formularz przesya wprowadzone dane z powrotem do siebie w celu przetworzenia:
<FORM ACTION="./balance_due.asp" METHOD=POST>

Kod sprawdza czy zosta nacinity przycisk Przelij i na tej podstawie okrela, czy naley wywietli formularz. Jeli stwierdzono nacinicie przycisku, formularz musi by przesany. Kiedy go naciska przycisk Przelij, serwer aduje kopi Worda w celu stworzenia dokumentu. Nastpnie go jest readresowany to tego dokumentu gdy tylko jest on ukoczony, jak to pokazano na rysunku 7.12. Zwr uwag na tekst strony. Zawiera ona dane wprowadzone w poprzednim formularzu. Kod umieszcza je w okrelonych miejscach dokumentu Word zwanych zakadkami (bookmarks). Odpowiedni szablon tworzysz poprzez menu programu Word, wybierajc Wstaw (Insert), a nastpnie Zakadka (Bookmark) dokadnie w tym miejscu, gdzie ma by wstawione okrelone pole formularza.

227

ASP Kompendium

programisty

Rysunek 7.12. Wygenerowany list w sprawie bilansu Jeli gocie wybraliby w menu gwnym list w sprawie opnienia patnoci, ujrzeliby formularz pokazany na rysunku 7.13. Nastpnie wprowadziliby dane konieczne w tym formularzu w celu wygenerowania dokumentu Word zaprezentowanego na rysunku 7.14.

Rysunek 7.13. Formularz gromadzcy dane potrzebne do stworzenia dokumentu Worda w sprawie opnienia patnoci

Rozdzia 7 Obiekt Server

228

Rysunek 7.14. Dokument formatu Word w sprawie opnienia patnoci Zauwa, e gocie mog wpisa w pola formularza dowoln tre. Poza tym, poniewa wyjciowa strona posiada format Worda, gocie mog j drukowa, zapisywa i modyfikowa w jakikolwiek sposb. Kod dla strony ASP formularza bilansu okrela stan formularza. Jeli zosta on przesany, kod tworzy dokument Word i readresuje goci do miejsca jego pooenia. Gwny blok kodowy jest nastpujcy:
<% Option Explicit Dim MyWord Dim Path2File Dim Path2File1 if not isempty(Request.Form("Submit")) then set MyWord = Server.Createobject("Word.Application") MyWord.Application.Documents.Open Server.MapPath("../") _ & "\balancedue.doc" MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate" MyWord.ActiveWindow.Selection.TypeText cstr(Date) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("CustomersName")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("CustomersAddress")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("CustomersCSZ")) MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName" if instr(Request.Form("CustomersName"), " ") > 0 then MyWord.ActiveWindow.Selection.TypeText _

229

ASP Kompendium
cstr(left(Request.Form("CustomersName"),instr(Request.Form ("CustomersName"), " ")-1)) else MyWord.ActiveWindow.Selection.TypeText cstr (Request.Form("CustomersName")) end if MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentBalance" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CurrentBalance")) MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("YourName")) Path2File1 = Month(Date) & Day(Date) & Year(Date) _ & Hour(Time) & Minute(Time) & Second(Time) & ".doc" Path2File = Server.MapPath("./") & "\" & Path2File1 MyWord.ActiveDocument.SaveAs Path2File set MyWord = Nothing Response.Redirect "./" & Path2File1 end if %>

programisty

Po pierwsze informujemy kompilator o zamiarze deklaracji naszych zmiennych:


Option Explicit

Nastpnie deklarujemy zmienn przechowujc kopi serwera Word:


Dim MyWord

Dwie inne zmienne zapamituj informacj o nazwie generowanego pliku:


Dim Path2File Dim Path2File1

Nastpnie sprawdzamy czy formularz zosta przesany. Realizujemy to wyszukujc przycisk Przelij (Submit) w zbiorze Form:
if not isempty(Request.Form("Submit")) then

Jeli przycisk zosta nacinity, musimy stworzy dokument Word. W tym celu naley ustanowi poczenie z serwerem Word. Metoda CreateObject obiektu Server uywana jest do poczenia z Wordem. Zmienna MyWord bdzie zawieraa nasz kopi serwera:
set MyWord = Server.Createobject("Word.Application")

Nastpnie metoda Open zbioru Documents, ktry jest zbiorem obiektu Application, ktry z kolei jest podobiektem naszego obiektu MyWord, wykorzystywana jest do otwarcia szablonu dokumentu Worda o nazwie balancedue.doc. Zwr uwag na metod MapPath obiektu Server, ktra wykorzystywana jest podczas okrelenia fizycznej cieki katalogu nadrzdnego:
MyWord.Application.Documents.Open Server.MapPath("../") _ & "\balancedue.doc"

Rozdzia 7 Obiekt Server

230

Nastpnie uywamy metody Goto w celu znalezienia zakadek w dokumencie Word o nazwie CurrentDate, ktry wanie otwarlimy:
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"

Bieca data, najpierw zamieniana na cig, umieszczana jest w tym miejscu:


MyWord.ActiveWindow.Selection.TypeText cstr(Date)

W nastpnej kolejnoci umieszczamy w szablonie dokumentu znacznik CustomersName:


MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName"

A w tym miejscu umieszczamy pole zbioru Form o nazwie CustomersName przekazane przez gocia w formularzu:
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("CustomersName"))

W podobny sposb postpujemy z polami CustomersAddress i CustomerCSZ:


MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersAddress")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersCSZ"))

Nastpnie kod wstawia zakadk FirstName:


MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName"

W tym miejscu musimy umieci imi klienta. Dysponujemy jednak imieniem i nazwiskiem klienta. W kodzie zakadamy, e jeli pomidzy imieniem i nazwiskiem znajduje si spacja, to wszystko przed ni jest imieniem. Tak wic najpierw musimy sprawdzi, czy znak spacji znalaz si w tym polu:
if instr(Request.Form("CustomersName"), " ") > 0 then

Jeli w cigu znakw znalaza si spacja, umieszczamy cay tekst znajdujcy po jej lewej stronie w zakadce, uywajc przy tym metody TypeText obiektu MyWord:
MyWord.ActiveWindow.Selection.TypeText _ cstr(left(Request.Form("CustomersName"),_ instr(Request.Form("CustomersName"), " ")-1))

W innym wypadku po prostu umieszczamy w polu imi i nazwisko:


else MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("CustomersName")) end if

Teraz poprzedni kod jest wykorzystywany ponownie w celu wypisania pl CurrentBalance i YourName:
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentBalance"

231

ASP Kompendium
MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("CurrentBalance")) MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("YourName"))

programisty

Teraz, kiedy stworzylimy ju dokument Word, musimy zapisa plik w okrelonym fizycznym pooeniu. Nazwa pliku bdzie oparta o biec dat i czas:
Path2File1 = Month(Date) & Day(Date) & Year(Date) _ & Hour(Time) & Minute(Time) & Second(Time) & ".doc"

cieka dostpu do pliku bdzie taka sama jak do strony ASP. W celu wyszukania tego pooenia korzystamy z metody MapPath:
Path2File = Server.MapPath("./") & "\" & Path2File1

Nastpnie metoda SaveAs zapisuje nowo utworzony plik:


MyWord.ActiveDocument.SaveAs Path2File

Na kocu uwalniamy zasoby uywane przez dokument:


set MyWord = Nothing

Nastpnie go jest readresowany do miejsca zapisania pliku:


Response.Redirect "./" & Path2File1

Podobny kod uyto dla strony ASP formularza opnienia patnoci. Gwny blok kodowy strony jest taki:
<% Option Explicit Dim MyWord Dim Path2File Dim Path2File1 if not isempty(Request.Form("Submit")) then set MyWord = Server.CreateObject("Word.Application") MyWord.Application.Documents.Open Server.MapPath("../") _ & "\overdue.doc" MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate" MyWord.ActiveWindow.Selection.TypeText cstr(Date) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersName")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersAddress")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersCSZ")) MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName" if instr(Request.Form("CustomersName"), " ") > 0 then MyWord.ActiveWindow.Selection.TypeText_ cstr(left(Request.Form("CustomersName"),instr(Request.Form

Rozdzia 7 Obiekt Server


("CustomersName"), " ")-1)) else MyWord.ActiveWindow.Selection.TypeText cstr (Request.Form("CustomersName")) end if MyWord.ActiveWindow.Selection.GoTo -1,,, "DaysOverDue" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("DaysOverDue")) MyWord.ActiveWindow.Selection.GoTo -1,,, "DueDate" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("DueDate")) MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("YourName")) Path2File1 = Month(Date) & Day(Date) & Year(Date) _ & Hour(Time) & Minute(Time) & Second(Time) & ".doc" Path2File = Server.MapPath("./") & "\" & Path2File1 MyWord.ActiveDocument.SaveAs Path2File set MyWord = Nothing Response.Redirect "./" & Path2File1 end if %>

232

Najpierw informujemy kompilator o zamiarze deklarowania naszym zmiennych:


Option Explicit

Nastpnie deklarujemy zmienn, ktra bdzie przechowywaa kopi Worda:


Dim MyWord

Rwnie deklarowane s zmienne zapamitujce informacj o ciece dostpu do pliku:


Dim Path2File Dim Path2File1

Pniej sprawdzamy przycisk Przelij (Submit) uywajc przy tym funkcji IsEmpty, ktra zwraca prawd, jeli pole formularza nie jest czci zbioru. Operator not okrela logik odwrotn i wyraenie jest wartoci prawdziw, jeli pole jest obecne:
if not isempty(Request.Form("Submit")) then

Nastpnie czymy si z serwerem Word przy uyciu metody CreateObject:


set MyWord = Server.CreateObject("Word.Application")

Teraz uywamy metody MapPath w celu wyszukania fizycznej lokalizacji pliku overdue.doc, bazujc przy tym na informacji, e znajduje si on w katalogu nadrzdnym tej strony ASP:
MyWord.Application.Documents.Open Server.MapPath("../") _ & "\overdue.doc"

233

ASP Kompendium

programisty

Nastpnie kod uywa metody Goto, aby znale w naszym szablonie dokumentu zakadk o nazwie CurrentDate:
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"

Uywajc metody TypeText wstawiamy biec dat w miejscu zakadki:


MyWord.ActiveWindow.Selection.TypeText cstr(Date)

Ta sama procedura przeprowadzana jest dla pl CustomersName, CustomersAddress i CustomersCSZ:


MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersName")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersAddress" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersAddress")) MyWord.ActiveWindow.Selection.GoTo -1,,, "CustomersCSZ" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form("CustomersCSZ"))

Pniej umieszczamy zakadk, ktra zostanie uyta do wstawienia imienia gocia:


MyWord.ActiveWindow.Selection.GoTo -1,,, "FirstName"

Poniewa dysponujemy jedynie penym imieniem i nazwiskiem gocia, jego imi musi by wyodrbnione poprzez wypisanie wszystkich znakw znajdujcych si po lewej stronie spacji:
if instr(Request.Form("CustomersName"), " ") > 0 then MyWord.ActiveWindow.Selection.TypeText_ cstr(left(Request.Form("CustomersName"),instr(Request.Form ("CustomersName"), " ")-1)) else MyWord.ActiveWindow.Selection.TypeText cstr (Request.Form("CustomersName")) end if

Nastpnie ustalamy kolejne zakadki i wstawiamy ich tekst w oparciu o zbir formularza przesany przez odwiedzajcego:
MyWord.ActiveWindow.Selection.GoTo -1,,, "DaysOverDue" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("DaysOverDue")) MyWord.ActiveWindow.Selection.GoTo -1,,, "DueDate" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("DueDate")) MyWord.ActiveWindow.Selection.GoTo -1,,, "YourName" MyWord.ActiveWindow.Selection.TypeText cstr(Request.Form ("YourName"))

Teraz musimy wymyli niepowtarzaln nazw dla dokumentu Worda, poniewa nie chcemy, aby plik szablonu zosta podmieniony. Nazwa jest liczb tworzon w oparciu o biec dat i godzin:
Path2File1 = Month(Date) & Day(Date) & Year(Date) _

Rozdzia 7 Obiekt Server


& Hour(Time) & Minute(Time) & Second(Time) & ".doc"

234

Ta nazwa pliku bdzie wykorzystana w ciece do katalogu, w ktrym znajduje si bieca strona ASP. Korzystamy tutaj z metody MapPath:
Path2File = Server.MapPath("./") & "\" & Path2File1

Dokument Word jest zapisywany przy uyciu metody SaveAs. Metodzie przekazywana jest nazwa utworzonego wczeniej pliku:
MyWord.ActiveDocument.SaveAs Path2File

Uwalniamy serwer Word:


set MyWord = Nothing

a nastpnie go readresowany jest do wygenerowanego dokumentu Word:


Response.Redirect "./" & Path2File1

Rozdzia 8. Obiekt Session, obiekt Application oraz plik global.asa


Aplikacje ASP
Do tej pory przyjrzelimy si przykadom kodw wykorzystujcych obiekt Request w celu uzyskania danych od naszego gocia oraz informacji o nim samym. Korzystalimy z obiektu Response, aby wysya dane z powrotem do przegldarki odwiedzajcego. Tego samego obiektu Response uywalimy rwnie w celu wysyania informacji do innej strony przy pomocy cza lub metody Redirect wraz z zapytaniem. Wiemy te, jak komunikowa si z serwerem. Lecz do tej pory nie poznalimy metod dzielenia informacji pomidzy stronami tak, aby mogy by wykorzystywane przez wszystkich goci lub jedynie niektrych z nich. Ten rozdzia koncentruje si na tym temacie: na aplikacjach ASP. Jeli na co dzie programujesz w jakim innym jzyku lub tylko syszae, jak rozmawiaj ze sob programici, moesz by ju zaznajomiony ze sowem stan (state), odnoszcy si do trwaoci informacji w obrbie danej aplikacji. W aplikacjach bezstanowych wszystkie dane s tracone podczas przechodzenia od jednej procedury do drugiej. Tak wic kade wywoanie lub (jak to jest w wypadku stron ASP) kada strona musi dysponowa wasnym zestawem danych. Aplikacja posiadajca stan zachowuje informacje podczas kolejnych wywoa, do ktrych to informacji dostp uzyska moe wiele procedur aplikacji lub ta sama procedura, ale wielokrotnie. Jeli kiedykolwiek programowae w Visual Basicu, zapewne znasz ju zmienne Public i Global. Zmienne te mog by widoczne w obrbie caej aplikacji od jej uruchomienia a do zamknicia. W Visual Basicu deklarujesz tego typu zmienn w nastpujcy sposb:
Public EmpName as String

Moesz ustali jej warto w dowolnej procedurze:


EmpName = "Nancy"

Kiedy procedura ustalajca warto zmiennej koczy swe dziaanie, warto t w dalszym cigu stanowi tekst Nancy, tak wic inne procedury lub ta sama procedura moe odwoywa si do ustawionej ostatnio wartoci tej zmiennej. Taka aplikacja posiada swj stan. Widzielimy, e w wikszoci kodw prezentowanych do tej pory nie mielimy moliwoci takich odwoa. Zmienne tworzylimy uywajc w kodzie strony instrukcji Dim:
Dim EmpName

Jednak gdy tylko przetwarzanie strony zostaje ukoczone, dana ulokowana w zmiennej EmpName jest tracona. adna inna strona nie moe odnosi si do tej zmiennej, jeli zostaa ona zdeklarowana w ten sposb. Stworzylimy strony, ktre s bezstanowe.

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

236

W tym rozdziale zwrcimy uwag na tworzenie aplikacji ASP pozwalajcych na utrzymywanie stanu. Aplikacja ASP dostarcza mechanizmw zapamitywania informacji o stanie we wszystkich stronach. Informacja ta moe by zapamitana na dwch poziomach: poziomie aplikacji i poziomie sesji. Poziom aplikacji odnosi si do wszystkich stron aplikacji ASP oraz wszystkich goci twojej aplikacji, moesz wic stworzy zmienn w jednym pooeniu, do ktrej to zmiennej wszystkie strony aplikacji i wszyscy odwiedzajcy mogliby si odwoywa. Informacja o aplikacji jest wywoywana i tworzona poprzez obiekt Application. Informacje o stanie moesz rwnie zapamita na poziomie sesji, ktry odnosi si do jednego tylko gocia witryny. W tym przypadku informacja o stanie znajduje si na niszym poziomie od poziomu aplikacji. Informacja jest dostpna dla okrelonego gocia na wszystkich stronach. Oznacza to, e moesz stworzy informacj o stanie aplikacji, ktra jest widoczna poprzez kod dla jednego tylko odwiedzajcego. Ten poziom jest kodowany przez obiekt Session. Jak si dowiesz bardziej szczegowo z niniejszego rozdziau, obiekty Session i Application mog obsugiwa wystpienie okrelonych zdarze, tak wic moesz dysponowa kodem uruchamianym podczas rozpoczcia dziaania aplikacji lub podczas wchodzenia odwiedzajcego na witryn. Te funkcje naprawd podnosz moliwoci twoich witryn WWW.

Tworzenie aplikacji ASP


Aplikacja ASP jest seri poczonych ze sob stron ASP oraz pliku o nazwie global.asa. Wszystkie pliki aplikacji ASP musz znajdowa si w tej samej strukturze katalogu gwnego, w ktrym aplikacja jest zdefiniowana lub w jego podkatalogach. Spjrz na struktur katalogu pokazan na rysunku 8.1.

Rysunek 8.1. Przykadowa struktura katalogu Aplikacja ASP skada si z wszystkich plikw znajdujcych si w katalogu gwnym lub w dowolnym jego podkatalogu, chyba e podkatalog ten naley do innej aplikacji ASP. Patrzc na nasz przykad widzimy, e najwyszy poziom nie jest zdefiniowany jako aplikacja ASP. Nastpnie mamy podkatalog o nazwie HR, ktry zdefiniowany jest jako aplikacja ASP, tak wic strony ASP w tym katalogu s czci jednej aplikacji HR. Powiedzielimy rwnie, e podkatalogi s czci aplikacji, o ile nie stanowi swojej wasnej aplikacji ASP. W katalogu HR znajduje si katalog o nazwie NewEmps. Nie jest on aplikacj ASP, tak wic kada strona w nim si znajdujca naley do aplikacji HR. Jeli katalog NewEmps zawiera w sobie jakie podkatalogi, one rwnie bd skadnikami aplikacji ASP, chyba e zostay zdefiniowane jako wasna, odrbna aplikacja ASP. Drugim podkatalogiem HR jest Train. Ten katalog sam w sobie jest aplikacj ASP, wic strony ASP znajdujce si w nim nie nale do aplikacji HR. W katalogu Train znajduje si podkatalog C1. Poniewa nie jest on katalogiem ASP, naley do aplikacji Train, znajduje si bowiem na niszym poziomie w stosunku do niej. W katalogu gwnym znajduje si ponadto katalog o nazwie IS, ktry zdefiniowany jest jako aplikacja ASP, tak wic wszystkie strony ASP w tym katalogu bd naleay do aplikacji IS, a nie HR czy jakiejkolwiek innej.

237

ASP Kompendium

programisty

Ostatnim podkatalogiem katalogu gwnego jest Sales. Nie jest on aplikacj ASP, wic strony znajdujce si w nim s bezstanowe. Nie nale one do adnej aplikacji ASP, poniewa ani katalog, w ktrym si znajduj, ani aden katalog nadrzdny nie jest zdefiniowany jako aplikacja ASP. Tworzc aplikacj ASP musisz orientowa si, w ktrym miejscu umieszczasz poszczeglne strony, aby ich wzgldne pooenie gwarantowao moliwo dzielenia midzy sob informacji o stanie. Normalnie dokonasz tego tworzc katalog podrzdny w stosunku do katalogu gwnego twojej witryny WWW. Nastpnie umieszczasz w obrbie tego katalogu wszystkie pliki bdce czci aplikacji. Teraz jeste ju gotowy do oznaczenia katalogu jako aplikacji ASP. Moesz to zrobi klikajc katalog prawym przyciskiem myszy w oknie Konsoli zarzdzania Microsoftu serwera IIS, a nastpnie wybierajc Waciwoci (Properties), jak to zaprezentowano na rysunku 8.2.

Rysunek 8.2. Przegldanie Waciwoci w celu stworzenia aplikacji ASP Po wybraniu Waciwoci (Properties) powiniene ujrze dialog pokazany na rysunku 8.3. Kiedy ju znajdziesz si we waciwociach katalogu, powiniene znale si w zakadce Katalog (Directory); jeli tak nie jest, zmie zakadk. Nastpnie nacinij przycisk Utwrz (Create) w sekcji Ustawienia aplikacji (Application Settings) i wprowad w pole tekstowe Nazwa (Name) nazw, jak chcesz nada aplikacji. Nacinij OK. Od tej pory dysponujesz aplikacj ASP. Wszystkie strony ASP w obrbie aplikacji mog dzieli midzy sob informacje przy uyciu obiektw Application i Session.

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

238

Rysunek 8.3. Tworzenie aplikacji ASP

Obiekt Session
Sesja, w terminologii ASP, odnosi si do przemierzania przez okrelonego gocia twojej aplikacji. Sesja rozpoczyna si w momencie, gdy go przeglda jedn ze stron ASP twojej aplikacji lub przechodzi do strony HTML, ktrej kod wywouje ktr z twoich stron ASP. Trwa ona dopki odwiedzajcy nie opuci twej witryny. Sesja okrelonego gocia witryny moe by zakoczona w sposb ukryty lub jawny. Koczy si ona w sposb ukryty, gdy go nie da dostpu do strony na ustalony z gry czas trwania w minutach. Koczy si w sposb jawny, gdy wywoujesz metod zakaczajc sesj gocia. Podczas gdy odwiedzajcy przemierza twoj witryn, moesz uy obiektu Session w celu zapamitania informacji o gociu oraz kontrolowania pewnych aspektw jego sesji. Obiekt Session zawiera zbiory, waciwoci oraz metody zapewniajce realizacj tego typu funkcji w kodzie.

Zbiory obiektu Session


Obiekt Session posiada dwa zbiory, ktrych moesz wykorzysta do kontrolowania danych uywanych w stanie sesji. Zbiory te omwione s poniej, a podsumowano je w tabeli 8.1. Tabela 8.1. Zbiory obiektu Session Zbir Opis Contents Zbir wszystkich zmiennych dostpnych na poziomie sesji, wyczajc te tworzone ze znacznikiem Object. StaticObjects Zbir wszystkich obiektw poziomu sesji, ktre utworzone byy przy uyciu znacznika Object w pliku global.asa. Zbir Contents Zbir Contents jest grup zmiennych, ktr tworzysz w celu udostpnienia ich we wszystkich stronach aplikacji ASP poprzez obiekt Session. Zmienne obejmuj swym zasigiem poziom sesji, s wic dostpne dla dowolnej strony ASP, ale ich wartoci nie s uytkowane przez wszystkich goci. Kady go bdzie dysponowa wasn kopi zmiennej. Ustalenia wartoci dla pozycji zbioru Contents dokonujesz w nastpujcy sposb:
Session.Contents("EmpName") = "Tonya"

Poniewa jednak zbir ten jest zbiorem domylnym, moesz rwnie napisa to samo w nastpujcy sposb:
Session("EmpName") = "Tonya"

Kady ze sposobw, wyszukujcy lub ustalajcy warto danej pozycji zbioru Contents, rozpoczyna si obiektem Session. Pniej pojawia si w cudzysowie (jako e jest to pozycja zbioru) nazwa pozycji, do ktrej chcesz si odnie. Poniewa zmienne s pozycjami zbioru, to w odrnieniu od standardowych zmiennych, nie wykorzystuj instrukcji Option Explicit. Jej uycie w tym wypadku nie ma sensu, poniewa najpierw moesz stworzy zmienn w jednej stronie, a potem odwoywa si do niej na innych stronach. I takie jest rzeczywiste przeznaczenie zmiennych zbioru Contents maj by wyszukiwane i ustawiane w wielu stronach twojej witryny WWW. Na przykad mgby w stronie zawrze nastpujcy kod tworzcy kilka zmiennych sesji:
<% Session("UserName") = "Bob Tyler"

239

ASP Kompendium
Session("UserID") = 10 Session("City") = "Portland" %>

programisty

Tworzymy tutaj trzy zmienne sesji, ktre od tej pory dostpne s dla kadej strony naszej aplikacji ASP. Po pierwsze tworzymy zmienn sesji o nazwie UserName i ustalamy dla niej warto w postaci cigu "Bob Tyler":
Session("UserName") = "Bob Tyler"

Warto t ustalamy wpisujc cig, ale moe by ona okrelona przez odwoanie si do wartoci w bazie danych lub moe zosta odebrana od uytkownika poprzez zbir Form obiektu Request. Nastpnie tworzona jest zmienna o nazwie UserID, dla ktrej ustalamy warto 10. Zapamitaj, e uzupeniajc wartoci zmiennych sesji moemy uy cigw, liczb, a take dat:
Session("UserID") = 10

W kocu ustalamy trzeci zmienn sesji, City, w ktrej przechowujemy warto "Portland":
Session("City") = "Portland"

Teraz w kolejnej stronie moemy odwoa si do tych zmiennych sesji lub moemy stworzy nowe. Spjrz na poniszy kod:
<% If Session("City") = "Portland" Then Session("City") = "Portland, stan Oregon" End If Response.Write "Cze: " & Session("UserName") & ".<P>" Response.Write "Twj numer to : " _ & Session("UserID") & ".<P>" Response.Write "Co ciekawego w " & Session("City") & "?<P>" %>

Po pierwsze wyszukujemy warto zmiennej sesji City przy uyciu instrukcji If aby si przekona, czy znajduje si w niej cig "Portland":
If Session("City") = "Portland" Then

Jeli tak, ustalamy now warto zmiennej:


Session("City") = "Portland, stan Oregon"

Nastpnie wykorzystujemy warto zmiennej sesji UserName w metodzie Write:


Response.Write "Cze: " & Session("UserName") & ".<P>"

Wartoci zmiennych UserID i City uywane s jako dodatkowe wyjcie dla przegldarki:
Response.Write "Twj numer to : " _ & Session("UserID") & ".<P>"

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


Response.Write "Co ciekawego w " & Session("City") & "?<P>"

240

Wyjcie kodu przedstawia rysunek 8.4.

Rysunek 8.4. Wyjcie kodu wykorzystujcego zbir Contents Moesz rwnie tworzy obiekty zbioru Contents. Jest to troch niebezpieczne, poniewa zasoby uywane przez obiekty mog by znacznie wiksze od prostych zmiennych, ale pozwala to na stworzenie obiektu Session w jednym miejscu, a nastpnie korzystanie z niego w caej twojej aplikacji ASP. Przykadowo moesz stworzy na stronie kopi obiektu:
set Session("Sconn") = Server.CreateObject("adodb.connection")

Ten obiekt Session jest teraz utworzony i uywa zasobw systemowych odpowiednich dla swojego typu. W kolejnej stronie lub stronach moesz pisa kody uywajc przy tym obiektu Session:
Session("Sconn").open "ASPBook", "sa", "yourpassword"

Poniewa te pola s czci zbioru, moemy uy bloku For...Each do przejcia kolejno przez kad zmienn sesji lub obiekt. Kod bloku jest nastpujcy:
<% For Each MySession in Session.Contents Response.Write "Punkty sesji: " & MySession & "<P>" Next %>

Wyjcie kodu, stworzone na podstawie wszystkich zdefiniowanych do tej pory zmiennych, pokazano na rysunku 8.5.

241

ASP Kompendium

programisty

Rysunek 8.5. Wywietlanie punktw sesji przy uyciu zbioru Contents Pomyl o przepywie kodu w stronie, gdzie najpierw do zmiennej sesji City wpisujemy cig "Portland", a nastpnie w kolejnej stronie zmieniamy t warto na "Portland, stan Oregon". Jeli go wrciby na pierwsz stron, warto zmiennej znowu zostaaby ustawiona na "Portland". Wiele razy bdziesz dysponowa kodem, ktry stworzy te zmienne sesji i nada im pocztkow warto. Jeli jednak zmienne te byy ju wczeniej utworzone, nie chcesz zmienia ich wartoci. Moesz wykorzysta funkcj IsEmpty w celu okrelenia, czy zmienna sesji ju istnieje. Tak wic nasz kod moglibymy zmodyfikowa w nastpujcy sposb:
<% If IsEmpty(Session("City")) Then Session("City") = "Portland" End If %>

Teraz kod zadziaa tylko raz w czasie sesji gocia. Po utworzeniu zmiennej sesji warunek instrukcji If nie bdzie prawd, wic zmienna nie bdzie przydzielona ponownie. W dalszej czci rozdziau zwrcimy uwag na jeszcze jeden sposb inicjalizacji zmiennych sesji poprzez plik global.asa. Kolejnym zastosowaniem zmiennych sesji jest wymuszenie na gociach, aby najpierw weszli na okrelon stron przed odwiedzeniem jakiej innej strony. Zamy na przykad, e dysponujesz na twojej witrynie WWW quizami dla klasy, ktr uczysz. Przed rozpoczciem quizu gocie bd musieli si zalogowa. Problemem, z ktrym si spotkasz jest fakt, e uczniowie ustawi znacznik w samym quizie i w ten sposb bd powraca wprost do tej strony z pominiciem logowania. Aby z tym sobie poradzi moesz wykorzysta zmienn sesji. Mogaby ona zawiera numer identyfikacyjny ucznia i nosi nazw StudentID, a ustawiana byaby jedynie w stronie logowania. Sama strona quizu zawieraaby kod podobny do tego przedstawionego poniej, ktry zapobiegaby wchodzeniu na stron z pominiciem strony logowania:
<% If IsEmpty(Session("StudentID")) then Response.Redirect "./login.asp" End If

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


%>

242

Teraz, gdy uczniowie bd prbowa wejcia wprost na stron quizu bez logowania, zmienna sesji StudentID bdzie pusta i uczniowie bd readresowani do strony logowania. Zbir StaticObjects W dalszej czci tego rozdziau omwimy plik global.asa w caej rozcigoci. W tym momencie powiniene wiedzie, e jest on czci aplikacji ASP. Daje on moliwo napisania kodu, ktry uruchamiany jest na pocztku lub pod koniec sesji gocia. Ponadto plik umoliwia napisanie kodu uruchamianego w chwili rozpoczcia bd zakoczenia dziaania aplikacji ASP. Moesz rwnie stworzy obiekty Session w pliku global.asa, ktre pniej dostpne s jak te omwione do tej pory dla wszystkich stron znajdujcych si w obrbie aplikacji ASP. Obiekty te tworzysz przy uyciu znacznika Object, a staj si one dostpne dziki zbiorowi StaticObjects. Takie statyczne obiekty sesji s deklarowane w pliku global.asa poprzez znacznik Object w nastpujcy sposb:
<OBJECT RUNAT=Server SCOPE=Session ID=Sconn PRODIG="adodb.connection"> </OBJECT>

Ten wiersz kodu tworzy obiekt zasigu sesji o nazwie Sconn, ktry jest obiektem poczenia ADO. Ten natomiast:
<OBJECT RUNAT=Server SCOPE=Session ID=SobjMail PRODIG="CDONTS. NewMail"> </OBJECT>

tworzy obiekt sesji o nazwie SobjMail, ktry jest obiektem CDO uywanym do wysyania wiadomoci e-mail. Po utworzeniu obiektw moesz odwoywa si do kadego z nich w kodzie dowolnej strony ASP bdcej czci aplikacji, tak jak tutaj:
<% Option Explicit Dim RSUser Sconn.open "ASPBook", "sa", "yourpassword" set RSUser = Sconn.Execute("select * from Users") %>

Najwaniejsze rzecz, na ktr powiniene zwrci uwag jest to, e do zbioru StaticObjects odnosimy si inaczej ni do zbioru Contents. Po prostu okrelamy nazw pozycji zbioru bez wczeniejszego podawania obiektu. W tym przykadzie wanie w ten sposb uywamy nazwy obiektu Sconn:
Sconn.open "ASPBook", "sa", "yourpassword"

Poniewa s to pozycje zbioru, moemy uy bloku For...Each, aby przej kolejno przez wszystkie te pozycje:
<% Option Explicit Dim MySessionSO For Each MySessionSO in Session.StaticObjects Response.Write "Obiekt statyczny: & MySessionSO & "<P>" Next %>

243

ASP Kompendium

programisty

Po pierwsze informujemy kompilator o zamiarze deklaracji naszych zmiennych:


Option Explicit

Nastpnie deklarujemy zmienn, ktra bdzie przechowywaa odwoanie do kadego obiektu zbioru StaticObjects:
Dim MySessionSO

Blok For...Each rozpoczyna swe dziaanie i przechodzi w ptli kolejno przez wszystkie pozycje zbioru:
For Each MySessionSO in Session.StaticObjects

Metoda Write obiektu Response wpisuje nazw obiektu statycznego do przegldarki przed przejciem do kolejnego obiektu zbioru:
Response.Write "Obiekt statyczny: & MySessionSO & "<P>" Next

Wyjcie kodu, wywietlajcego nazw dwch stworzonych przez nas obiektw, pokazano na rysunku 8.6.

Rysunek 8.6. Wyjcie kodu wykorzystujcego zbir StaticObjects

Waciwoci obiektu Session


Waciwoci obiektu Session pozwalaj na konfiguracj, a nastpnie odnoszenie si do aspektw sesji gocia. Omwiono je w tym podrozdziale oraz podsumowano w tabeli 8.2. Tabela 8.2. Waciwoci obiektu Session Waciwo Przeznaczenie CodePage Okrela zestaw znakw uywany w sesji. LCID Definiuje identyfikator lokalizacji dla sesji.

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


SessionID TimeOut

244

Definiuje unikalny identyfikator dla sesji gocia. Okrela czas w minutach pomidzy kolejnymi daniami dostpu do strony, ktry nie moe zosta przekroczony, w innym wypadku sesja gocia bdzie traktowana jako zakoczona.

Waciwo CodePage Waciwo CodePage pozwala na wybr zestawu znakw, ktry bdzie uywany w czasie trwania sesji. Zestaw obejmuje liczby, litery, a take inne znaki. Zestawy znakw rni si midzy sob w zalenoci od kraju, w ktrym obowizuj, moesz wic uy tej waciwoci jeli chcesz umieci na twojej witrynie zawarto midzynarodow. CodePage jest waciwoci sesji, tak wic jej ustawienia bd obowizyway we wszystkich stronach twojej aplikacji ASP. Waciwo t wpisywa i odczytywa, a przyjmuje ona nastpujc form:
Session.CodePage = CPValue

gdzie CPValue jest liczb odnoszc si do strony kodowej, ktrej chcesz uy. Spjrz na ten kod:
<% Session.CodePage = 1252 Response.Write "Uywana strona kodowa: " & Session.CodePage & "<P>" Response.Write "1 " & "<P>"

Session.CodePage = 932 Response.Write " Uywana strona kodowa: " & Session.CodePage & "<P>" Response.Write "1 " & "<P>" %>

Po pierwsze, ustalamy angielsk stron kodow dla caej sesji:


Session.CodePage = 1252

Nastpnie warto strony kodowej wpisywana jest do przegldarki:


Response.Write "Uywana strona kodowa: " & Session.CodePage & "<P>"

Teraz wpisywane do przegldarki niektre niestandardowe znaki:


Response.Write "1 " & "<P>"

W kolejnym wierszu kodu ustawiana jest japoska strona kodowa:


Session.CodePage = 932

Do przegldarki wpisywana jest warto waciwoci CodePage:


Response.Write "Uywana strona kodowa: " & Session.CodePage & "<P>"

jak rwnie ponownie niektre znaki niestandardowe:


Response.Write "1 " & "<P>"

245

ASP Kompendium

programisty

Waciwo LCID Waciwo LCID obiektu Session pozwala na okrelenie sposobu dynamicznego wywietlania tekstu w zalenoci od lokalizacji. Dotyczy ona wywietlania takich rzeczy jak czas, liczby oraz waluta. Poniewa jest to waciwo sesji, raz ustawiona obowizuje dla wszystkich stron twojej aplikacji ASP. Waciwo t mona zapisywa i odczytywa, a przyjmuje ona nastpujc form:
Session.LCID = LocaleID

gdzie LocaleID jest liczb typu long reprezentujcym dan lokalizacj. Waciwo ta dostarcza dodatkowego mechanizmu internacjonalizacji twojej witryny. Uywasz jej w celu waciwego sformatowania zawartoci twojej strony. Zwr uwag na przykadowy blok kodu:
<% Session.LCID = 1033 Response.Write "Format amerykaski: " & Now & " " _ & formatcurrency(1234.56) & "<P>"

Session.LCID = 2057 Response.Write "Format brytyjski : " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Session.LCID = 1049 Response.Write "Format rosyjski: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Session.LCID = 1032 Response.Write "Format grecki: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Session.LCID = 2049 Response.Write "Format iracki: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Session.LCID = 3073 Response.Write "Format egipski: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Session.LCID = 6154 Response.Write "Format panamski: " & Now & " " _

& formatcurrency(1234.56) & "<P>" %>

Pierwsz ustawion przez kod lokalizacj s Stany Zjednoczone:


Session.LCID = 1033

Nastpnie kod wywietla aktualn dat i godzin, jak rwnie walut w formacie obowizujcym w Stanach Zjednoczonych:

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


Response.Write "Format amerykaski: " & Now & " " _ & formatcurrency(1234.56) & "<P>"

246

Tutaj ustawion lokalizacj jest Wielka Brytania:


Session.LCID = 2057

a nastpnie wywietlana jest data, godzina oraz waluta w formacie brytyjskim:


Response.Write "Format brytyjski : " & Now & " " _ & formatcurrency(1234.56) & "<P>"

Podobnie kod wywietla format rosyjski:


Session.LCID = 1049 Response.Write "Format rosyjski: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Nastpnie format grecki:


Session.LCID = 1032 Response.Write "Format grecki: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Tutaj iracki:
Session.LCID = 2049 Response.Write "Format iracki: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Nastpne wywietlany jest egipski format daty, godziny i waluty:


Session.LCID = 3073 Response.Write "Format egipski: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

To samo jeli chodzi o format panamski:


Session.LCID = 6154 Response.Write "Format panamski: " & Now & " " _

& formatcurrency(1234.56) & "<P>"

Wyjcie kodu zaprezentowano na rysunku 8.7.

247

ASP Kompendium

programisty

Rysunek 8.7. Wyjcie kodu wykorzystujcego waciwo LCID Waciwo SessionID Serwer IIS musi mie sposoby na wewntrzne ledzenie przechodzenia goci przez twoj witryn. Jednym z takich sposobw jest wykorzystanie waciwoci SessionID. Kiedy uywasz aplikacji ASP, serwer IIS przydziela losow liczb typu long wszystkim gociom wchodzcym na twoj witryn. Waciwo ta suy tylko do odczytu, poniewa jest uywana wewntrznie przez serwer IIS w celu identyfikacji wszystkich goci podczas trwania ich sesji. Waciwo ma nastpujc skadni:
TheID = Session.SessionID

TheID Przypis

jest zmienn, w ktrej chcesz umieci numer identyfikacyjny.

SessionID nie jest niepowtarzalnym numerem przez cay czas. Jeli ponownie uruchomisz swj serwer, to ten sam numer moe by przydzielony ponownie. Nie uywaj wic tego identyfikatora jako klucza gwnego tabeli.

Waciwo TimeOut Sesja rozpoczyna si w chwili, gdy go uzyskuje dostp do jednej ze stron aplikacji ASP lub gdy uzyskuje dostp do strony wywoujcej kod jednej z twoich stron ASP. Jednym z sposobw, w jaki sesja moe si skoczy to brak dania dostpu gocia do strony twojej aplikacji ASP w pewnym okrelonym (w minutach) zakresie czasu. Ilo minut ustalana jest przez waciwo TimeOut. Waciwo ta moe by zapisywana i odczytywana, a zapamituje ona czas w minutach, jaki moe upyn pomidzy kolejnymi daniami dostpu do aplikacji ASP bez jej przeterminowania. Domylna warto tej waciwoci jest ustawiana przez Konsol zarzdzania Microsoftu serwera IIS. Przejd do twojej aplikacji ASP i wybierz Waciwoci (Properties). Nastpnie przejd do zakadki Katalog (Directory) i nacinij przycisk Konfiguracja (Configuration). Przejd do zakadki Opcje aplikacji (App Options), a wtedy powiniene ujrze dialog, ktry zosta zaprezentowany na rysunku 8.8.

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

248

Rysunek 8.8. Ustawianie domylnej wartoci waciwoci TimeOut Pole tekstowe Czas trwania sesji (Session TimeOut) zawiera domyln warto waciwoci TimeOut. Moesz uniewani t warto w kodzie przy uyciu waciwoci TimeOut. Waciwo moe by zapisywana lub odczytywana i przyjmuje nastpujcy format:
Session.TimeOut = NumMinutes

gdzie NumMinutes jest iloci minut pomidzy daniami dostpu, ktrych upynicie powoduje zakoczenie sesji. Kiedy sesja si koczy, wszystkie jej obiekty i zmienne zostaj uwolnione i ich wartoci przestaj by dostpne. Jeli gocie daj dostpu do strony po przekroczeniu czasu wanoci, bdzie to zinterpretowane jako pierwsze danie, co spowoduje rozpoczcie nowej sesji.

Metoda obiektu Session


Obiekt Session posiada jedn tylko metod, ktra pozwala na podjcie dziaania w zwizku z tym obiektem. Metoda ta jest omwiona poniej, a podsumowuje j tabela 8.3. Tabela 8.3. Metoda Obiektu Session Metoda Przeznaczenie Abandon Jawne zakoczenie sesji odwiedzajcego. Metoda Abandon Jak to byo wida w ostatnim podrozdziale, sesje goci kocz si po upyniciu pomidzy daniami ustalonego czasu mierzonego w minutach. Innym sposobem na zakoczenie sesji jest wywoanie w kodzie metody Abandon. Metoda Abandon obiektu Session pozwala na natychmiastowe zakoczenie sesji gocia. Jest to pomocne sytuacjach, gdy gocie podejmuj dziaanie koczce jaki proces, w ktry byli zaangaowani. Na przykad, jeli masz witryn e-commerce, gocie mog przeszukiwa katalog twoich produktw i umieszcza niektre z nich w koszyku. Aby zarzdza ich stanem uywasz obiektu Session wraz z identyfikatorem klienta, tak wic mog oni dokada produkty do koszyka oraz usuwa je stamtd a ty przez cay czas utrzymujesz ich stan. W ktrym momencie mog oni opuci twj sklep online. Kiedy podejm takie dziaanie oznacza to, e zakoczyli swe zakupy, a ty powiniene przetworzy ich zamwienie. Musisz zakoczy ich sesj. Dokonasz tego przy uyciu metody Abandon. Metoda Abandon ma nastpujc skadni:

249

ASP Kompendium
Session.Abandon

programisty

Spjrz na przykad na ten kod:


<% Session("UserName") = "Jim Smith" Response.Write Session("UserName") Session.Abandon %>

Tutaj tworzona jest zmienna sesji o nazwie UserName:


Session("UserName") = "Jim Smith"

Warto tej zmiennej jest wpisywana do przegldarki:


Response.Write Session("UserName")

Sesja koczy si:


Session.Abandon

Kiedy ju wykonywanie kodu strony jest zakoczone, zmienna sesji przestaje by dostpna. Kiedy wywoana zostaje metoda Abandon, uruchamiane jest zdarzenie Session_OnEnd i wszystkie zmienne sesji oraz obiekty zostaj uwolnione.

Obiekt Application
Jak moge si nauczy z tego rozdziau, aplikacja ASP jest poczeniem stron ASP oraz pliku global.asa we wsplnej strukturze katalogu. Obiekt Application pozwala na programow kontrol twojej aplikacji. Przy uyciu metod i zbiorw dostpnych w obrbie tego obiektu, moesz tworzy zmienne i obiekty widziane w caej aplikacji w czasie trwania wszystkich sesji, jak rwnie metody pozwalajce na kontrol zmian stanu zmiennych.

Zbiory obiektu Application


Obiekt Application ma dwa zbiory, ktre moesz wykorzysta do kontroli zmiennych i obiektw widzianych w caej aplikacji ASP. Zbiory te omwiono poniej, a sumarycznie prezentuje je tabela 8.4. Tabela 8.4. Zbiory obiektu Application Zbir Opis Contents Zbir wszystkich zmiennych dostpnych na poziomie aplikacji, wyczajc te tworzone ze znacznikiem Object. StaticObjects Zbir wszystkich obiektw poziomu aplikacji, ktre utworzone byy przy uyciu znacznika Object w pliku global.asa.

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

250

Zbir Contents Zbir Contents jest grup zmiennych, ktr udostpniasz kadej ze stron twojej aplikacji ASP w czasie trwania dowolnej sesji. Zmienne te maj zasig aplikacji, s wic dostpne dla kadej strony ASP i nie s wspuytkowane przez wszystkich goci. Kod uruchamiany z osobna dla kadego gocia odwouje si do tego samego zbioru zmiennych aplikacji. Ustalenia wartoci danej pozycji zbioru Contents dokonuje si w nastpujcy sposb:
Application.Contents("CurrentDiscount") = .9

Skadnia polecenia, zarwno dla ustawiania, jak i wyszukiwania pozycji zbioru Contents rozpoczyna si sowem Application, a nastpnie w cudzysowie (poniewa jest to pozycja zbioru) okrelana jest nazwa pozycji, do ktrej si odwoujesz. Podobnie jak zbir Contents obiektu Session, rwnie zbir obiektu Application nie wywoa stanu bdu zwizanego z uyciem instrukcji Option Explicit, jeli zmienna nie bya wywoywana wczeniej. Jest to w peni zrozumiae, poniewa sednem uycia zbioru Contents w dowolnym obiekcie jest tworzenie zmiennych dostpnych w obrbie szerszej iloci stron. Zmienne aplikacji dostarczaj mechanizmu tworzenia i ustalania wartoci zmiennych w jednym pooeniu, do ktrych nastpnie bdzie mona si odwoywa w wielu innych miejscach. Dziki temu mona modyfikowa kod w prostszy sposb. Wemy nastpujcy przykad:
<% Application("CurrentDiscount") = .9 Application("MinShipHand") = 12 Application("MinQuantity") = 2 Application("ShipHandPercent") = .07 %>

Utworzylimy tutaj cztery zmienne aplikacji. Ich wartoci bd dostpne dla wszystkich stron aplikacji ASP w czasie trwania kadej sesji. Pierwsza utworzona zmienna nosi nazw CurrentDiscount, a przypisujemy warto 0.9:
Application("CurrentDiscount") = .9

Nastpnie tworzona jest zmienna MinShipHand, ktra zapamituje minimaln patno za transport i obsug przy realizacji jednego zamwienia, wynoszc w tym wypadku 12 dolarw:
Application("MinShipHand") = 12

Trzecia zmienna aplikacji, MinQuantity, zapamituje minimaln ilo kupowanych produktw:


Application("MinQuantity") = 2

I wreszcie czwarta zmienna aplikacji, ShipHandPercent, przechowuje naliczany procent za transport i obsug:
Application("ShipHandPercent") = .07

Teraz moemy odwoywa si do tych zmiennych w innych stronach aplikacji ASP:


<% Option Explicit Dim OrderTotal Dim SandH Dim TotalDue

251

ASP Kompendium
OrderTotal = Session("OrderTotal") * Application("CurrentDiscount") SandH = OrderTotal * Application("ShipHandPercent") If SandH < Application("MinShipHand") Then SandH = Application("MinShipHand") End If TotalDue = SandH + OrderTotal %>

programisty

Ten prosty blok kodowy jest przykadem sposobu obliczenia cakowitej sumy zamwienia. Zauwa, e nie ma w tym kodzie na sztywno zakodowanych liczb. Kod wykorzystuje zmienne aplikacji w celu okrelenia opaty. Wstpnie jednak kompilator zostaje poinformowany o deklaracji naszych zmiennych:
Option Explicit

Nastpnie tworzymy zmienn zapamitujc sum zamwienia podlegajc znice:


Dim OrderTotal

Nastpna tworzymy zmienn zapamitujc kwot nalen za transport i obsug:


Dim SandH

oraz ostatni zmienn, przechowujc ostateczn kwot do zapaty:


Dim TotalDue

Suma zamwienia jest obliczana przy uyciu zapamitanej zniki w zmiennej aplikacji CurrentDiscount:
OrderTotal = Session("OrderTotal") * Application("CurrentDiscount")

Nastpnie nalena kwota za transport i obsug obliczana jest jako okrelony w zmiennej aplikacji ShipHandPercent procent wartoci zmiennej OrderTotal:
SandH = OrderTotal * Application("ShipHandPercent")

Mamy rwnie okrelon minimaln patno za transport i obsug. Instrukcja If porwnuje patno biec z jej wartoci minimaln, zapisan w zmiennej aplikacji:
If SandH < Application("MinShipHand") Then

Jeli obliczona patno za transport i obsug jest mniejsza od wartoci minimalnej, do zmiennej wpisywana jest ta warto minimalna:
SandH = Application("MinShipHand") End If

W kocu obliczana jest kwota do zapaty, bdca sum nalenoci ze znik oraz patnoci za transport i obsug:
TotalDue = SandH + OrderTotal

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

252

Moesz rwnie tworzy obiekty zbioru Contents, ale tutaj bd bardzo ostrony. Pamitaj, e zmienne aplikacji oraz obiekty utrzymuj si przez cay czas trwania aplikacji ASP, wic wszystkie zasoby wykorzystywane przez obiekt bd rwnie w uyciu przez cay czas, a ten moe okaza si bardzo dugi. Kiedy tworzysz obiekt obejmujcy zasigiem aplikacj, podobny do tego:
Set Application("Gconn") = Server.CreateObject("adodb.connection")

przemyl to, co bdzie realizowa ten wiersz kodu. Przez cay czas trwania twojej aplikacji, ktry wynie moe tygodnie, utrzymywaby stae poczenie z baz danych. Poniewa Contents jest zbiorem, moemy przej kolejno przez wszystkie jego pozycje korzystajc z nastpujcego kodu:
<% Option Explicit Dim MyApp For Each MyApp in Application.Contents Response.Write "Nazwa zmiennej aplikacji: " & MyApp _ & " Warto: " & Application(MyApp) & "<P>" Next %>

Po pierwsze, sygnalizujemy zamiar deklarowania zmiennych:


Option Explicit

Nastpnie deklarujemy zmienn, ktra bdzie zapamitywaa odwoanie do kadej pozycji zbioru podczas przechodzenia przez ptl:
Dim MyApp

Pniej nasz blok For...Each przechodzi kolejno przez wszystkie pozycje zbioru Contents:
For Each MyApp in Application.Contents

Do przegldarki wpisywana jest nazwa kadej zmiennej aplikacji wraz z wartoci:


Response.Write "Nazwa zmiennej aplikacji: " & MyApp _ & " Warto: " & Application(MyApp) & "<P>"

Nastpnie kod przechodzi w ptli do kolejnej pozycji zbioru:


Next

Wyjcie omwionego wczeniej, przykadowego kodu przetwarzajcego kwot zamwienia zaprezentowano na rysunku 8.9.

253

ASP Kompendium

programisty

Rysunek 8.9. Wyjcie kodu przechodzcego przez pozycje zbioru Contents Zbir StaticObjects Podobnie jak obiekt Session, rwnie obiekt Application posiada zbir StaticObjects, ktry jest tworzony poprzez plik global.asa. Pamitaj, e plik ten jest czci aplikacji ASP. Daje on moliwo napisania kodu, ktry uruchamiany jest w chwili rozpoczcia bd zakoczenia dziaania aplikacji ASP. Ponadto plik umoliwia napisanie kodu uruchamianego na pocztku lub pod koniec sesji. Takie obiekty tworzysz przy uyciu znacznika Object, a staj si one dostpne poprzez zbir StaticObjects. Deklarujemy je w pliku global.asa w nastpujcy sposb:
<OBJECT RUNAT=Server SCOPE=Application ID=Gconn PRODIG= "adodb.connection"> </OBJECT>

Powyszy wiersz kodu tworzy obiekt o zasigu aplikacji o nazwie Gconn, ktry jest obiektem poczenia ADO. Po utworzeniu obiektu moesz odnosi si do pozycji zbioru StaticObjects w kadej ze stron aplikacji ASP w czasie trwania dowolnej sesji:
<% Option Explicit Dim RSUser Gconn.open "ASPBook", "sa", "yourpassword" set RSUser = Sconn.Execute("select * from Users") %>

Zauwa, e sposb odwoania si do zbioru StaticObjects rni si od sposobu odwoywania si do zbioru Contents. Nazwa pozycji zbioru okrelana jest bez poprzedzenia jej jakimkolwiek obiektem. W tym przykadzie po prostu uywana jest nazwa obiektu Gconn:
Gconn.open "ASPBook", "sa", "yourpassword"

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

254

Moesz rwnie uy bloku For...Each w celu przejcia kolejno przez wszystkie pozycje zbioru StaticObjects:
<% Option Explicit Dim MyAppSO For Each MyAppSO in Application.StaticObjects Response.Write "Obiekt aplikacji: " & MyAppSO & "<P>" Next %>

Po pierwsze pojawia si instrukcja Option


Option Explicit

Explicit,

jak tego wymaga deklaracja zmiennych:

Nastpnie tworzona jest zmienna, ktra bdzie zapamitywaa odwoanie do pozycji zbioru:
Dim MyAppSO

Pniej rozpoczynamy iteracj w strukturze bloku ForEach:


For Each MyAppSO in Application.StaticObjects

Do przegldarki wpisywana jest nazwa pozycji zbioru StaticObjects:


Response.Write "Obiekt aplikacji: " & MyAppSO & "<P>" Next

Metody obiektu Application


Obiekt Application posiada dwie metody, ktrych uywa w celu kontrolowania odwoa do pozycji zbioru Contents. Zostay one omwione w tym podrozdziale, a sumarycznie przedstawia je tabela 8.5. Tabela 8.5. Metody obiektu Application Metoda Przeznaczenie Lock Blokuje zmienn aplikacji tak, aby inne sesje nie mogy jej modyfikowa. Unlock Uwalnia blokad zmiennych aplikacji. Metoda Lock Jednym z problemw pojawiajcych si przy duej zajtoci witryny lub nawet w wypadkach gdy ruch nie jest a tak wielki, jest moliwo modyfikacji zmiennych aplikacji przez wiksz ilo skryptw w jednym czasie. Pamitaj, e zmienna poziomu aplikacji jest dostpna dla wszystkich sesji. Jeli wic obsugujesz setki rwnoczesnych sesji staje si prawdopodobne, e wicej ni jedna z nich bdzie prbowaa zmieni warto zmiennej aplikacji w tym samym czasie. Na przykad moesz ledzi liczb udanych wywoa strony przy uyciu zmiennej aplikacji. Kiedy aplikacja jest uruchamiana, mgby ustawi pocztkow warto zmiennej wedug jakiego pola bazy danych, uywajc przy tym kodu podobnego do tego:
<% Option Explicit

255

ASP Kompendium
Dim conn Dim RSPageHits set conn = server.createobject ("adodb.connection") conn.open "ASPBook", "sa", "yourpassword" set RSPageHits = conn.Execute("select Hits from RSPageHits") Application("PageHits") = RSPageHits("Hits") %>

programisty

Wymagana jest deklaracja zmiennych:


Option Explicit

Tworzona jest zmienna zapamitujca poczenie z baz danych:


Dim conn

Nastpnie tworzymy kolejn zmienn, ktra bdzie wyszukiwaa w bazie danych informacje o udanych wywoaniach:
Dim RSPageHits

Zmienna Conn bdzie speniaa rol obiektu Connection:


set conn = server.createobject ("adodb.connection")

Zestawiane jest poczenie baz danych:


conn.open "ASPBook", "sa", "yourpassword"

Zapytanie wyszukuje w bazie dane o udanym wywoaniu:


set RSPageHits = conn.Execute("select Hits from RSPageHits")

Tworzona jest zmienna aplikacji PageHits, zapamitujc liczb udanych wywoa strony:
Application("PageHits") = RSPageHits("Hits")

Teraz, za kady razem kiedy strona jest wywoywana, zmienna aplikacji PageHits jest inkrementowana:
<% Application("PageHits") = Application("PageHits") + 1 %>

Tu spotykamy si z sednem problemu. Jeli wielu goci uzyska dostp do strony rwnoczenie, istnieje moliwo, e wicej ni jedna sesja bdzie prbowaa zmieni warto zmiennej aplikacji w tym samym czasie. Metoda Lock radzi sobie z tego typu problemami blokujc zmienne aplikacji tak, aby w jednym czasie tylko jedna sesja moga zmodyfikowa ich warto. Metoda ma nastpujc skadni:
Application.Lock

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

256

Moemy zmodyfikowa nasz kod zawierajc w nim metod Lock, dajc w ten sposb moliwo zmiany wartoci zmiennej tylko jednej sesji naraz:
<% Application.Lock Application("PageHits") = Application("PageHits") + 1 %>

W tym przypadku wszystkie zmienne aplikacji zostan zablokowane, dopki kompilator nie zakoczy przetwarzania kodu strony. Jak si jednak przekonasz, kolejna metoda uwalnia blokad. Metoda Unlock Istniej dwa sposoby zwolnienia blokady zmiennych aplikacji. O pierwszej z nich ju wspomnielimy: pozwoli kodowi dziaa a do koca, a wtedy blokada zostanie zwolniona. Jeli jednak przetworzenie kodu zabiera zbyt duo czasu, moesz zakoczy je uwalniajc zmienne aplikacji, na ktre oczekuj inne sesje. Z tego powodu powiniene zablokowa twoje zmienne aplikacji przed ich modyfikacj i uwolni je po modyfikacji. Zwolnienia blokady dokonuje si przy uyciu metody Unlock, ktra ma nastpujc skadni:
Application.Unlock

Powinnimy wic zmodyfikowa nasz przykadow stron zliczajc udane wywoania, umieszczajc w niej nastpujcy, blokowany kod:
<% Application.Lock Application("PageHits") = Application("PageHits") + 1 Application.Unlock %>

Tu przed modyfikacj blokowane s zmienne aplikacji:


Application.Lock

Nastpnie dokonujemy modyfikacji zmiennej:


Application("PageHits") = Application("PageHits") + 1

Po dokonaniu zmian blokada jest zwalniana:


Application.Unlock

Plik global.asa
Do tej pory rozdzia omawia sposoby tworzenia aplikacji ASP. Przyjrzelimy si plikom skadajcym si na aplikacj: plikom ASP oraz plikowi global.asa znajdujcym si w strukturze tego samego katalogu. Zwrcilimy uwag na obiekty Session i Application oraz sposoby tworzenia zmiennych i obiektw dostpnych w obrbie caej aplikacji ASP. W tej czci rozdziau zajmiemy specjalnym plikiem uywalnym przez aplikacje ASP, global.asa. Po pierwsze, jest to plik tekstowy. Moesz go utworzy przy uyciu twego ulubionego edytora tekstu lub moesz w tym celu skorzysta z jednego z narzdzi rozbudowy stron.

257

ASP Kompendium

programisty

Plik ten musi nosi nazw global.asa i musi znajdowa si w katalogu gwnym aplikacji ASP. Skada si on z czterech zdarze, dla ktrych moesz stworzy procedury oraz ze znacznikw Object. Struktura pliku global.asa przedstawia si nastpujco:
<OBJECT RUNAT=Server SCOPE=Application ID=Aconn PRODIG="adodb. connection"> </OBJECT> <OBJECT RUNAT=Server SCOPE=Session ID=SobjMail PRODIG="CDONTS. NewMail"> </OBJECT>

<SCRIPT LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart 'kod procedury End Sub

Sub Session_OnStart 'kod procedury End Sub

Sub Session_OnEnd 'kod procedury End Sub

Sub Application_OnEnd 'kod procedury End Sub </SCRIPT>

Na samym pocztku pliku znajduj si obiekty poziomu aplikacji, deklarowane przy uyciu znacznika Object:
<OBJECT RUNAT=Server SCOPE=Application ID=Aconn PRODIG="adodb. connection"> </OBJECT>

W drugiej kolejnoci mog znale si obiekty poziomu sesji, rwnie tworzone przy uyciu znacznika Object:
<OBJECT RUNAT=Server SCOPE=Session ID=SobjMail PRODIG="CDONTS. NewMail"> </OBJECT>

Nastpnie znacznik Script wskazuje uywany jzyk programowania oraz na miejsce uruchamiania kodu:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Dalej moesz umieci kod, ktry bdzie uruchomiony w chwili wystpienia okrelonego zdarzenia. Moesz stworzy kod uruchamiany przy starcie aplikacji:
Sub Application_OnStart 'kod procedury End Sub

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

258

Moesz stworzy kod uruchamiany przy rozpoczciu sesji:


Sub Session_OnStart 'kod procedury End Sub

Poza tym kod dziaajcy na kocu sesji:


Sub Session_OnEnd 'kod procedury End Sub

Oraz na kocu aplikacji:


Sub Application_OnEnd 'kod procedury End Sub

Strona koczy si znacznikiem Script:


</SCRIPT>

Zdarzenia pliku global.asa


W obrbie pliku global.asa moesz stworzy kod uruchamiany w rnych momentach trwania aplikacji ASP. Zdarzenia te omwiono poniej, a sumarycznie przedstawia je tabela 8.6. Tabela 8.6. Zdarzenia aplikacji i sesji Zdarzenie Moment zadziaania Application_OnStart Zdarzenie uruchamiane w chwili dania dostpu do pierwszej strony aplikacji ASP. Application_OnEnd Kod zdarzenia uruchamiany jest w chwili zamknicia serwera IIS. Session_OnStart Uruchamiane w chwili, gdy dowolny go wywouje swoj pierwsz stron aplikacji ASP. Session_OnEnd Kod procedury uruchamiany jest po upyniciu czasu trwania sesji lub w chwili wywoania metody Abandon. Struktura procedury zdarzenia przedstawia si nastpujco:
Sub NameOfEvent 'kod zdarzenia End Sub

Pierwszy wiersz procedury rozpoczyna si sowem kluczowym Sub, po ktrym nastpuje nazwa procedury. W kolejnych wierszach zawarty jest kod uruchamiany w przypadku wystpienia danego zdarzenia. Ostatni wiersz procedury zawiera kluczowe sowa End Sub. Zdarzenie Application_OnStart Kiedy odwiedzajcy da dostpu do strony twojej aplikacji ASP po raz pierwszy od uruchomienia serwera, zadziaa zdarzenie Application_OnStart. Zdarzenie to jest uruchamiane przed jakimkolwiek innym kodem danej strony, jak rwnie przed uruchomieniem zdarzenia Session_OnStart.

259

ASP Kompendium

programisty

Zdarzenie Application_OnStart uruchamiane jest tylko jeden raz i nie stanie si to ponownie, dopki aplikacja nie zakoczy swego dziaania. Kod tego zdarzenia moe uzyskiwa dostp do obiektw Application i Server. Obiekty Request, Response i Session nie s osigalne w tym wypadku. Zdarzenie ma nastpujc skadni:
Sub Application_OnStart 'kod procedury End Sub

Typowo zdarzenie to uywane jest podczas inicjacji programu. Jest to kod, ktry chcesz uruchomi jeden tylko raz, przy starcie twojej aplikacji. Czsto wymaga to tworzenia zmiennych i obiektw aplikacji. To zdarzenie jest wykorzystywane rwnie przez kod powiadomienia. We wczeniejszej czci rozdziau zwrcilimy uwag na stron obliczajc cakowit naleno za zamwienie. Kod uywa zmiennych aplikacji deklarowanych w stronie ASP w celu okrelenia cakowitej kwoty zamwienia. Te zmienne powinny by inicjowane w zdarzeniu Application_OnStart:
Sub Application_OnStart Application("CurrentDiscount") = .9 Application("MinShipHand") = 12 Application("MinQuantity") = 2 Application("ShipHandPercent") = .07 End Sub

Nie musimy martwi si tutaj o blokowanie zmiennych aplikacji, poniewa zdarzenie to jest uruchamiane i dziaa przed jakimkolwiek innym kodem aplikacji ASP. Kolejnym dobrym przykadem zastosowania tego zdarzenia jest dostosowywanie programu do potrzeb uytkownika. Powiedzmy, e tworzysz aplikacj ASP, ktra uywana bdzie przez wiele organizacji. Chcesz dostarczy im minimum informacji na temat stron ASP, aby swobodnie mogli korzysta z tego narzdzia. Jednak aplikacja ASP moe by dostosowywana na potrzeby wielu klientw, chcesz wic, aby mieli moliwo zrobienia tego we wasnym zakresie. Jedynym sposobem na dokonanie tego jest stworzenie serii zmiennych konfiguracyjnych w zdarzeniu Application_OnStart. Pozwoli to twoim uytkownikom na centraln modyfikacj moliwoci programu. Wemy na przykad:
Sub Application_OnStart Application("DNS") = "OC" Application("UserName") = "Admin" Application("Password") = "yourpassword" Application("AllowNew") = "Yes" Application("AllowEnroll") = "Yes" Application("Path2Logo") = "./images/logo.gif" Application("AllowDrop") = "No" Application("ChatMode") = "External" End Sub

Ten kod pozwala na dostosowanie aplikacji ASP, bdcej szko online. Po pierwsze uytkownicy okrelaj nazw DNS-a czcego si z baz danych szkoy:
Application("DNS") = "OC"

Mog okreli rwnie uytkownika logujcego si do bazy danych:


Application("UserName") = "Admin"

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

260

oraz haso tego uytkownika:


Application("Password") = "yourpassword"

Nastpnie mog kontrolowa sposb funkcjonowania programu. Czy chc udziela dostpu nowym uczniom? Jeli tak, naley umieci nastpujcy wiersz kodu:
Application("AllowNew") = "Yes"

Czy chc, aby uczniowie mogli zapisa si na kurs? Jeli tak, kod bdzie taki:
Application("AllowEnroll") = "Yes"

Nastpnie klienci okrelaj pooenie ich logo firmowego:


Application("Path2Logo") = "./images/logo.gif"

Mog okreli, czy zezwol na porzucenie kursu przez ucznia:


Application("AllowDrop") = "No"

Na kocu typ uywanego programu do pogawdek:


Application("ChatMode") = "External"

W twojej dokumentacji mgby poda uytkownikom stosowne instrukcje, traktujce o znaczeniu i wartociach tych zmiennych aplikacji. Wtedy mgby w kodzie kontrolowa opcje strony w oparciu o ich preferencje. Oto na przykad kod strony rekrutacji uczniw na kursy:
<% Option Explicit Dim conn Dim RSCourses if Application("AllowEnroll") = "Yes" then set conn = server.createobject ("adodb.connection") conn.open Application("DNS"), Application("UserName"), _ Application("Password") set RSCourses = conn.execute ("SELECT CourseID, CourseName, " _ & CourseDescription FROM OCCourses") %> <P ALIGN="CENTER"><B><FONT COLOR="#0000A0" SIZE="+3" FACE="Arial,Helvetica">Wybierz kurs</B></FONT> <% do until RSCourses.EOF %> <A HREF="../html/enrolldrop.asp?CourseID= <% Response.Write RSCourses("CourseID") %>"> <IMG HEIGHT=52 WIDTH=56 SRC="../assets/images/p048.gif" BORDER=0 ALT="Enroll" ></A> <P><B><FONT FACE="Arial,Helvetica"> <% Response.Write RSCourses("CourseName") %> -

261

ASP Kompendium
<% Response.Write RSCourses("CourseDescription") %></B></FONT> <% RSCourses.MoveNext loop end if %>

programisty

Na wstpie stwierdzamy, e bdziemy deklarowa nasze zmienne:


Option Explicit

Nastpnie tworzymy zmienn, ktra bdzie uywana do poczenia z baz danych:


Dim conn

oraz zmienn wyszukujc informacje o kursie:


Dim RSCourses

Tutaj sprawdzamy preferencje okrelone w zdarzeniu Application_OnStart aby si przekona, czy w ogle naley wywietli informacje dotyczce rekrutacji:
if Application("AllowEnroll") = "Yes" then

Jeli wpisano warto "Yes", wtedy powinnimy wywietli te informacje. Moemy wic utworzy obiekt poczenia:
set conn = server.createobject ("adodb.connection")

Zwr uwag na to, e zmienne aplikacji uywane s do okrelenia DNS-a, nazwy uytkownika oraz hasa danych potrzebnych do poczenia z baz danych:
conn.open Application("DNS"), Application("UserName"), _ Application("Password")

Informacja o kursach jest wyszukiwana w bazie danych:


set RSCourses = conn.execute ("SELECT CourseID, CourseName, " _ & CourseDescription FROM OCCourses")

Zauwa, e ten HTML jest czci instrukcji If. Nie bdzie on wykonany, jeli w zmiennej AllowEnroll znajdzie co innego ni "Yes":
<P ALIGN="CENTER"><B><FONT COLOR="#0000A0" SIZE="+3" FACE="Arial,Helvetica">Wybierz kurs</B></FONT>

Nastpnie rozpoczynamy przechodzenie w ptli przez wszystkie kursy znajdujce si w bazie danych:
do until RSCourses.EOF

Kady kurs wpisywany jest do przegldarki jako cze pozwalajce gociowi zapisa si na wybrany z nich:

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


<A HREF="../html/enrolldrop.asp?CourseID= <% Response.Write RSCourses("CourseID") %>"> <IMG HEIGHT=52 WIDTH=56 SRC="../assets/images/p048.gif" BORDER=0 ALT="Enroll" ></A> <P><B><FONT FACE="Arial,Helvetica"> <% Response.Write RSCourses("CourseName") %> <% Response.Write RSCourses("CourseDescription") %></B></FONT>

262

Nastpnie przechodzimy w ptli do przetwarzania nastpnego kursu:


RSCourses.MoveNext loop

i koczymy blok If:


end if

Zdarzenie Application_OnEnd Jak stwierdzono wczeniej, aplikacja rozpoczyna swe dziaanie w chwili, gdy go uzyskuje dostp do jednej ze stron twojej witryny. Odpowiedni na ten moment kod tworzysz w obrbie zdarzenia Application_OnStart. Moesz rwnie okreli kod, ktry bdzie uruchamiany przy zakoczeniu dziaania aplikacji. Aplikacja koczy swe dziaanie w chwili, gdy serwer jest wyczany, moesz wic stworzy kod zawiadomienia o porzdkowaniu lub jakiego innego typu. Uwaaj jednak na to, co umieszczasz w tym miejscu, poniewa czasami twoja aplikacja zatrzyma si z powodu bdu lub problemu z serwerem. Jeli tak si stanie, twj kocowy kod nigdy nie zostanie uruchomiony. Z tego powodu osobicie nie uywam tego zdarzenia. Zdarzenie ma nastpujc skadni:
Sub Application_OnEnd 'kod procedury End Sub

Wiersz komentarza "kod tego zdarzenia.

procedury"

moesz zastpi dowolnym kodem uruchamianym w czasie wystpienia

Zdarzenie Session_OnStart Za kadym razem, gdy go uzyskuje dostp do twojej aplikacji ASP, uruchamiane jest zdarzenie Session_OnStart, a wtedy rozpocznie dziaanie dowolny kod umieszczony w tym zdarzeniu. Zdarzenie Session_OnStart nastpuje po zdarzeniu Application_OnStart, ale przed jakimkolwiek innym kodem strony ASP wywoywanej przez odwiedzajcego. Kiedy zdarzenie Session_OnStart zostanie uruchomione, wszystkie obiekty ASP staj si dla ciebie dostpne i moesz je wykorzysta w kodzie. Zdarzenie to ma nastpujc skadni:
Sub Session_OnStart 'kod procedury End Sub

Zazwyczaj w tym miejscu umieszcza si kod inicjacji uytkownika, czcy w sobie takie rzeczy jak tworzenie rekordu w bazie danych na potrzeby sesji, uruchomienie koszyka na zakupy, ustawienie preferencji oraz tworzenie zmiennych i obiektw sesji wykorzystywanych w tym zdarzeniu.

263

ASP Kompendium

programisty

Jednym z wielce uytecznych zastosowa zdarzenia Session_OnStart jest uniemoliwienie gociom wejcia na ktrkolwiek ze stron twojej witryny, zanim nie wejd na okrelon przez ciebie stron. Moesz na przykad wymaga od uytkownikw przejcia przez twoj stron gwn, nim odwiedz jakkolwiek inn cz twej witryny. By moe chcesz, aby logowali si tam przed przejciem dalej. Poniej zaprezentowano, w jak prosty sposb mona tego dokona przy uyciu zdarzenia Session_OnStart:
Sub Session_OnStart Response.Redirect "./welcome.asp" End Sub

Pamitaj, e zdarzenie Session_OnStart jest uruchamiane przed jakimkolwiek innym kodem stron aplikacji ASP, tak wic bez wzgldu na to, jak stron ASP go wpisze w przegldarce, bd musieli najpierw odwiedzi stron powitania. We pod uwag na prosty przykad uycia takiego kodu. Przykadowa witryna ma dwie strony: stron powitania oraz jak inn. Kiedy gocie wpisz w przegldarce adres innej strony, nie zobacz jej. W zamian ujrz stron powitania ukazan na rysunku 8.10. Gocie nie mog wic przej wprost do jakiej innej strony witryny. Musz najpierw wej na stron powitania w celu zalogowania si lub po prostu w celu przejcia przez witryn w sposb przez ciebie wymagany.

Rysunek 8.10. Powitalna strona prbnej witryny Jeliby jednak gocie wpisaliby w przegldarce adres innej strony, wtedy ujrzeliby j, poniewa ich sesja wanie si rozpocza. Spjrz na rysunek 8.11.

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa

264

Rysunek 8.11. Wygld drugiej strony prbnej witryny Zdarzenie Session_OnEnd Sesja rozpoczyna si w momencie uzyskania przez gocia dostpu do pierwszej strony twojej aplikacji ASP. Koczy si natomiast, gdy wywoasz metod Abandon lub gdy czas jej trwania upynie z powodu braku kolejnego dania dostpu do strony w wymaganej liczbie minut. Kiedy sesja si skoczy, uruchamiane jest zdarzenie Session_OnEnd, w ktrym moesz programowo wykorzysta obiekty Application, Server i Session, ale obiekty Request i Response nie s w tym momencie dostpne. Zdarzenie ma nastpujc skadni:
Sub Session_OnEnd 'kod procedury End Sub

W to zdarzenie moesz wczy kod porzdkowania. Moesz wpisa do bazy danych dat i godzin zakoczenia sesji gocia. Mgby uy rwnie tego zdarzenia do zakoczenia przetwarzania zada, ktre stale pozostaj otwarte lub do wysania jakich zawiadomie poczt elektroniczn (jeli jest to wymagane) przy uyciu obiektw CDO, ktre omwiono w nastpnym rozdziale. Poniej przedstawiono przykad tego, co mona wczy do zdarzenia Session_OnEnd. Ta procedura umieszcza nazw komputera gocia w bazie danych, moesz wic rozpoznawa tosamo goci twojej witryny. Warto ta nie jest normalnie dostpna poprzez serwer IIS, poniewa zwykle otrzymujesz jedynie adres IP gocia. Kod wykorzystuje niezalene narzdzie, ktre przeprowadza przeszukiwanie w ty adresu IP w celu okrelenia nazwy komputera. Gdyby kod ten nie by umieszczony w zdarzeniu Session_OnEnd, wystpiby problem zwizany ze zbyt dugim czasem przetwarzania kodu i wstrzymaniem wywietlenia danej strony w przegldarce gocia. Teraz jednak, gdy kod ten znalaz si w zdarzeniu Session_OnEnd, odwiedzajcy nie musz czeka na przetworzenie tego kodu:
Sub Session_OnEnd Dim objDNS Dim conn Dim hostname Dim GMT set objDNS = server.createobject("INet.DNS.1")

265

ASP Kompendium
objDNS.ip = request.servervariables("remote_addr") If objDNS.Host <> "" Then hostname = objDNS.Host Else hostname = request.servervariables("remote_addr") End If GMT = Cstr (dateadd("h", 6, now())) set conn = server.createobject ("adodb.connection") conn.open "IISLog", "sa", "yourpassword" SQL = "update iislog..sessions set session_end = '" & GMT _ & "', hostname = '" & hostname & "'" SQL = SQL & " where Session_id = " & cstr(Session("session_id")) conn.Execute SQL End Sub

programisty

Po pierwsze deklarowane s pewne zmienne, ktre bd uywane w tym zdarzeniu. Jedna z nich bdzie zapamitywaa kopi narzdzia przeszukiwania w ty DNS:
Dim objDNS

Nastpnie tworzona jest zmienna zapamitujca poczenie z baz danych:


Dim conn

Tworzona rwnie jest zmienna przechowujca nazw komputera gocia:


Dim hostname

oraz zmienna przechowujca czas Greenwich (GMT):


Dim GMT

Wykorzystywany jest obiekt Server do stworzenia kopii narzdzia przeszukiwania w ty:


set objDNS = server.createobject("INet.DNS.1")

Do waciwoci IP tego obiektu wpisywany jest adres IP systemu gocia:


objDNS.ip = request.servervariables("remote_addr")

Do waciwoci Host obiektu DNS jest teraz wpisywana nazwa komputera gocia. Jeli jest to nazwa nieznana, ustawion wartoci bdzie pusty cig:
If objDNS.Host <> "" Then

Jeli nie, oznacza to, e nazwa komputera zostaa odnaleziona:


hostname = objDNS.Host

W innym wypadku nazwa komputera nie zostaa odnaleziona i wykorzystany bdzie jedynie adres IP:

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


Else hostname = request.servervariables("remote_addr") End If

266

Chcemy rwnie zapamita w bazie danych dat i godzin zakoczenia sesji odwiedzajcego. Czas zapamitywany jest w formacie GMT, ktry powstaje tutaj (USA) po dodaniu szeciu godzin do czasu strefy lokalnej, obowizujcego na serwerze:
GMT = Cstr (dateadd("h", 6, now()))

Nastpnie zestawiane jest poczenie z baz danych:


set conn = server.createobject ("adodb.connection") conn.open "IISLog", "sa", "yourpassword"

(Uyty tutaj obiekt Connection zostanie szczegowo omwiony w rozdziale 14). Instrukcja SQL zbudowana jest przy uyciu nazwy komputera oraz czasu zakoczenia sesji. Te wartoci bd wprowadzone do rekordu bazy danych korespondujcego z numerem identyfikacyjnym sesji gocia (Session_ID):
SQL = "update iislog..sessions set session_end = '" & GMT _ & "', hostname = '" & hostname & "'" SQL = SQL & " where Session_id = " & cstr(Session("session_id"))

Ta instrukcja SQL jest nastpnie wykonywana w celu modyfikacji bazy danych:


conn.Execute SQL

Deklaracje obiektw w pliku global.asa Jak moglimy si przekona z treci poprzednich podrozdziaw powiconych obiektom Application i Session, na tych poziomach obiekty moemy tworzy poprzez znaczniki Object w pliku global.asa. Te obiekty s udostpniane w kodzie przez zbir StaticObjects zarwno obiektu Application, jak i Session. Wspomniane znaczniki umieszczone s poza znacznikami Script w pliku global.asa i maj nastpujcy format:
<OBJECT RUNAT=Server SCOPE=TheScope ID=Name PRODIG="App.Class"> </OBJECT>

Tekst TheScope naley zastpi sowem Session, gdyby chcia stworzy obiekt poziomu sesji lub sowem Application, gdyby tworzy obiekt poziomu aplikacji. Tekst Name naley zamieni na nazw obiektu, do ktrej bdziesz si odwoywa w kodzie. Zamiast cigu App.Class w deklaracji musi znale si nazwa serwera oraz klasa, ktr chcesz utworzy. Na przykad poniej tworzymy obiekt poziomu aplikacji o nazwie Aconn, ktry bdzie obiektem poczenia z baz danych ADO:
<OBJECT RUNAT=Server SCOPE=Application ID=Aconn PRODIG="adodb. connection"> </OBJECT>

A tutaj tworzymy obiekt poziomu sesji o nazwie SobjMail o klasie NewMail obiektu CDO:
<OBJECT RUNAT=Server SCOPE=Session ID=SobjMail PRODIG="CDONTS.NewMail"> </OBJECT>

267

ASP Kompendium

programisty

Aplikacje ASP w uyciu


Materia omwiony w tym rozdziale naprawd przedstawia ASP jako technologi, dziki ktrej moliwe bdzie tworzenie caociowych rozwiza na potrzeby twojego firmowego Internetu bd intranetu. Bez obiektw Application i Session twoja witryna byaby niczym wicej, jak tylko seri stron, od przypadku do przypadku czcych si ze sob. Jednak dziki tym obiektom moesz tworzy prawdziwe aplikacje w penym tego sowa znaczeniu. We pod uwag stron e-commerce. Rysunek 8.12. przedstawia prawdziw stron, ktr administruj. Strona pokazana na rysunku jest czci kreatora zamwie. Zapytuje ona goci o konieczne szczegy na temat zamawianego produktu. Strona w duym stopniu bazuje na obiekcie Session w celu ledzenia poczyna goci tak, aby w ich koszyku znalazy si waciwe produkty, jak to wida w kodzie tej strony:
if isempty(Session("SessionID")) then CurrentDateTime = Now conn.Execute "insert into WICustomers (SessionDateTime) values ('"_ & CurrentDateTime & "')" set RSSession = conn.Execute("select SessionID from WICustomers "_ & "where SessionDateTime = '" & CurrentDateTime & "'") RSSession("SessionID") end if '''''''''' set RSTotal = conn.Execute("select Sum(TotalPrice) as TheTotal from WIOrderItems "_ & "where SessionID = " & Session("SessionID")) if RSTotal("TheTotal") * Application("ShipPercent") > Application ("MinShip") then TopShipping = RSTotal("TheTotal") * Application("ShipPercent") else TopShipping = Application("MinShip") end if ''''''''''' Response.Redirect "https://www.netstats2000.com/bud/html/"_ & shopping_cart.asp?SessionID=" & Session(SessionID") Session("SessionID") =

W pierwszej czci kodu sprawdzamy, czy zmienna sesji o nazwie SessionID jest pusta:
if isempty(Session("SessionID")) then

Jeli zmienna sesji jest pusta oznacza to, e go umieci w koszyku swj pierwszy wybrany produkt i naley stworzy dla niego odpowiedni rekord. Aktualna data i godzina systemowa bdzie czci rekordu koszyka:
CurrentDateTime = Now

Rekord jest dodawany do bazy danych:


conn.Execute "insert into WICustomers (SessionDateTime) values ('"_ & CurrentDateTime & "')"

Numer identyfikacyjny nowo utworzonego rekordu koszyka jest wyszukiwany w bazie danych:

Rozdzia 8 Obiekt Session, Obiekt Application, oraz plik global.asa


set RSSession = conn.Execute("select SessionID from WICustomers "_ & "where SessionDateTime = '" & CurrentDateTime & "'")

268

W zmiennej sesji SessionID ustawiana jest warto z rekordu koszyka:


Session("SessionID") = RSSession("SessionID")

Nastpna cz kodu oblicza koszty wysyki zamwionych produktw. Po pierwsze obliczany jest cakowity koszt zamwienia na bazie wyszukanych kosztw poszczeglnych produktw w koszyku znajdujcych si w zmiennej SessionID:
set RSTotal = conn.Execute("select Sum(TotalPrice) as TheTotal from WIOrderItems "_ & "where SessionID = " & Session("SessionID"))

Nastpnie zmienne aplikacji wykorzystywane s do porwnania kosztu wysyki z minimaln wartoci tego kosztu:
if RSTotal("TheTotal") * Application("ShipPercent") > Application ("MinShip") then

Jeli procentowa warto kosztu wysyki jest wiksza od dwch, wykorzystujemy j:


TopShipping = RSTotal("TheTotal") * Application("ShipPercent")

W innym wypadku uywamy minimalnego kosztu wysyki:


TopShipping = Application("MinShip")

Widzisz wic, e dobrze rozplanowana, zoona aplikacja ASP w peni wykorzystuje funkcje obiektw Application i Session.

269

ASP Kompendium

programisty

Rysunek 8.12. Kreator zamwie

Rozdzia 9. Obiekty CDO dla Windows NT Server


Uzupenienie strony ASP o funkcj wysyania wiadomoci email
Obiekt danych wsppracujcych dla Windows NT Server (Collaborative Data Objects, CDONTS, CDO dla NTS) pozwala na tworzenie kopii umoliwiajcych wysyanie wiadomoci e-mail z twoich stron lub aplikacji ASP. Biblioteka CDONTS ukazuje gwn klas, ktr moemy stworzy, NewMail, dostarczajc atwych w uyciu metod i waciwoci pozwalajcych na wysyanie wiadomoci e-mail z twoich stron ASP. Tre tego rozdziau koncentruje si na tym obiekcie. CDONTS zaprojektowano tak, aby dziaa w systemie Windows NT Server dysponujcym serwerem IIS wersji 4.0 lub pniejszej. Biblioteka nie wymaga uruchomienia serwera wymiany (Exchange Server). Jeli posiadasz serwer wymiany w twoim systemie, musi on by zainstalowany po IIS, aby rwnie biblioteka CDONTS bya poprawnie zainstalowana. Jeli nie posiadasz serwera wymiany, bdziesz musia korzysta z serwera SMTP dostarczanego wraz z IIS w celu poprawnego funkcjonowania biblioteki CDONTS. Powiniene zobaczy witryn SMTP w serwerze IIS, co pokazano na rysunku 9.1.

Rysunek 9.1. Witryna SMTP w serwerze IIS

271

ASP Kompendium

programisty

Jeli nie posiadasz Microsoft Exchangea, moesz tutaj skonfigurowa witryn SMTP przegldajc jej waciwoci. Jeli nie jest ona widoczna w IIS, to prawdopodobnie nie wybrae tego skadnika w czasie instalacji IIS. Uruchom ponownie instalacj i dodaj ten skadnik.

Obiekt NewMail
W kilku przykadach uytych ju w tej ksice moge widzie obiekt NewMail w dziaaniu. Przy jego uyciu moesz wysya podstawowe wiadomoci e-mail w trzech prostych wierszach kodu twojej strony ASP:
Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.Send "bob@na.com", "Julie@na.com, "Witamy!", _ "Witamy w naszej firmie Julio. Cieszymy si, e tu jeste Bob" Set objMail = Nothing

To wszystko, trzy wiersze. Najpierw tworzysz obiekt NewMail z biblioteki CDONTS:


Set objMail = Server.CreateObject("CDONTS.NewMail")

Nastpnie uywasz metody Send w celu wysania wiadomoci e-mail. Pierwszy parametr metody Send okrela wysyajcego wiadomo; drugi parametr to adresat wiadomoci; trzeci to temat wiadomoci; ostatni to sama jej tre:
objMail.Send "bob@na.com", "Julie@na.com, "Witamy!", _ "Witamy w naszej firmie Julio. Cieszymy si, e tu jeste! Bob"

W kocu zwalniasz zasoby obiektu NewMail:


Set objMail = Nothing

Wiadomo e-mail wysyana jest do odbiorcy. Powyszy kod wygeneruje wiadomo pokazan na rysunku 9.2. Dziki zastosowaniu obiektu NewMail moesz jednak zrobi znacznie wicej ni to, co pokazano na tym prostym przykadzie. W dalszej czci tego rozdziau przyjrzymy si dokadnie waciwociom i metodom obiektu NewMail.

Rozdzia 9 Obiekt CDO dla Windows NT Server

272

Rysunek 9.2. Wiadomo e-mail wysana przy uyciu metody Send obiektu NewMail

Waciwoci obiektu NewMail


Waciwoci obiektu NewMail pozwalaj na dostosowanie do potrzeb klienta sposobu wysyania wiadomoci email. Tabela 9.1. przedstawia sumarycznie te waciwoci, ktre zostay tutaj omwione. Tabela 9.1. Waciwoci obiektu NewMail Waciwo Przeznaczenie To Adres e-mail odbiorcy From Adres e-mail nadawcy Subject Temat wiadomoci Body Tre wiadomoci CC Odbiorcy listu typu DW BCC Odbiorcy zamaskowanego listu typu DW (UDW) Importance Ustawia poziom wanoci wiadomoci BodyFormat Okrela format tekstu wiadomoci, zwyky tekst lub HTML MailFormat Okrela kodowanie wiadomoci, tekstowe lub MIME ContentBase Baza adresu URL dla wszystkich cz w wiadomoci ContentLocation Okrela ciek dostpu do wszystkich czy URL w treci wiadomoci Value Dodaje nagwki do wiadomoci Version Zwraca wersj biblioteki CDONTS

Waciwo To Waciwo To pozwala na okrelenie adresu e-mail odbiorcy. Waciwo ta ma nastpujc form:
ObjMail.To = ListOfRecipients

273

ASP Kompendium

programisty

w tym kodzie musi by obiektem klasy NewMail biblioteki CDONTS. Zmienna ListOfRecipients jest adresem poczty elektronicznej osoby lub osb, do ktrych chcesz wysa wiadomo. Moesz zaadresowa wiadomo do jednej osoby w nastpujcy sposb:
ObjMail
ObjMail.To = "harris@na.com"

Moesz rwnie wysa wiadomo do wielu odbiorcw, oddzielajc kady z adresw rednikiem, jak to pokazano poniej:
ObjMail.To = "harris@na.com;julie@na.com;ruth@na.com"

W tym momencie e-mail wysany zostanie pod trzy adresy. Zwr uwag na to, e moemy okreli odbiorc wiadomoci za pomoc waciwoci To lub uywajc parametru metody Send, tak wic poprzedni wiersz mgby by zastpiony przez taki kod:
objMail.Send "bob@na.com", "harris@na.com;julie@na.com;ruth@na.com", _ "Witamy!", "Witamy wszystkich w firmie. Cieszymy si z waszej obecnoci! - Bob"

Jeli korzystasz z waciwoci To, po prostu nie wpisuj drugiego parametru metody Send:
ObjMail.To = "harris@na.com;julie@na.com;ruth@na.com" objMail.Send "bob@na.com", , "Witamy!", _ "Witamy wszystkich w firmie. Cieszymy si z waszej obecnoci! - Bob"

Jeli uywasz zarwno waciwoci To, jak i parametru metody Send, wiadomo zostanie wysana pod wszystkie adresy z obu list. Tak wic ten kod:
ObjMail.To = "harris@na.com;julie@na.com;ruth@na.com" objMail.Send "bob@na.com", "nancy@na.com", "Witamy!", _ "Witamy wszystkich w firmie. Cieszymy si z waszej obecnoci! - Bob"

wysaby e-mail do czterech odbiorcw: trzech z nich okrelono we waciwoci To i jednego w drugim parametrze metody Send. Waciwo From Waciwo From zapamituje adres poczty elektronicznej nadawcy. Waciwo ta ma nastpujc form:
ObjMail.From = EmailAddressOfSender

musi by tutaj wanym obiektem NewMail biblioteki CDONTS. Zmienna EmailAddressOfSender musi by penym adresem e-mail, na przykad:
ObjMail
ObjMail.From = "marg@na.com"

W tej waciwoci moesz okreli jednego tylko nadawc. Innymi sowy nie moesz zastosowa rednikw w celu okrelenia wielu nadawcw; jeli tak zrobisz, wystpi bd w przegldarce, ktry prezentuje rysunek 9.3.

Rozdzia 9 Obiekt CDO dla Windows NT Server

274

Rysunek 9.3. Wiadomo o wystpieniu bdu, ktry wywoany zosta okreleniem wielu nadawcw Do okrelenia nadawcy moesz uy waciwoci From lub zamiennie parametru metody Send. Tak wic ten kod:
objMail.To = "julie@na.com;jill@na.com" objMail.From = "bob@na.com" objMail.Send , , "Wiadomo prbna", _ "Ta wiadomo zostaa wysana do wszystkich z listy."

jest funkcjonalnym zamiennikiem tego kodu:


objMail.To = "julie@na.com;jill@na.com" objMail.Send "bob@na.com", , "Wiadomo prbna", _ "Ta wiadomo zostaa wysana do wszystkich z listy."

Jeli podasz parametr zarwno w metodzie Send, jak i waciwoci From, w wysanej wiadomoci pojawi si nadawca okrelony poprzez metod Send. Waciwo Subject Waciwoci Subject moesz uy do okrelenia tematu wiadomoci. Ma ona nastpujcy format:
ObjMail.Subject = TheSubject

musi by wanym obiektem NewMail serwera CDONTS. TheSubject jest cigiem reprezentujcym temat wiadomoci. Uycie takiego kodu:
ObjMail
ObjMail.Subject = "Witamy!"

spowoduje, e tematem wiadomoci bdzie tekst "Witamy!". Temat wiadomoci moesz okreli przy uyciu waciwoci Subject, jak rwnie wykorzystujc w tym celu trzeci parametr metody Send. Tak wic taki kod:
objMail.To = "julie@na.com;jill@na.com" objMail.From = "bob@na.com"

275

ASP Kompendium
objMail.Subject = "Witamy!" objMail.Send , , , _ "Ta wiadomo zostaa wysana do wszystkich z listy."

programisty

mona zastpi takim, wywoujcym te same rezultaty:


objMail.To = "julie@na.com;jill@na.com" objMail.From = "bob@na.com" objMail.Send , , "Witamy!", _ "Ta wiadomo zostaa wysana do wszystkich z listy."

Jeli zastosujesz zarwno waciwo Subject, jak i trzeci parametr metody Send, uyty zostanie ten okrelony przez metod Send. Waciwo Body Waciwo Body okrela tekst wiadomoci lub jej HTML, jak bdziesz mg si przekona nieco pniej. Waciwo ta ma nastpujc form:
ObjMail.Body = BodyText

ObjMail

musi by wanym obiektem NewMail biblioteki CDONTS. BodyText jest treci wiadomoci. Taki kod:

ObjMail.Body = "Ta wiadomo zostaa wysana do wszystkich z listy."

spowoduje, e wiadomo bdzie zawieraa powyszy tekst. Do okrelenia treci wiadomoci moesz uy waciwoci Body lub czwartego parametru metody Send, tak wic to:
objMail.To = "julie@na.com;jill@na.com" objMail.From = "bob@na.com" objMail.Subject = "Witamy!" objMail.Body = "Dzikujemy za odwiedzenie naszej witryny!" ObjMail.Send

jest funkcjonalnie tosame z tym:


objMail.To = "julie@na.com;jill@na.com" objMail.From = "bob@na.com" objMail.Subject = "Witamy!" ObjMail.Send , , , "Dzikujemy za odwiedzenie naszej witryny!"

Kiedy tworzysz wiadomoci e-mail w twoim kodzie przekonasz si, e musisz je sformatowa przy uyciu nowych wierszy w celu zaznaczenia przerw w tekcie. Moesz to zrobi wykorzystujc funkcj Chr, ktrej parametrem jest liczba, a wartoci zwracan znak odpowiadajcy tej liczbie. Jeli chciaby wstawi nowy wiersz, kod bdzie taki:
Chr(13)

Jeli chcesz wstawi znak tabulacji:


Chr(9)

Rozdzia 9 Obiekt CDO dla Windows NT Server

276

Kolejnym znakiem, ktry by moe bdziesz chcia wstawi w tekst wiadomoci to cudzysw. Moesz to zrobi wstawiajc tekst w cudzysowie w cudzysw podwjny. We pod uwag nastpujcy blok kodu, zawierajcy cudzysowy i nowe wiersze w treci wiadomoci:
<% Option Explicit Dim objMail Dim TheMessage Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "julie@na.com;jill@na.com" objMail.From = "bob@na.com" objMail.Subject = "Witamy!" TheMessage = "Cze:" & chr(13) & chr(13) _ & "Dzikujemy za odwiedzenie naszej witryny!" & chr(13) & chr(13) _ & """Cenimy sobie Twoj firm!""" objMail.Body = TheMessage objMail.Send response.write "gotowe" Set objMail = Nothing %>

Po pierwsze zaznaczamy, e bdziemy deklarowa nasze zmienne:


Option Explicit

Nastpnie tworzona jest zmienna, ktra bdzie przechowywaa nasz obiekt NewMail:
Dim objMail

Kolejna zmienna przeznaczona jest do przechowywania tekstu wiadomoci:


Dim TheMessage

Nastpnie wykorzystujemy metod CreateObject obiektu Server do stworzenia kopii obiektu NewMail:
Set objMail = Server.CreateObject("CDONTS.NewMail")

Okrelamy adresata wiadomoci:


objMail.To = "julie@na.com;jill@na.com"

nadawc:
objMail.From = "bob@na.com"

i temat wiadomoci:
objMail.Subject = "Witamy!"

Tekst wiadomoci zapamitywany jest w zmiennej TheMessage. Zauwa, e uyto tutaj funkcji Chr do stworzenia nowych wierszy, a poza tym podwjnego cudzysowu dla zaznaczenia cudzysowu w cudzysowie:

277

ASP Kompendium
TheMessage = "Cze:" & chr(13) & chr(13) _ & "Dzikujemy za odwiedzenie naszej witryny!" & chr(13) & chr(13) _ & """Cenimy sobie Twoj firm!"""

programisty

Dla waciwoci Body ustawiana jest warto zmiennej TheMessage:


objMail.Body = TheMessage

Wiadomo jest wysyana:


objMail.Send

a obiekt zwalnia pami:


Set objMail = Nothing

Stworzony w ten sposb e-mail przedstawiono na rysunku 9.4. Zwr uwag na pooenie cudzysowu oraz nowych wierszy.

Rysunek 9.4. E-mail zawierajcy znaki specjalne Waciwo CC Waciwo CC pozwala okreli odbiorcw wiadomoci, nie bdcych odbiorcami gwnymi. Odbiorcy listu typu DW (ang. CC Carbon Copy) widz t sam wiadomo, co odbiorcy gwni, s jednak wyszczeglnieni w nagwku wiadomoci jako adresaci drugorzdni. Waciwo przyjmuje nastpujc form:
ObjMail.CC = CCList

musi by zatwierdzon kopi klasy NewMail biblioteki CDONTS. CCList jest cigiem zawierajcym list adresw poczty elektronicznej. Moesz okreli pojedynczego odbiorc listu typu DW:
ObjMail

Rozdzia 9 Obiekt CDO dla Windows NT Server


ObjMail.CC = "joe@na.com"

278

lub wiksz ich liczb oddzielajc kadego z nich rednikiem:


ObjMail.CC = "joe@na.com;kate@na.com"

Waciwo BCC Poprzez waciwo BCC moesz okreli odbiorcw zamaskowanego listu typu DW (UDW, ang. BCC Blind Carbon Copy). Adresat UDW otrzymuje t sam wiadomo, co odbiorca gwny i odbiorca DW, ale ci dwaj ostatni nie s powiadamiani o adresie e-mail odbiorcw listu UDW. Dziki tej waciwoci moesz chroni prywatno poszczeglnych osb. Waciwo ma nastpujc form:
ObjMail = BCCList

musi by zatwierdzon kopi klasy NewMail biblioteki CDONTS. BCCList to cig czcy w sobie list adresw e-mail odbiorcw zamaskowanego listu typu DW. Moesz okreli pojedynczego odbiorc listu UDW:
ObjMail
ObjMail.BCC = "joe@na.com"

lub, przy uyciu rednikw, wielu odbiorcw:


ObjMail.BCC = "joe@na.com;kate@na.com"

Waciwo Importance Rne aplikacje poczty elektronicznej pozwalaj okrela poziom wanoci wysyanych przez ciebie wiadomoci. Sposb wywietlania tego znacznika wanoci rni si w zalenoci od systemu. Za pomoc waciwoci Importance moesz okreli w kodzie wano wiadomoci. Skadnia waciwoci przedstawia si nastpujco:
ObjMail.Importance = Value

musi by wan kopi obiektu NewMail. Dopuszczalne wartoci Value przedstawia tabela 9.2. Tabela 9.2. Wartoci waciwoci Importance Warto Znaczenie 0 Niska wano 1 Normalna wano (domylna) 2 Wysoka wano
ObjMail

Moemy wic wczy waciwo Importance do naszego bloku kodu:


<% Option Explicit Dim objMail Dim TheMessage Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "julie@na.com " objMail.From = "bob@na.com" objMail.Subject = "Witamy!"

279

ASP Kompendium
TheMessage = "Cze:" & chr(13) & chr(13) _ & "Dzikujemy za odwiedzenie naszej witryny!" & chr(13) & chr(13) _ & """Cenimy sobie Twoj firm!""" objMail.Body = TheMessage objMail.Importance = 2 objMail.Send Set objMail = Nothing response.write "gotowe" %>

programisty

Kiedy wano wiadomoci jest wysoka, program obsugujcy poczt odbiorcy zazwyczaj czyni tak wiadomo bardziej widoczn. Zwr uwag na zmian, jaka zasza w wygldzie wiadomoci prezentowanej przez program Outlook z powodu nadania jej priorytetu wanoci, co pokazano na rysunku 9.5.

Rysunek 9.5. Wiadomo wykorzystujca waciwo Importance Waciwoci BodyFormat i MailFormat Wszystkie omwione do tej pory wiadomoci miay format tekstowy. Moemy jednak wysya rwnie wiadomoci e-mail w formacie HTML, korzystajc przy tym z waciwoci BodyFormat i MailFormat. Waciwo BodyFormat ma nastpujc skadni:
ObjMail.BodyFormat = Value

jest obiektem NewMail serwera CDONTS. Warto (Value) moe wynosi domylnie 1 co oznacza, e tre wiadomoci jest zwykym tekstem. Warto waciwoci ustawiona na 0 oznacza, e tre wiadomoci zawiera HTML. Aby wysa wiadomo w formacie HTML, musisz rwnie uy waciwoci MailFormat, ktra okrela typ kodowania wiadomoci. Skadnia waciwoci przedstawia si nastpujco:
ObjMail
ObjMail.MailFormat = Value

Rozdzia 9 Obiekt CDO dla Windows NT Server


ObjMail

280

musi by obiektem NewMail. Warto (Value) moe wynosi 0 lub 1. Domyln wartoci jest 1, co oznacza, e zastosowano kodowanie tekstowe. Dla wiadomoci HTML musisz uy wartoci 0 co oznacza, e zastosowano kodowanie MIME. Poniszy przykadowy kod wysya wiadomo HTML o wysokiej wanoci.
<% Option Explicit Dim objMail Dim TheMessage Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "tim@na.com" objMail.From = "bob@na.com" objMail.Subject = "Zwariowalimy!" TheMessage = "<HTML>" _ & "<HEAD>" _ & "<TITLE>Mamy wyprzeda</TITLE>" _ & "</HEAD>" _ & "<BODY>" _ & "<H1><CENTER>Wszystko tasze o<STRIKE>30%</STRIKE> 50% !</CENTER></H1>" _ & "<HR>" _ & "<P>Stj wic! <A HREF=""http://www.na.com"">kliknij tutaj!</A></P>" _ & "</BODY>" _ & "</HTML>" objMail.Body = TheMessage objMail.Importance = 2 objMail.BodyFormat = 0 objMail.MailFormat = 0 objMail.Send Set objMail = Nothing %>

Po pierwsze stwierdzamy, e bdziemy deklarowa nasze zmienne:


Option Explicit

Nastpnie deklarujemy zmienn obiektu NewMail:


Dim objMail

oraz zmienn, ktra bdzie przechowywaa tre wiadomoci HTML:


Dim TheMessage

Tworzymy kopi zmiennej objMail:


Set objMail = Server.CreateObject("CDONTS.NewMail")

a nastpnie okrelamy odbiorc wiadomoci:


objMail.To = "tim@na.com"

281

ASP Kompendium

programisty

Nastpnie okrelamy nadawc wiadomoci poprzez waciwo From:


objMail.From = "bob@na.com"

Wiadomoci nadawany jest tytu:


objMail.Subject = "Zwariowalimy!"

Nastpnie budujemy tre naszej wiadomoci w postaci czystego HTML-a. Uywamy tutaj rozmaitych znacznikw HTML. Zwr uwag na uyte w tekcie cudzysowy:
TheMessage = "<HTML>" _ & "<HEAD>" _ & "<TITLE>Mamy wyprzeda</TITLE>" _ & "</HEAD>" _ & "<BODY>" _ & "<H1><CENTER>Wszystko tasze o<STRIKE>30%</STRIKE> 50% !</CENTER></H1>" _ & "<HR>" _ & "<P>Stj wic! <A HREF=""http://www.na.com"">kliknij tutaj!</A></P>" _ & "</BODY>" _ & "</HTML>"

Dalej ustalamy tre wiadomoci HTML:


objMail.Body = TheMessage

Ustawiamy wano wiadomoci:


objMail.Importance = 2

Zaznaczamy, e treci jest HTML:


objMail.BodyFormat = 0

Uyty format kodowania to MIME:


objMail.MailFormat = 0

Metoda Send wysya wiadomo e-mail:


objMail.Send

W kocu uwalniamy zasoby wiadomoci:


Set objMail = Nothing

Odbiorca powinien otrzyma wiadomo pokazan na rysunku 9.6.

Rozdzia 9 Obiekt CDO dla Windows NT Server

282

Rysunek 9.6. Wiadomo HTML Pamitaj jednak, e nie wszystkie programy poczty elektronicznej potrafi przeglda wiadomoci HTML. Niektre z nich mog wywietli jedynie tekst wiadomoci podobny do tego pokazanego na rysunku 9.7. Program prbuje tutaj pokaza tekst wiadomoci, zauwa jednak jak zmienio si jej znaczenie. W dokumencie HTML skrelilimy 30% na rzecz 50%. Tutaj nie wida tej rnicy.

Rysunek 9.7. Wiadomo HTML przegldana przez klienta nie obsugujcego HTML-a Waciwoci ContentBase i ContentLocation Waciwoci ContentBase i ContentLocation pozwalaj ci okreli w HTML-u pooenie wzgldnych odwoa. Waciwo ContentBase normalnie zapamituje wyszy poziom lokalizacji adresw URL, a waciwo ContentLocation zapamituje ciek katalogu. Waciwo ContentBase ma nastpujc skadni:
ObjMail.ContentBase = Path

283

ASP Kompendium

programisty

musi by wan kopi klasy NewMail. Warto Path jest zazwyczaj ciek domeny. Zapis moe wic by nastpujcy:
ObjMail
ObjMail.ContentBase = "http://www.whatever.com/"

Jeli wpisaby tylko tak warto, to cieki w twojej wiadomoci HTML wykorzystaj j jako odniesienie wzgldne podczas lokalizacji obrazkw i cz. Moesz rwnie uy waciwoci ContentLocation w celu okrelenia katalogu poniej nazwy domeny, gdzie ulokowano cza i pliki. Skadnia waciwoci ContentLocation przedstawia si tak:
ObjMail.ContentLocation = Path

jest kopi klasy NewMail. Warto Path okrela ciek do plikw i cz. Jeli na przykad napiszesz taki kod:
ObjMail
ObjMail.ContentLocation = "emailreports/December/"

to znacznik obrazka w treci wiadomoci HTML wykorzysta obydwie waciwoci, ContentBase i ContentLocation, w celu okrelenia fizycznego pooenia obrazka. Waciwo Value W zalenoci od posiadanego przez odbiorc programu obsugujcego poczt, istnieje wiele rozmaitych ustawie wiadomoci. Moesz doda te ustawienia przy uyciu waciwoci Value. Waciwo Value uzupenia wiadomo e-mail o dodatkowy nagwek i ma nastpujcy format:
ObjMail.Value(HeaderName) = HeaderValue

musi by zatwierdzonym obiektem NewMail. HeaderName jest kopi nagwka, ktrego chcesz uy w wiadomoci, a HeaderValue jest wartoci tego nagwka. Na przykad wiele klientw poczty uwzgldnia adres e-mail nadawcy, jak rwnie zwrotny adres odpowiedzi Reply-To. Jeli odbiorca kliknie przycisk Odpowiedz (Reply) w swojej aplikacji poczty, program uyje adresu wskazanego przez t funkcj zamiast adresu nadawcy z waciwoci From. Zwrmy na przykad uwag na nastpujcy kod:
ObjMail
<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "kate@na.com" objMail.From = "bob@na.com" objMail.Subject = "Zwariowalimy!" objMail.Body = "Wylij mi e-mail ze szczegami!" objMail.Importance = 2 objMail.Value("Reply-To") = "Sprzeda<sales@na.com>" objMail.Send Set objMail = Nothing %>

Po pierwsze informujemy kompilator o deklaracji naszych zmiennych:


Option Explicit

Rozdzia 9 Obiekt CDO dla Windows NT Server

284

Nastpnie deklarujemy zmienn NewMail:


Dim objMail

Tworzymy kopi obiektu NewMail:


Set objMail = Server.CreateObject("CDONTS.NewMail")

Ustawiana jest waciwo To:


objMail.To = "kate@na.com"

jak rwnie waciwo From:


objMail.From = "bob@na.com"

Dalej okrelany jest temat i tre wiadomoci:


objMail.Subject = "Zwariowalimy!" objMail.Body = "Wylij mi e-mail ze szczegami!"

Zaznaczamy, e wano wiadomoci jest wysoka:


objMail.Importance = 2

Nastpnie, przed wysaniem wiadomoci, dodajemy nagwek Reply-To:


objMail.Value("Reply-To") = "Sprzeda<sales@na.com>"

i uwalniamy zasoby wiadomoci:


objMail.Send Set objMail = Nothing

Kiedy gocie klikn przycisk Odpowiedz (Reply) znajdujcy si w ich kliencie poczty, wiadomo zostanie wysana pod adres Reply-To, a nie adres nadawcy okrelony waciwoci From, co pokazano na rysunku 9.8.

285

ASP Kompendium

programisty

Rysunek 9.8. Wiadomo wykorzystujca nagwek Reply-To Waciwo Version Pozostaa do omwienia ostatnia waciwo obiektu NewMail, waciwo Version, ktra zwraca wersj biblioteki CDONTS. Ta waciwo, przeznaczona tylko do odczytu, przyjmuje nastpujc form:
ObjMail.Version

musi by wanym obiektem NewMail. Zwracan przez funkcj wartoci jest wersja biblioteki, tak wic poniszy kod:
ObjMail
<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") Response.Write "<H2>Ten serwer korzysta z wersji: " _ & objMail.Version & " CDONTS</H2>" %>

wywietli uywan wersj CDONTS, jak to pokazano na rysunku 9.9.

Rozdzia 9 Obiekt CDO dla Windows NT Server

286

Rysunek 9.9. Wywietlenie waciwoci Version

Metody obiektu NewMail


Metody obiektu NewMail umoliwiaj podjcie odpowiednich dziaa zwizanych z tym obiektem. Metody te s omwione poniej, a ich podsumowanie przedstawia tabela 9.3. Tabela 9.3. Metody obiektu NewMail Metoda Przeznaczenie Send Wysya wiadomo e-mail. AttachFile Pozwala na zaczenie pliku do wysyanej wiadomoci. AttachURL Zacza pliki, ktre s czci wiadomoci HTML. SetLocaleIDs Okrela informacj o lokalizacji. Metoda Send Jak moge przekona si z treci tego rozdziau, metoda Send wykorzystywana jest do wysyania wiadomoci e-mail. Ma ona nastpujc skadni:
ObjMail.Send From, To, Subject, Body, Importance

musi by obiektem NewMail. Wszystkie parametry tej metody s fakultatywne. Jak widziae, kademu z parametrw odpowiada waciwo, dziki ktrej moesz okreli jego warto. Wobec tego kod:
ObjMail
<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") ObjMail.Send "bob@na.com", "tom@na.com", "Wiadomo testowa", _ "Tekst wiadomoci!", 2

287

ASP Kompendium
Set objMail = Nothing %>

programisty

jest funkcjonalnie tosamy z tym kodem:


<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "bob@na.com" objMail.From = "tom@na.com" objMail.Subject = "Wiadomo testowa" objMail.Body = "Tekst wiadomoci!" objMail.Importance = 2 objMail.Send Set objMail = Nothing %>

Moesz okreli kady z parametrw w metodzie lub we waciwociach. Jeli chcesz okreli warto waciwoci Importance w metodzie, a wszystkie inne parametry osobno jako waciwoci, wykorzystaj przecinki w celu zaznaczenia pustych pozycji, tak jak tutaj:
<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "bob@na.com" objMail.From = "tom@na.com" objMail.Subject = "Wiadomo testowa" objMail.Body = "Tekst wiadomoci!" objMail.Send , , , , 2 Set objMail = Nothing %>

Z wyjtkiem parametru To, wszystkie parametry tej metody uniewaniaj wartoci okrelone we waciwociach. Jeli uyta zostaa zarwno waciwo To, jak i parametr metody, wiadomo wysana zostanie pod adresy znajdujce si w obydwu miejscach. Metoda AttachFile Metoda AttachFile czy w sobie mechanizmy, ktre pozwol ci doczy pliki do wiadomoci e-mail. Metoda ta ma nastpujc skadni:
ObjMail.AttachFile FileLocation, FileName, EncodingType

musi by zatwierdzonym obiektem NewMail biblioteki CDONTS. Parametr FileLocation jest wymagany i okrela fizyczne pooenie pliku, natomiast parametr FileName jest dodatkowy. Jeli zosta podany, stanowi wywietlan w programie poczty nazw zacznika. Jeli nie wpiszesz tego parametru, wywietlana bdzie nazwa pliku. Parametr EncodingType rwnie nie jest obowizkowy, a uywa si go do zaznaczenia typu kodowania. Domylnie ustawion wartoci 0, co oznacza kodowanie UUEncode. Jeli ustawisz tutaj warto 1, wykorzystane zostanie kodowanie Base 64. Przykadowy kod przedstawiony poniej zacza do wiadomoci plik, ktremu nadano nazw Company Logo.
ObjMail

Rozdzia 9 Obiekt CDO dla Windows NT Server


<% Option Explicit Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail") objMail.To = "sue@na.com" objMail.From = "bob@na.com" objMail.Subject = "Twj plik" objMail.Body = "Doczono dany plik." objMail.AttachFile "e:\inetpub\logo.gif", "Company Logo" objMail.Send Set objMail = Nothing %>

288

Na wstpie uywamy instrukcji Option


Option Explicit

Explicit,

wymaganej podczas deklaracji zmiennych:

Nastpnie deklarowany jest obiekt NewMail i tworzona jest jego kopia:


Dim objMail Set objMail = Server.CreateObject("CDONTS.NewMail")

Ustawiane s waciwoci To i From:


objMail.To = "sue@na.com" objMail.From = "bob@na.com"

Nastpnie ustawiane s waciwoci Subject i Body:


objMail.Subject = "Twj plik" objMail.Body = "Doczono dany plik."

Uywamy metody AttachFile, aby doczy plik do wiadomoci. Pierwszy parametr to cieka fizyczna do zaczanego pliku. Drugi jest nazw, ktr przydzielamy plikowi:
objMail.AttachFile "e:\inetpub\logo.gif", "Company Logo"

Wiadomo jest wysyana i zasoby wykorzystywane przez obiekt s zwalniane:


objMail.Send Set objMail = Nothing

Wiadomo, ktr otrzymuje odbiorca pokazana jest na rysunku 9.10. Zwr uwag na nazw zaczonego pliku.

289

ASP Kompendium

programisty

Rysunek 9.10. E-mail z zacznikiem Metoda AttachURL Jeli wysyasz wiadomo HTML, moesz chcie wczy w jej tre grafiki lub inne pliki. Jednym ze sposobw na dokonanie tego jest okrelenie cieki do pliku w Internecie przy uyciu odpowiedniego znacznika, na przykad Image. Innym sposobem jest wczenie pliku wprost do samej wiadomoci. Robi si to poprzez metod AttachURL, ktra pozwala na dodanie pliku do wiadomoci tak, e staje si on czci treci HTML. Metoda ta ma nastpujc skadni:
ObjMail.AttachURL PathToFile, FileName, ContentBase, EncodingType

musi by wanym obiektem NewMail biblioteki CDONTS. Parametr PathToFile jest wymagany i okrela fizyczne pooenie pliku. Parametr FileName jest uyt w HTML nazw pliku i on rwnie jest w metodzie wymagany. Wpisanie ContentBase nie jest wymagane, a stanowi ono baz adresu URL dla zacznika. Podobnie nie musisz wpisywa wartoci dla EncodingType. Jego warto domylna wynosi 0, co oznacza kodowanie UUEncode. Moesz jednak wykorzysta kodowanie Base 64, ustawiajc dla tego parametru warto 1. Powiedzmy, e stworzye wiadomo, ktrej treci jest poniszy HTML:
ObjMail
TheMessage = "<HTML>" _ & "<HEAD>" _ & "<TITLE>Mamy wyprzeda</TITLE>" _ & "</HEAD>" _ & "<BODY>" _ & <img src=logo.gif> & "<H1><CENTER>Wszystko tasze o<STRIKE>30%</STRIKE> 50% !</CENTER></H1>" _ & "<HR>" _ & "<P>Stj wic! <A HREF=""http://www.na.com"">kliknij tutaj!</A></P>" _ & "</BODY>" _ & "</HTML>"

Zauwa, e HTML zawiera znacznik Image. Moesz wykorzysta metod AttachURL, aby zaczy t grafik do wiadomoci e-mail:

Rozdzia 9 Obiekt CDO dla Windows NT Server


ObjMail.AttachURL "e:\inetpub\logo.gif", "logo.gif"

290

Od tej pory grafika jest czci wiadomoci HTML. Metoda SetLocaleID Metoda SetLocaleID jest uywana do okrelenia odpowiednich formatw liczb, waluty, daty i innych, obowizujcych dla wiadomoci. Metoda ma nastpujc skadni:
ObjMail.SetLocaleID LocaleID

musi by obiektem typu NewMail. LocaleID jest liczb typu long i reprezentuje format wywietlania wiadomoci w zalenoci od lokalizacji.
ObjMail

Obiekt NewMail w dziaaniu


Jeli przeczytae ten rozdzia, to wpade ju zapewne sam na wiele zastosowa obiektu NewMail. Umiejtno uzupenienia twojej witryny WWW o wiadomoci e-mail moe podnie jej jako na wiele rnych sposobw. Wiele witryn WWW uywa obiektu NewMail w celu przenoszenia proby goci o udzielenie informacji. Narzdzie, ktrego ja uywam, prezentuje odwiedzajcym formularz, w ktry mog wpisa swj adres e-mail, imi i nazwisko, numer telefonu i inne dane oraz swoj wiadomo. Nastpnie narzdzie zachca goci do wybrania z listy tematu pasujcego do ich wiadomoci. Lista jest elementem formularza wyboru. Gociom wywietlana jest tekstowa lista tematw, ale adres e-mail dla danego tematu przesyany jest razem z formularzem. Tak wic inna osoba moe odpowiada za kady z tematw. E-mail moe by wysany rwnie do wielu osb, w tym wypadku ich adresy naley oddzieli od siebie rednikiem. Jeli wic element formularza nosiby nazw Topic, mgby ustawi wedug niego waciwo To:
ObjMail.To = Request.Form("Topic")

Czsto rwnie wykorzystuje si obiekt NewMail w celu wysania powiadomienia o wystpieniu okrelonego zdarzenia. Na przykad w witrynach handlowych konieczne jest zapamitanie w bazie danych informacji o zamwieniu, ale moe rwnie okaza si, e naley wysa wiadomo do osoby odpowiedzialnej za sklep, aby poinformowa j o koniecznoci przetworzenia zamwienia. Pewnie nie bdziesz chcia wysya poczt caego zamwienia, poniewa moe ono zawiera informacje zastrzeone, jak choby numery kart kredytowych. W rozdziale 7. przyjrzelimy si tworzeniu dokumentu Word przy uyciu kopii tego obiektu, wykorzystujc przy tym metod CreateObject obiektu Server. Dokument by tam generowany na bazie formularza w postaci listu wywietlanego nastpnie odwiedzajcemu. Mgby jednak zmodyfikowa ten kod w taki sposb, aby otrzymywa on dokument poczt elektroniczn. Pamitaj, e twoi gocie mog dysponowa rozmaitymi systemami, na ktrych zainstalowano rnego rodzaju narzdzia, tak wic wykorzystanie szerokiej gamy metod dla jednego zadania moe by w tym wzgldzie bardzo uyteczne. Zastanw si nad wykorzystywaniem wiadomoci HTML zamiast zwykego tekstu. Jest to o wiele lepsze, zwaszcza jeli chodzi o materiay reklamowe, a nie wymaga przecie duej pracy. Uyj jedynie prostego narzdzia HTML podczas projektowania strony. Nastpnie przegldnij rdo strony i skopiuj oraz wklej je do twojej strony ASP. Zamie je na cig i wpisz go do waciwoci Body. Ta prosta zmiana moe spowodowa, e twj e-mail bdzie si wyrnia spord wielu innych, ktre otrzyma odbiorca. Obiekt NewMail mona wykorzystywa rwnie do rozrywki, tworzc strony z kartkami pocztowymi lub kartami urodzinowymi. Te strony pozwalaj gociowi wysya wiadomoci do przyjaci lub kolegw. E-mail informuje odbiorc o tym, e otrzymali kart urodzinow, kartk pocztow lub jak inn, ktr mog odebra na twojej witrynie. Nastpnie klikaj cze znajdujce si w treci wiadomoci e-mail, ktre przenosi ich na twoj witryn. Tam widz wiadomo pozostawion przez pierwszego jej gocia. Technika ta nie tylko pozwala gociom powrci na witryn, ale rwnie wprowadza na ni nowych goci a wszystko, czego przy tym potrzebuje, to formularz dla pierwszego gocia, gdzie mgby wybra typ kartki i jej tekst. Nastpnie uy

291

ASP Kompendium

programisty

mona obiektu NewMail w celu wysania wiadomoci do odbiorcy kartki. Kiedy gocie powrc na witryn, ujrz stron ASP zawierajc informacje przekazane przez pierwszego przegldajcego. czc ze sob omwione do tej pory obiekty dysponujesz prawie nieograniczonymi moliwociami tworzenia aplikacji ASP.

Rozdzia 10. Skadniki ASP


Obiekty zwikszajce moliwoci stron ASP
Serwer IIS posiada rozmaite skadniki, ktre wspieraj proces tworzenia stron ASP. Jeden z nich, obiekt CDO, poznalimy w poprzednim rozdziale. Ale IIS wyposaono rwnie w zbir mniejszych skadnikw, z ktrych moesz skorzysta w kodzie podczas realizacji rnego rodzaju zada. W tym rozdziale skoncentrujemy si na tych pomniejszych skadnikach. Tabela 10.1. prezentuje te skadniki oraz to, gdzie mona je wykorzysta. Tabela 10.1. Skadniki ASP Skadnik Przeznaczenie Browser Dostarcza informacji o uywanej przez gocia przegldarce Capabilities oraz o jej moliwociach. Ad Rotator Dostarcza metod pozwalajcych na umieszczanie banerw w witrynie. Page Counter Pozwala na wywietlanie i ledzenie liczby goci strony. Counters Dostarcza mechanizmw pozwalajcych na zachowywanie liczby, ktra ma by inkrementowana poprzez aplikacj ASP. Content Linking Pozwala na stworzenie serii stron zorganizowanych na ksztat ksiki i zaspokaja wszystkie potrzeby zwizane z poruszaniem si po tych stronach. Content Rotator Pozwala na wczenie do strony lub do jej elementu zawartoci losowej. MyInfo Dostarcza obiektu wraz z licznymi waciwociami, ktrych moesz uy w celu zapamitania informacji o tobie i twojej firmie.

Skadnik Browser Capabilities


Skadnik Browser Capabilities dostarcza informacji o przegldarce gocia oraz o systemie, ktrym dysponuje. Poniej zaprezentowano proste wywoanie tego skadnika:
set BC = server.createobject("MSWC.BrowserType") Browser = BC.Browser & " " & BC.Version FramesSupport = BC.Frames Platform = BC. Platform

293

ASP Kompendium
Capabilities

programisty

Kopia skadnika Browser

jest tworzona przy uyciu metody CreateObject:

set BC = server.createobject("MSWC.BrowserType")

Wywoanie tworzy kopi klasy BrowserType serwera MSWC i wpisuje j do zmiennej obiektowej BC. Po wywoaniu w zmiennej Browser ustawiana jest nazwa i wersja przegldarki uywanej przez gocia:
Browser = BC.Browser & " " & BC.Version

W zmiennej FramesSupport ustawiana jest warto informujca o tym, czy przegldarka gocia obsuguje ramki:
FramesSupport = BC.Frames

Dodatkowo w zmiennej Platform zapisywana jest nazwa systemu operacyjnego gocia. Jest to realizowane przy uyciu waciwoci Platform obiektu Browser Capabilities:
Platform = BC.Platform

Skadnik Browser Capabilities dziaa w bardzo prosty sposb. Wyszukuje zmienn nagwka HTPP o nazwie User Agent, ktra zawiera kodowany w pewnym stopniu wiersz z informacjami o gociu. Wyszukana warto jest nastpnie wykorzystywana do poczenia w pliku .ini o nazwie browscap.ini, ktry jest plikiem tekstowym zawierajcym informacje konfiguracyjne dla wielu rozmaitych systemw operacyjnych i przegldarek. Plik browscap.ini musi znajdowa si w tym samym katalogu, co plik biblioteki skadnika browscap.dll. Jeli uywasz Internet Explorera w systemie Windows NT, zawarto twojej zmiennej User Agent moe wyglda tak:
Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)

Skadnik przeglda plik browscap.ini w poszukiwaniu takiego zapisu:


[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)*]

Poniej znajduje si nastpujca informacja o konfiguracji systemowej:


parent=IE 4.0 minorver=01 platform=WinNT

Zwr uwag na pierwszy wiersz okrelajcy przodka (parent). Informuje on o obecnoci w pliku browscap.ini pozycji o nazwie IE 4.0. Biblioteka uyje informacji zapisanych tutaj, a w przypadku braku ktrej z nich, uyje wartoci w przodku tego typu. W katalogu nadrzdnym zapisana zostanie konfiguracja dla tego jednego systemu:
browser=IE Version=4.0 majorver=#4 minorver=#0 frames=TRUE tables=TRUE cookies=TRUE backgroundsounds=TRUE

Rozdzia 10 Skadniki ASP


vbscript=TRUE javascript=TRUE javaapplets=TRUE ActiveXControls=TRUE Win16=False beta=False AK=False SK=False AOL=False crawler=False CDF=True

294

Jeli korzystae z przegldarki Netscape Navigator w systemie Windows 95, nagwek zwrci t warto:
Mozilla/4.0 * (Win95; U)

Skadnik Browser

Capabilities

bdzie szuka tej wartoci w pliku browscap.ini i znajdzie taki zapis:

parent=Netscape 4.0 platform=Win95

Zauwa, e w pozycji przodka znajduje si teraz nazwa Netscape 4.0. Skadnik poszuka tej wartoci dla innych waciwoci i znajdzie nastpujce pozycje:
browser=Netscape version=4.0 majorver=#4 minorver=#0 frames=TRUE tables=TRUE cookies=TRUE backgroundsounds=FALSE vbscript=FALSE javascript=TRUE javaapplets=TRUE ActiveXControls=FALSE beta=False

Moesz uy skadnika Browser Spjrz na ten przykadowy kod:


<% Option Explicit Dim BC

Capabilities

przy pisaniu kodu, ktry okrela moliwoci systemu gocia.

set BC = server.createobject("MSWC.BrowserType") Response.Write "Przegldarka: " & BC.Browser & " " & BC.Version & "<BR>" Response.Write "Platforma: " & BC.Platform & "<BR>" Response.Write "DHTML: " & BC.dhtml & "<BR>" Response.Write "Ramki: " & BC.frames & "<P>" Response.Write "Tabele: " & BC.tables & "<BR>" Response.Write "Cookies: " & BC.cookies & "<BR>"

295

ASP Kompendium
Response.Write "Dwiki ta: " & BC.backgroundsounds & "<BR>" Response.Write "VBScript: " & BC.vbscript & "<P>" Response.Write "JavaScript: " & BC.javascript & "<BR>" Response.Write "Dodatki Java: " & BC.javaapplets & "<BR>" Response.Write "Obiekty sterujce ActiveX: " & BC.activexcontrols & "<BR>" Response.Write "AOL: " & BC.AOL & "<P>" Response.Write "Beta: " & BC.Beta & "<BR>" Response.Write "CDF: " & BC.cdf %>

programisty

Na wstpie kod stwierdza, e deklarowane bd zmienne:


Option Explicit

Nastpnie tworzymy zmienn o nazwie BC:


Dim BC

W zmiennej BC tworzona jest kopia skadnika Browser


set BC = server.createobject("MSWC.BrowserType")

Capabilities:

Do przegldarki wpisywana jest nazwa i wersja przegldarki gocia:


Response.Write "Przegldarka: " & BC.Browser & " " & BC.Version & "<BR>"

Dalej do przegldarki wpisywana jest platforma, system operacyjny gocia:


Response.Write "Platforma: " & BC.Platform & "<BR>"

Teraz z kolei do przegldarki wpisywana jest informacja o tym, czy przegldarka obsuguje dynamiczny HTML. Moliwe dla tej waciwoci wartoci to prawda (True), fasz (False) oraz nieznany (Unknown):
Response.Write "DHTML: " & BC.dhtml & "<BR>"

Nastpny zapis odpowiada na pytanie, czy przegldarka wywietla ramki. Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "Ramki: " & BC.frames & "<P>"

Tutaj skadnik Browser True, False i Unknown:

Capabilities

informuje o tym, czy przegldarka wywietla tabele. Moliwe wartoci to

Response.Write "Tabele: " & BC.tables & "<BR>"

Czy przegldarka gocia obsuguje znaczniki cookie? Moliwe wartoci dla tej waciwoci to True, False i Unknown. Pamitaj, e przegldarka moe obsugiwa cookies, ale go moe dysponowa narzdziem blokujcym te znaczniki:
Response.Write "Cookies: " & BC.cookies & "<BR>"

Rozdzia 10 Skadniki ASP

296

Czy przegldarka potrafi odtwarza dwiki ta? Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "Dwiki ta: " & BC.backgroundsounds & "<BR>"

Czy przegldarka potrafi przetwarza VBScript po stronie klienta? Zwr uwag na to, e mwimy tutaj o stronie klienta, co nie ma nic wsplnego ze stronami ASP, ktre s przetwarzane przez twj serwer. Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "VBScript: " & BC.vbscript & "<P>"

To samo pytanie tyczy si JavaScriptu. Ponownie odnosimy si do moliwoci po stronie klienta. Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "JavaScript: " & BC.javascript & "<BR>"

Czy przegldarka obsuguje dodatki Javy? Odpowied na to pytanie zawarta jest we waciwoci JavaApplets skadnika Browser Capabilities:
Response.Write "Dodatki Javy: " & BC.javaapplets & "<BR>"

Czy przegldarka moe wsppracowa ze skadnikami ActiveX po stronie klienta? Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "Obiekty sterujce ActiveX: " & BC.activexcontrols & "<BR>"

Czy go uywa AOL? Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "AOL: " & BC.AOL & "<P>"

Czy przegldarka jest wersji beta? Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "Beta: " & BC.Beta & "<BR>"

I wreszcie, czy przegldarka obsuguje format CDF? Moliwe wartoci dla tej waciwoci to True, False i Unknown:
Response.Write "CDF: " & BC.cdf

Rysunek 10.1. przedstawia wyjcie tej strony w systemie Windows 98 uywajcym przegldarki Netscape Navigator 4.0.

297

ASP Kompendium

programisty

Rysunek 10.1. Wyjcie kodu wykorzystujcego skadnik Browser

Capabilities

Rysunek 10.2. Wyjcie kodu wykorzystujcego skadnik Browser

Capabilities

Rysunek 10.2 prezentuje wyjcie kodu w systemie Windows NT z uruchomionym Internet Explorerem 5.0. Najwaniejsz moliwoci wykorzystania tego kodu jest kierowanie goci do waciwej wersji twojej witryny WWW. Moe ona zawiera witryn optymalizowan dla Internet Explorera, drug dla Netscape Navigatora, trzeci dla WebTV i kolejn dla pozostaych typw przegldarek. Moesz to zrobi wykorzystujc kod taki jak ten:
<% Option Explicit

Rozdzia 10 Skadniki ASP


Dim BC set BC = server.createobject("MSWC.BrowserType") If BC.Browser = "IE" then Response.redirect "./IE/index.asp" ElseIf BC.Browser = "Netscape" then Response.redirect "./Netscape/index.asp" ElseIf BC.Browser = "WebTV" then Response.redirect "./WebTV/index.asp" Else Response.redirect "./other/index.asp" End If %>

298

Na wstpie wymagana jest deklaracja zmiennych:


Option Explicit

Tworzona jest zmienna o nazwie BC:


Dim BC

Zmienna wykorzystana jest do stworzenia kopii obiektu Browser


set BC = server.createobject("MSWC.BrowserType")

Capabilities:

Nastpnie zapytujemy waciwo Browser obiektu Browser Internet Explorer:


If BC.Browser = "IE" then

Capabilities,

czy uywana przegldarka to

Jeli tak, to go jest readresowany do podkatalogu zawierajcego strony dla tej przegldarki:
Response.redirect "./IE/index.asp"

W innym wypadku kod sprawdza, czy uywana przegldarka to Netscape Navigator:


ElseIf BC.Browser = "Netscape" then

Jeli to prawda, go odsyany jest do katalogu Netscape:


Response.redirect "./Netscape/index.asp"

Coraz bardziej popularn przegldark staje si WebTV. Jeli szerokie grono twych goci korzysta z tego narzdzia, stanowczo musisz dysponowa witryn w wersji odpowiadajcej ich potrzebom:
ElseIf BC.Browser = "WebTV" then

Jeli jest to ich typ przegldarki, s readresowani do podkatalogu WebTV:


Response.redirect "./WebTV/index.asp"

w przeciwnym razie goci odsya si do domylnego widoku twojej witryny:

299

ASP Kompendium
Response.redirect "./other/index.asp"

programisty

Kolejnym powodem do readresowania twoich goci do okrelonej wersji witryny s rnice w technologiach. Jeli martwisz si o to, czy starsze przegldarki bd mogy korzysta z twojej witryny, to metod na zrnicowanie wygldu twojej witryny jest sprawdzenie obsugi tabel i ramek. Zwr uwag na ten kod:
<% Option Explicit Dim BC set BC = server.createobject("MSWC.BrowserType") If BC.Tables = "True" and BC.Frames = "True" then Response.Redirect "./full/index.asp" ElseIf BC.Tables = "True" then Response.Redirect "./noframes/index.asp" Else Response.Redirect "./none/index.asp" End If %>

Jak zwykle wymagana jest deklaracja zmiennych:


Option Explicit

Tworzona jest zmienna BC:


Dim BC

i ustawiany jest w niej obiekt Browser

Capabilities:

set BC = server.createobject("MSWC.BrowserType")

Zaczynamy od pytania podstawowego. Czy przegldarka obsuguje tabele i ramki?


If BC.Tables = "True" and BC.Frames = "True" then

Jeli przegldarka obsuguje zarwno jedno, jak i drugie, go odsyany jest tutaj:
Response.Redirect "./full/index.asp"

Nastpnie cofamy si o jeden poziom w technologii. Ramki pojawiy si pniej ni tabele, usuwamy wic z rwnania pytanie o ramki i sprawdzamy, czy przegldarka obsuguje przynajmniej tabele:
ElseIf BC.Tables = "True" then

Jeli tak jest, wykorzystujemy metod Redirect obiektu Response w celu odesania goci do odpowiedniego miejsca:
Response.Redirect "./noframes/index.asp"

Rozdzia 10 Skadniki ASP

300

W innym wypadku przegldarka gocia nie obsuguje adnej z tych technologii i wtedy odsyamy go do podstawowej wersji naszej witryny:
Else Response.Redirect "./none/index.asp"

Pamitaj, e skadnik szuka pozycji User Agent w pliku .ini i dopasowuje j do wartoci zmiennej User Agent zwrconej przez nagwek HTPP. Plik .ini jest jedynie plikiem tekstowym zawierajcym zbir rnego rodzaju wydrukw, co oznacza, e jeli nie bdziesz si nim zajmowa plik szybko stanie si przestarzay. Faktycznie, jeli instalujesz nowy IIS, prawdopodobnie bdzie on dysponowa przestarza wersj pliku .ini. Jeli wic korzystasz z tego narzdzia, musisz dokada stara, aby plik by stale aktualny. Jednym z miejsc, w ktrych moesz otrzyma uaktualnienie jest cyScape, Inc. (http://www.cyscape.com/browscap). Firma czsto udostpnia now wersj pliku browscap.ini wraz z dodatkami i poprawkami. Moesz zgosi ch otrzymywania uaktualnienia przez e-mail, wtedy firma powiadamia ci o pojawieniu si nowych wersji pliku. cyScape dysponuje rwnie wasn wersj skadnika Browser Capabilities, ktra zawiera dodatkowe waciwoci, inne ni te omwione w biecym podrozdziale.

Modyfikacja pliku browser.ini


Moesz rwnie sam uaktualni plik. Pamitaj, e jest to tylko plik tekstowy, ktry musi mie okrelony format. Jeli chcesz go zmodyfikowa, najpierw stwrz sobie jego kopi zapasow. Wtedy moesz wykorzysta poniszy opis w celu modyfikacji poszczeglnych sekcji pliku. Komentarzem w pliku jest kady wiersz rozpoczynajcy si rednikiem:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Definicja mojej przegldarki ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Kada cz pliku zawiera albo nagwek User Agent, albo definicj przodka. Mgby na przykad zdefiniowa przegldark, ktrej nie byo na licie, a dla ktrej zwracany byby nastpujcy cig w User
[My Browser/1.2.2beta (Windows 95)]

Agent:

Zwr uwag na to, e definicja sekcji jest umieszczona w nawiasie kwadratowym. W nastpnej kolejnoci pojawiaj si waciwoci sekcji. Kontynuuj ich wypisywanie dopki nie pojawi si kolejny nagwek sekcji. Mgby zdefiniowa waciwoci twojej sekcji w nastpujcy sposb:
parent=MyBrowser 1.0 platform=Win95 beta=True

Zwr uwag na szczegln pozycj o nazwie parent (przodek), ktra informuje o tym, e gdzie w pliku .ini znajduje si pozycja MyBrowser 1.0. Przejd do tej pozycji i uyj wszystkich waciwoci o ile nie okreliem jakiej w tej sekcji. W nastpnej kolejnoci okrelona zostaa platforma oraz typ przegldarki, beta. Gdzie w pliku .ini musimy doda sekcj okrelajc przodka. Pasuje ona dokadnie do nazwy uytej tutaj, a wyglda nastpujco:
[MyBrowser 1.0] browser=MyBrowser version=1.0 majorver=#1 minorver=#0 frames=FALSE

301

ASP Kompendium
tables=TRUE cookies=TRUE backgroundsounds=FALSE vbscript=TRUE javascript=FALSE javaapplets= FALSE Platform=Windows95 beta=False

programisty

Zauwa, e niektre pozycje s powtrzone tutaj, w przodku. Te, ktrych uyto w rzeczywistej definicji uniewaniaj pozycje przodka, ktry po prostu zapamituje domylne wartoci nie zdefiniowane ponownie przez pozycj potomka.

Skadnik Ad Rotator
Skadnik Ad Rotator udostpnia narzdzi do zarzdzania paskami reklamowymi (banerami) pojawiajcymi si na stronie WWW. Skadnik bdzie losowo wywietla pasek na stronie ASP za kadym razem, kiedy kto uzyskuje do niej dostp. Skadnik uywa oddzielnego pliku harmonogramu, ktry stworzony jest w celu okrelenia czstoci wywietlania jednych banerw wzgldem drugich. Wywoanie skadnika Ad Rotator wyglda nastpujco:
set objAdRot = server.createobject("MSWC.AdRotator") Response.Write objAdRot.GetAdvertisement("./html/AdFiles/AdFile.txt)

Pierwszy wiersz tworzy kopi klasy AdRotator bdcej klas MSWC, umieszczajc j w zmiennej obiektowej o nazwie objAdRot:
set objAdRot = server.createobject("MSWC.AdRotator")

Nastpnie wywoywana jest metoda GetAdvertisement w celu wyszukania informacji o pasku reklamowym, ktry bdzie wywietlany. Zwracana warto wpisana zostaje do przegldarki przy uyciu metody Write obiektu Response:
Response.Write objAdRot.GetAdvertisement("./html/AdFiles/AdFile.txt)

A oto ta wpisywana do przegldarki warto:


<A HREF="http://www.netstats2000.com/nmaha/html/AdFiles/AdRedirect. asp? url= http://www.netstats2000.com/nmaha/html/AdFiles/HA.html &image= http://www.netstats2000.com/nmaha/html/AdFiles/ha.gif" > <IMG SRC=" http://www.netstats2000.com/nmaha/html/AdFiles/ha.gif" ALT="Get your organization online" WIDTH=468 HEIGHT=60 BORDER=0>

Metodzie GetAdvertisement przekazywany jest jeden parametr, cieka do pliku Schedule, zawierajcego list wywietlanych banerw oraz informacje o czstoci wywietlania kadego z nich. Plik Schedule zawiera rwnie dziaania, jakie naley podj w chwili, gdy go kliknie baner, a take rozmiar prezentowanego obrazka. Metoda GetAdvertisement sprawdza wszystkie wartoci pliku Schedule i wytwarza pokazane powyej wyjcie. Zawarto pliku Schedule w tym autentycznym przykadzie zaprezentowano tutaj:

Rozdzia 10 Skadniki ASP


Redirect http://www.netstats2000.com/nmaha/html/AdFiles/AdRedirect.asp width 468 height 60 border 0 * http://www.netstats2000.com/nmaha/html/AdFiles/ha.gif http://www.netstats2000.com/nmaha/html/AdFiles/HA.html Get your organization online 10 http://www.netstats2000.com/nmaha/html/AdFiles/sgianim.gif http://www.silkgraph.com Silkscreen Graphics Inc. 10 http://www.netstats2000.com/nmaha/html/AdFiles/forrent.gif mailto:mcecchi@ibm.net Space For Rent 10

302

Pierwsza sekcja pliku Schedule zawiera informacje konfiguracyjne. Pierwszy wiersz okrela ciek do strony, do ktrej gocie s odsyani po klikniciu paska reklamowego:
Redirect http://www.netstats2000.com/nmaha/html/AdFiles/AdRedirect.asp

Za pomoc zbioru QueryString stronie przekazywana jest nazwa kliknitego obrazka oraz adres, do ktrego naley po tej akcji przej. Drugi i trzeci wiersz pierwszej sekcji okrela szeroko i wysoko paska reklamowego:
width 468 height 60

Czwarty wiersz okrela jego obwdk:


border 0

Spjrz na poprzedni HTML wytworzony przez metod GetAdvertisement, a zobaczysz w nim informacje konfiguracyjne. Pojedyncza gwiazdka zakacza sekcj konfiguracyjn:
*

Dalej w pliku znajduje si lista banerw z ich harmonogramem. Pierwszy wiersz kadej pozycji banera jest ciek dostpu do niego:
http://www.netstats2000.com/nmaha/html/AdFiles/ha.gif

Potem pojawia si lokalizacja WWW, do ktrej ostatecznie gocie bd readresowani po klikniciu banera:
http://www.netstats2000.com/nmaha/html/AdFiles/HA.html

W trzecim wierszu znajduje si tekst etykietki:


Get your organization online

303

ASP Kompendium

programisty

Czwarty wiersz zawiera proporcjonaln liczb okrelajc czsto wywietlania jednego banera w stosunku do innych:
10

Wyjcie wytworzone przez t pozycj pliku obrotu banera pokazane jest na rysunku 10.3. Zwr uwag na baner znajdujcy si na szczycie tego rysunku. Jest on tworem pierwszej pozycji pliku obrotu, tak wic tekst etykiety zgadza si z tym, co pokazano na rysunku, a na pasku statusu wida adres URL, z ktrym czy si baner.

Rysunek 10.3. Pierwszy obrt paska reklamowego Jeli spojrzysz wstecz na cao pliku Schedule, zauwaysz, e opisana wyej struktura si powtarza. Nastpny punkt wywietli grafik:
http://www.netstats2000.com/nmaha/html/AdFiles/sgianim.gif

Jeli go kliknie t grafik, zostaje odesany do nastpujcego adresu URL:


http://www.silkgraph.com

Tekst etykietki dla grafiki:


Silkscreen Graphics Inc.

Relatywna liczba wywietle tej grafiki w porwnaniu z innymi jest taka:


10

Ta pozycja wywietli widok strony pokazany na rysunku 10.4. Zauwa, e grafika odpowiada treci pliku obrotu. Poza tym zwr uwag, e jest to ta sama strona, na ktrej prezentowany by poprzedni baner. Za kadym razem, gdy strona jest przegldana, pojawia si na niej inna grafika, mianowicie ta, ktra dawno nie bya wywietlana.

Rozdzia 10 Skadniki ASP

304

Rysunek 10.4. Drugie ogoszenie z pliku obrotu Ponadto kada strona miaa zaplanowan t sam proporcj wywietle, 10, ale tak by nie musi. Moesz dla jednej strony ustawi warto 20, a dla pozostaych dwch 10. Oznaczaoby to, e pierwsza strona ukazywaaby si dwa razy czciej ni dwie pozostae. Pamitaj, e pierwszy wiersz pliku Schedule okrela miejsce, do ktrego odsyani s gocie, gdy klikn pasek reklamowy:
Redirect http://www.netstats2000.com/nmaha/html/AdFiles/AdRedirect.asp width 468

Ta strona ASP normalnie nie zawiera wyjcia. Daje ci ona moliwo zapisywania klikni banera (clickthrough) w bazie danych w celu dalszej analizy. Poniej przedstawiono przykad takiego kodu.
<% set conn = server.createobject ("adodb.connection") conn.open "EmpDir", "sa", "yourpassword" conn.execute "insert into Referrals (ReferredTo) values ('" _ & Request.QueryString("url") & "')" response.redirect(Request.QueryString("url")) %>

Na pocztku kod czy si z baz danych:


set conn = server.createobject ("adodb.connection") conn.open "EmpDir", "sa", "yourpassword"

Nastpnie kod dodaje rekord do tabeli o nazwie Referrals, zawierajcy nazw banera kliknitego przez gocia:
conn.execute "insert into Referrals (ReferredTo) values ('" _ & Request.QueryString("url") & "')"

305

ASP Kompendium

programisty

W kocu gocie s readresowani do miejsca pooenia kliknitego banera w witrynie WWW:


response.redirect(Request.QueryString("url"))

Pomyl o innych polach, ktre chciaby zawrze w tej pozycji. Na przykad prawdopodobnie bdziesz chcia zapisywa dat i godzin kliknicia banera przez gocia. Moesz rwnie wykorzysta skadnik Browser Capabilities, omwiony we wczeniejszym podrozdziale, w celu zapisywania obszernych informacji na temat narzdzi gocia, ktry klikn pasek reklamowy. Z drugiej strony moe chciaby dysponowa stron, na ktrej reklamujcy si mogliby sprawdzi ile razy ich baner by kliknity. Tak stron prezentuje rysunek 10.5.

Rysunek 10.5. Przykadowa strona raportu klikni Domylnie strona aduje si wywietlajc dat w skali rocznej. Kiedy gocie klikn przycisk Wywietl raport, zobacz wynik ich zapytania pokazany na rysunku 10.6.

Rozdzia 10 Skadniki ASP

306

Rysunek 10.6. Wynik zapytania o ilo klikni Kod strony wyle zapytanie do bazy danych o oparciu o informacje przesane w formularzu. Kod strony rwnie musi wywietla informacje w skali rocznej. Gwny blok kodowy jest nastpujcy:
<% Option Explicit Dim conn Dim RSHits Dim TheMessage Dim StartDate Dim EndDate If Not IsEmpty(Request.Form("DisplayReport")) Then set conn = server.createobject ("adodb.connection") conn.open "EmpDir", "sa", "yourpassword" set RSHits = conn.Execute("select Count(ReferralID) as TheCount " _ & "from Referrals " _ & "where UserName = '" & Request.Form("UserName") & "' " _ & "and HitDate >= '" & Request.Form("StartDate") & "' " _ & "and HitDate <= '" & Request.Form("EndDate") & "' ") TheMessage = " W tym okresie zarejestrowano" _ & RSHits("TheCount") & " klikni." else TheMessage ="Wprowad nazw uytkownika oraz graniczne daty, dla" _ & "dla ktrego chcesz pozna liczb klikni." End If StartDate = "1/1/" & Year(Date) EndDate = Date %>

Na wstpie wykorzystujemy dyrektyw Option

Explicit:

307

ASP Kompendium
Option Explicit

programisty

Nastpne deklarujemy zmienn zapamitujc poczenie z baz danych:


Dim conn

Dalej deklarujemy zmienn przechowujc informacje z bazy danych:


Dim RSHits

Zmienna wiadomoci bdzie wywietlaa w przegldarce instrukcje lub wynik zapytania:


Dim TheMessage

Kolejne dwie zmienne bd przechowyway domyln dat pocztkow:


Dim StartDate

i dat kocow:
Dim EndDate

Strona ma dwa stany. W stanie pocztkowym strona wanie zostaa wywietlona i gocie musz ujrze instrukcje postpowania. W stanie przesyania gocie wysyaj formularz, a my musimy go przetworzy. Stan strony okrelamy sprawdzajc w zbiorze Form, czy przycisk wywietlajcy raport (DisplayReport) zosta nacinity.
If Not IsEmpty(Request.Form("DisplayReport")) Then

Jeli element zbioru formularza nie jest pusty, formularz zosta przesany. W tym wypadku musimy poczy si z baz danych, aby ustali liczb klikni. Tworzony jest obiekt Connection:
set conn = server.createobject ("adodb.connection")

ktry czy si z dan baz danych:


conn.open "EmpDir", "sa", "yourpassword"

Uruchamiane jest zapytanie, ktre zwraca liczb rekordw dla poszczeglnego uytkownika pomidzy wybranymi przez niego datami:
set RSHits = conn.Execute("select Count(ReferralID) as TheCount " _ & "from Referrals " _ & "where UserName = '" & Request.Form("UserName") & "' " _ & "and HitDate >= '" & Request.Form("StartDate") & "' " _ & "and HitDate <= '" & Request.Form("EndDate") & "' ")

Nastpnie do zmiennej wpisywany jest wywietlany gociom tekst, ktry zawiera wyszukane w bazie danych informacje o klikniciach:
TheMessage = " W tym okresie zarejestrowano" _ & RSHits("TheCount") & " klikni."

Rozdzia 10 Skadniki ASP

308

Jeli formularz nie zosta przesany, w zmiennej wiadomoci ustawiana jest instrukcja postpowania:
else TheMessage ="Wprowad nazw uytkownika oraz graniczne daty, dla" _ & "dla ktrego chcesz pozna liczb klikni."

W kadym z przypadkw musimy utworzy zmienne StartDate i EndDate. Jako dat pocztkow ustawiamy pierwszy dzie biecego roku:
StartDate = "1/1/" & Year(Date)

a jako dat kocow biec dat systemu:


EndDate = Date

Nastpnie uywamy wbudowanej w HTML metody Write obiektu Response w celu wysania zmiennej wiadomoci do przegldarki:
<P><B><% Response.Write TheMessage %></B>

Warto daty pocztkowej wpisywana jest w pole tekstowe StartDate:


<INPUT TYPE=TEXT NAME="StartDate" VALUE="<% Response.Write StartDate %>" SIZE=40 MAXLENGHT=50>

Nastpnie ustalamy domyln dat kocow w parametrze wartoci:


<INPUT TYPE=TEXT NAME="EndDate" VALUE="<% Response.Write EndDate %>" SIZE=40 MAXLENGHT=50>

Skadnik Page Counter


Skadnik Page Counter pozwala w prosty sposb ledzi i wywietla liczb trafnych wywoa strony WWW. Ten skadnik nie jest instalowany domylnie wraz z serwerem IIS. Jest on czci zestawu IIS Resource Kit, ktry moesz znale na witrynie Microsoftu lub, jeli zamawiasz Microsoft Technet, znajduje si na CDROM-ie. Skadnik moesz zainstalowa kopiujc plik z pyty CD-ROM pooony w \IIS Resource Kit\Component\Page Counter\DLL\i386\PageCnt.dll, a nastpnie umieszczajc go w twoim katalogu WinNT\System32. Wtedy moesz zarejestrowa skadnik przy uyciu polecenia Uruchom (Run) z menu Start, wprowadzajc tekst Regsvr32 PageCnt.dll. Powiniene ujrze wiadomo o pomylnym zarejestrowaniu skadnika, ktr zaprezentowano na rysunku 10.7. Po zarejestrowaniu biblioteki moesz zacz korzysta ze skadnika w kodzie. Skadnik tworzy si podobnie jak inne skadniki, to znaczy przy uyciu metody CreateObject obiektu Server.

Rysunek 10.7. Pomylna rejestracja skadnika Page

Counter

309

ASP Kompendium

programisty

Dokumentacja Microsoftu prezentuje dwa sposoby tworzenia obiektu. Odkryem, e jeden z nich nie dziaa, ale przyjrzyjmy si obydwu sposobom na wypadek, gdyby przysze wersje uyway innych niefunkcjonalnych skadni. Ponisza deklaracja aktualnie nie dziaa:
Set MyPageCounter = Server.CreateObject("MSWC.PageCounter")

Zmienna MyPageCounter zawiera kopi skadnika Page skadnika uywa innego cigu aplikacji i klasy:

Counter.

Druga skadnia do tworzenia kopii tego

Set MyPageCounter = Server.CreateObject("IISSample.PageCounter")

Tu rwnie zmienna MyPageCounter jest obiektem klasy Page Counter. Biblioteka .dll tworzy wewntrzny plik tekstowy i zapamituje, ile razy strona bya przegldana. Skadnik okresowo wrzuca te informacje do pliku tekstowego, tak wic dane zostan zachowane nawet gdy serwer zostanie wyczony. Kiedy skadnik jest inicjowany, aduje wartoci trafnych wywoa rnych stron. Aby zapisa wywoanie na stronie musisz uy metody PageHit skadnika Page Counter:
<% Option Explicit Dim MyPageCounter Set MyPageCounter = Server.CreateObject("IISSample.PageCounter") MyPageCounter.PageHit %>

Najpierw instrukcja Option


Option Explicit

Explicit:

Nastpnie tworzona jest zmienna przechowujca obiekt Page


Dim MyPageCounter

Counter:

W zmienn wpisywany jest skadnik Page

Counter:

Set MyPageCounter = Server.CreateObject("IISSample.PageCounter")

Metoda PageHit obiektu Page


MyPageCounter.PageHit

Counter

uywana jest do inkrementacji liczby dla okrelonej strony:

tak wic stan licznika dla tej strony wewntrznie zwikszany jest o jeden. Skadnik zapamituje nazw strony i jej pooenie wraz z wartoci zapewniajc stronie niepowtarzalno. Licznik stron nie byby wiele wart, jeli nie mgby wywietla jego zawartoci. W tym celu skadnik zawiera metod Hits. Metoda ta ma nastpujc skadni:
TheCount = MyPageCounter.Hits(OptPageName)

Zmienna MyPageCounter musi zatwierdzonym obiektem Page Counter. Zwracan wartoci polecenia jest liczba trafnych wywoa strony, ktra znajdzie si w zmiennej TheCount. Metoda pobiera jeden nieobowizkowy parametr nazw i wirtualn ciek do strony, ktrej ilo wywoa chcemy pozna. Jeli nie podasz tego parametru, metoda zwrci ilo wywoa biecej strony.

Rozdzia 10 Skadniki ASP

310

Spjrzmy na przykadow witryn, ktra korzysta z tego skadnika. Na pocztku strona powitania, ktr pokazano na rysunku 10.8.

Rysunek 10.8. Strona powitania przykadowej witryny Strona powitania zapamituje liczb swoich wywoa, ale informacji tej nie wywietla. Nastpna strona przykadowej witryny rwnie zapamituje liczb swoich wywoa, a ponadto wywietla informacje o wywoaniach obydwu stron witryny. Ta strona pokazana jest na rysunku 10.9. Zauwa, e wywietlane informacje faktycznie dotycz obu stron.

Rysunek 10.9. Strona wywietlajca informacje o iloci wywoa Kod strony powitania inkrementuje licznik wywoa dla tej strony. Blok kodowy jest taki:

311

ASP Kompendium
<% Option Explicit Dim MyPageCounter Set MyPageCounter = Server.CreateObject("IISSample.PageCounter") MyPageCounter.PageHit %>

programisty

Po pierwsze informujemy kompilator o tym, e deklarowane bd zmienne:


Option Explicit

Nastpnie deklarujemy zmienn licznika stron:


Dim MyPageCounter

i tworzymy jej kopi:


Set MyPageCounter = Server.CreateObject("IISSample.PageCounter")

Licznik strony powitania jest inkrementowany:


MyPageCounter.PageHit

Kod strony informacyjnej inkrementuje licznik tej strony, a nastpnie wywietla informacje o trafnych wywoaniach obu stron. Gwny blok kodowy wyglda nastpujco:
<% Option Explicit Dim MyPageCounter Dim CompInfoCount Dim WelcomeCount Set MyPageCounter = Server.CreateObject("IISSample.PageCounter") MyPageCounter.PageHit If MyPageCounter.Hits = 1 Then CompInfoCount = "1 raz" else CompInfoCount = MyPageCounter.Hits & " razy" End If If MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") = 1 Then WelcomeCount = "1 raz" else WelcomeCount = MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") _ & " razy" End If %>

Pierwszy wiersz kodu to instrukcja Option


Option Explicit

Explicit:

Rozdzia 10 Skadniki ASP

312

Nastpnie deklarowana jest zmienna obiektu licznika stron:


Dim MyPageCounter

Tworzona jest zmienna, ktra bdzie przechowywaa liczb wywoa strony informacyjnej:
Dim CompInfoCount

Ta zmienna bdzie zapamitywaa liczb wywoa strony powitania:


Dim WelcomeCount

Nastpnie tworzona jest kopia obiektu licznika stron:


Set MyPageCounter = Server.CreateObject("IISSample.PageCounter")

Metoda PageHit uywana jest do inkrementacji liczby wywoa tej strony:


MyPageCounter.PageHit

Nastpnie musimy stworzy wiadomoci tekstowe, informujce o iloci wywoa obu stron. Metoda Hits obiektu Page Counter wyszukuje t warto. Najpierw jednak patrzymy na ilo wywoa tej strony:
If MyPageCounter.Hits = 1 Then

Kod tego bloku If nadaje odpowiedni form gramatyczn sowu raz:


CompInfoCount = "1 raz"

Zauwa, e uywamy metody Hits bez parametru, poniewa na razie zajmujemy si iloci wywoa biecej strony:
else CompInfoCount = MyPageCounter.Hits & " razy" End If

Dalej te same czynnoci s realizowane dla strony powitania. Zauwa, e teraz metoda Hits zawiera parametr, wirtualn ciek do strony, ktrej ilo wywoa chcemy pozna:
If MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") = 1 Then WelcomeCount = "1 raz" else WelcomeCount = MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") _ & " razy" End If

Nastpnie w HTML-u wypisywana jest informacja o wywoaniach wsplnie z dwoma cigami:


<P>Ta strona bya przegldana <% response.write CompInfoCount %>. <BR>Strona powitania bya przegldana <% response.write WelcomeCount %>.

313

ASP Kompendium

programisty

Skadnik Page Counter ma jeszcze jedn metod, Reset, ktra wpisuje do licznika strony ponownie warto zero. Metoda ma nastpujc skadni:
MyPageCounter.Reset OptPage

Zmienna MyPageCounter musi by zatwierdzonym obiektem Page Counter. Metoda posiada jeden nieobowizkowy parametr. Okrela on wirtualn ciek do strony, ktrej licznik chcesz wyzerowa. Jeli nie podasz tego parametru, wyzerowany zostanie licznik strony biecej. Uzupenijmy nasz przykadow witryn o t metod, dodajc do niej stron raportu wyszczeglniajc ilo wywoa kadej ze stron i pozwalajc gociowi na kasowanie licznikw. Tak stron pokazano na rysunku 10.10. Zawiera ona w pierwszej kolumnie nazwy wszystkich stron, a dalej ilo ich wywoa i cza pozwalajce na wyzerowanie licznika kadej ze stron. Kliknicie cza spowoduje wpis do licznika wartoci 0, a strona zostanie ponownie wywietlona. Jeli na przykad klikniesz cze Wyczy dla strony informacyjnej, jej licznik zostanie skasowany, jak to pokazano na rysunku 10.11. Kod strony raportu musi doda jeden do iloci swoich wywoa, skasowa licznik danej strony i ponownie wywietli ilo wywoa dla kadej strony. Gwny blok kodowy jest taki:
<% Option Explicit Dim MyPageCounter Dim CompInfoCount Dim WelcomeCount Dim HitReportCount Set MyPageCounter = Server.CreateObject("IISSample.PageCounter") MyPageCounter.PageHit If not isempty(Request.QueryString("ClearPage")) Then If Request.QueryString("ClearPage") = "Welcome" Then MyPageCounter.Reset("/aspbook/c10/pc/html/welcome.asp") ElseIf Request.QueryString("ClearPage") = "CI" Then MyPageCounter.Reset("/aspbook/c10/pc/html/company_info.asp") ElseIf Request.QueryString("ClearPage") = "Report" Then MyPageCounter.Reset End If End If If MyPageCounter.Hits("/aspbook/c10/pc/html/company_info.asp") = 1 Then CompInfoCount = "1 raz" else CompInfoCount = MyPageCounter.Hits("/aspbook/c10/pc/html/company_info.asp") & " razy" End If If MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") = 1 Then WelcomeCount = "1 raz" else WelcomeCount = MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") & " razy" End If If MyPageCounter.Hits = 1 Then HitReportCount = "1 raz" else HitReportCount = MyPageCounter.Hits & " razy" End If %>

Rozdzia 10 Skadniki ASP

314

Rysunek 10.10. Strona raportu wywoa

Rysunek 10.11. Strona raportu po wyzerowaniu licznika Na wstpie pojawia si instrukcja Option
Option Explicit

Explicit:

Nastpnie tworzona jest zmienna dla obiektu Page


Dim MyPageCounter

Counter:

Potrzebujemy rwnie zmiennych do zapamitania iloci wywoa kadej ze stron:

315

ASP Kompendium
Dim CompInfoCount Dim WelcomeCount Dim HitReportCount

programisty

Tworzona jest kopia obiektu Page

Counter:

Set MyPageCounter = Server.CreateObject("IISSample.PageCounter")

Zapisywane jest wywoanie strony raportu:


MyPageCounter.PageHit

Nastpnie kod sprawdza, czy ktry licznik powinien by wyzerowany. cza suce do kasowania licznikw przekazuj nazw strony poprzez pole ClearPage za pomoc zbioru QueryString (bdziesz si mg o tym przekona nieco pniej). Jeli wic pole to nie jest puste, naley skasowa licznik strony:
If not isempty(Request.QueryString("ClearPage")) Then

Jeli wartoci pola bdzie cig Welcome, musi by skasowany licznik strony powitania:
If Request.QueryString("ClearPage") = "Welcome" Then

Zauwa, e metoda Reset musi przekaza parametr okrelajcy wirtualn ciek strony, ktrej licznik jest kasowany, poniewa metoda ta odnosi si do strony innej ni bieca:
MyPageCounter.Reset("/aspbook/c10/pc/html/welcome.asp")

Podobne sprawdzenie i akcja realizowane s dla strony informacyjnej:


ElseIf Request.QueryString("ClearPage") = "CI" Then MyPageCounter.Reset("/aspbook/c10/pc/html/company_info.asp")

Zwr uwag na to, e metoda Reset, odnoszca si do strony raportu, nie posiada parametru. Jest to spowodowane tym, e kasujemy ilo wywoa strony biecej, tak wic parametr nie jest potrzebny:
ElseIf Request.QueryString("ClearPage") = "Report" Then MyPageCounter.Reset

Nastpnie kod przygotowuje odpowiedni tekst informacji o wywoaniach strony informacyjnej:


If MyPageCounter.Hits("/aspbook/c10/pc/html/company_info.asp") = 1 Then CompInfoCount = "1 raz" else CompInfoCount = MyPageCounter.Hits("/aspbook/c10/pc/html/company_info.asp") & " razy" End If

To samo robione jest dla strony powitania:


If MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") = 1 Then WelcomeCount = "1 raz" else

Rozdzia 10 Skadniki ASP


WelcomeCount = MyPageCounter.Hits("/aspbook/c10/pc/html/welcome.asp") & " razy" End If

316

jak rwnie dla strony raportu:


If MyPageCounter.Hits = 1 Then HitReportCount = "1 raz" else HitReportCount = MyPageCounter.Hits & " razy" End If

Tabela HTML musi by wypeniona waciwym tekstem dla kadej strony.


<TD WIDTH=164><P>Strona powitania</TD> <TD WIDTH=164><P><% response.write WelcomeCount %></TD> <TD WIDTH=164><P><A HREF="./hitreport.asp?ClearPage=Welcome"> <B>Wyczy</B></A></TD> <TD WIDTH=164><P>Strona informacyjna</TD> <TD WIDTH=164><P><% response.write CompInfoCount %></TD> <TD WIDTH=164><P><A HREF="./hitreport.asp?ClearPage=CI"> <B>Wyczy</B></A></TD> <TD WIDTH=164><P>Strona raportu wywoa</TD> <TD WIDTH=164><P><% response.write HitReportCount %></TD> <TD WIDTH=164><P><A HREF="./hitreport.asp?ClearPage=Report"> <B>Wyczy</B></A></TD>

Zauwa, e pierwsza komrka tabeli HTML zawiera jedynie nazw strony:


<TD WIDTH=164><P>Strona powitania</TD>

Nastpnie do przegldarki wpisywana jest informacja o trafnych wywoaniach:


<TD WIDTH=164><P><% response.write WelcomeCount %></TD>

Zwr rwnie uwag, e cze kasowania licznika odnosi si do tej samej strony. Ponadto poprzez zbir QueryString przekazywana jest wraz z czem nazwa tej strony, ktrej licznik naley wyzerowa:
<TD WIDTH=164><P><A HREF="./hitreport.asp?ClearPage=Welcome"> <B>Wyczy</B></A></TD>

Skadnik Counters
Skadnik Counters stanowi prosty interfejs do przechowywania liczb cakowitych, ktre moesz odczytywa, zapisywa, usuwa i inkrementowa we wszystkich stronach twojej witryny, a nawet w granicach aplikacji ASP. Tak jak to byo w wypadku ostatniego skadnika, rwnie ten jest czci zestawu IIS Resource Kit. Oto jego lokalizacja: \IIS Resource Kit\Component\Counters\DLL\i386\counters.dll Umie plik w twoim katalogu WinNT\System32, a nastpnie zarejestruj skadnik przy uyciu polecenia Uruchom (Run) z menu Start, wprowadzajc zapis Regsvr32 counters.dll. Po pomylnym zarejestrowaniu skadnika, moesz zacz z niego korzysta. Skadni do tworzenia skadnika Counters przedstawiono poniej:

317

ASP Kompendium
set MyCounter = Server.CreateObject("MSWC.Counters")

programisty

Kopia skadnika Counters tworzona jest przy uyciu metody CreateObject obiektu Server. Metodzie przekazuje si cig zawierajcy aplikacj i klas MSWC.Counters. Obiekt klasy Counters jest zwracany w zmiennej MyCounter. Skadnik Counters przechowuje wartoci licznikw w pliku tekstowym pooonym w tym samym miejscu, co plik biblioteki. Wartoci te dostpne s w kadej stronie twojej witryny WWW, nawet jeli witryna umiejscowiona jest w innej aplikacji ASP. Takie zmienne maj zasig przekraczajcy zasig wszystkich innych omwionych do tej pory. Zwrcilimy ju uwag na zmienne obiektu Session, ktre s dostpne dla wszystkich stron aplikacji ASP, lecz w czasie trwania okrelonej sesji. Przyjrzelimy si rwnie zmiennym obiektu Application osigalnym dla wszystkich stron i w czasie trwania wszystkich sesji, ale w obrbie jednej aplikacji ASP. Natomiast zmienne licznika przekraczaj te ograniczenia, poniewa s dostpne dla wszystkich stron bez wzgldu na to, do ktrej aplikacji ASP nale. Licznik tworzy si wyszukujc jego wartoci lub je ustawiajc. Wyszukiwanie wartoci licznika realizuje si przy uyciu metody Get skadnika Counters:
TheValue = MyCounter.Get(NameOfCounter)

Zmienna MyCounter musi by kopi zmiennej skadnika Counters. Metoda Get pobiera jeden parametr, ktrym jest nazwa licznika. Metoda zwraca aktualn warto licznika i umieszcza j w zmiennej TheValue. Jeli licznik o podanej nazwie nie istnieje, zostaje utworzony i zwracana jest warto 0. W tym przykadzie:
<% Option Explicit Dim MyCounter set MyCounter = Server.CreateObject("MSWC.Counters") Response.Write MyCounter.Get("Product10Views") %>

w przegldarce wywietlona zostanie warto licznika Product10Views. Jeli taki licznik nie istnieje, zostaje utworzony, a w przegldarce wywietlana jest liczba 0. Aby wpisa do licznika jak okrelon warto, moesz wykorzysta metod Set. Ustawia ona w liczniku wskazan przez ciebie warto, a jeli licznik o podanej nazwie nie istnieje, skadnik tworzy nowy licznik. Metoda ma nastpujc warto:
MyCounter.Set NameOfCounter, ValueOfCounter

Zmienna MyCounter musi by wanym obiektem Counters. Metodzie Set przekazywane s dwa parametry: pierwszy jest nazw licznika, ktrego warto chcemy ustawi, drugi jest t wanie wartoci. Na przykad:
<% Option Explicit Dim MyCounter set MyCounter = Server.CreateObject("MSWC.Counters") MyCounter.Set "AllPageViews", 123 %>

Ten kod wpisze warto 123 do licznika o nazwie AllPageViews. Jeli taki licznik nie istnieje, zostaje utworzony i wpisywana jest do niego dana warto.

Rozdzia 10 Skadniki ASP

318

Kolejn metod skadnika jest metoda Increment, ktra zwiksza warto licznika o jeden. Metoda ma nastpujc skadni:
MyCounter.Increment NameOfCounter

Zmienna MyCounter musi by zatwierdzon kopi skadnika Counters. NameOfCounter jest nazw inkrementowanego licznika. Zwr uwag na ten przykad:
<% Option Explicit Dim MyCounter set MyCounter = Server.CreateObject("MSWC.Counters") MyCounter.Increment "AllPageViews" %>

Tutaj stan licznika AllPageViews jest zwikszany o jeden, jeli wic jego warto wynosia wczeniej 123, teraz bdzie to 124. Skadnik Counters ma jeszcze jedn metod, Remove, ktra usuwa licznik z pliku licznikw. Jeli po uyciu tej metody nastpuje odwoanie do usunitego licznika, jest on tworzony na nowo, a jego warto wynosi 0 (jeli licznik jest tworzony przy uyciu metody Set). Metoda ma nastpujc skadni:
MyCounter.Remove NameOfCounter

Zmienna MyCounter musi by zatwierdzon kopi skadnika Counters. Metoda pobiera jeden parametr nazw usuwanego licznika. Na przykad:
<% Option Explicit Dim MyCounter set MyCounter = Server.CreateObject("MSWC.Counters") MyCounter.Remove "AllPageViews" %>

W tym kodzie licznik AllPageViews jest usuwany z pamici. Jeli usunity licznik jest nastpnie wywoywany przy uyciu metody Set lub Get, jest tworzony ponownie. W nastpnym bloku kodu uyto wszystkich omwionych metod, aby zademonstrowa dziaanie skadnika.
<% Option Explicit Dim MyCounter set MyCounter = Server.CreateObject("MSWC.Counters") Response.Write "<B>Teraz tworzony jest nowy licznik.<P>" Response.Write "Jego warto wynosi: " Response.Write MyCounter.Get("Counter1") & "<P>" MyCounter.Set "Counter1", 33 Response.Write "Teraz wpisana zostaa do niego warto: " Response.Write MyCounter.Get("Counter1") & "<P>" MyCounter.Increment "Counter1" Response.Write "Licznik zosta inkrementowany: "

319

ASP Kompendium
Response.Write MyCounter.Get("Counter1") & "<P>" MyCounter.Remove "Counter1" Response.Write " Licznik zosta usunity. " & "<P>" MyCounter.Set "Counter2", 250 Response.Write "Ustawiona zostaa warto nowego licznika : " Response.Write MyCounter.Get("Counter2") & "<P>" %>

programisty

Na pocztku umieszczamy instrukcj Option


Option Explicit

Explicit:

Tworzona jest zmienna przechowujca obiekt Counters:


Dim MyCounter

Tworzona jest kopia zmiennej:


set MyCounter = Server.CreateObject("MSWC.Counters")

Poprzez wywoanie metody Get tworzony jest licznik i wywietlana jest jego pocztkowa warto:
Response.Write "<B>Teraz tworzony jest nowy licznik.<P>" Response.Write "Jego warto wynosi: " Response.Write MyCounter.Get("Counter1") & "<P>"

W ten sam licznik wpisywana jest liczba 33:


MyCounter.Set "Counter1", 33

ktra nastpnie wywietlana jest w przegldarce przy uyciu metody Get:


Response.Write "Teraz wpisana zostaa do niego warto: " Response.Write MyCounter.Get("Counter1") & "<P>"

Licznik Counter1 jest inkrementowany:


MyCounter.Increment "Counter1"

Warto licznika ponownie jest wywietlana w przegldarce:


Response.Write "Licznik zosta inkrementowany: " Response.Write MyCounter.Get("Counter1") & "<P>"

Wykorzystana zostaje metoda Remove w celu usunicia licznika Counter1:


MyCounter.Remove "Counter1" Response.Write " Licznik zosta usunity. " & "<P>"

Nastpnie tworzony jest drugi licznik, ktry bdzie wywietlany w kolejnej stronie, znajdujcej si w obrbie innej aplikacji ASP:

Rozdzia 10 Skadniki ASP


MyCounter.Set "Counter2", 250

320

a warto tego licznika prezentowana jest tutaj:


Response.Write "Ustawiona zostaa warto nowego licznika : " Response.Write MyCounter.Get("Counter2") & "<P>"

Wyjcie strony przedstawia rysunek 10.12.

Rysunek 10.12. Wyjcie kodu licznika Pamitaj, e liczniki maj zasig przekraczajcy zakres jednej aplikacji ASP, tak wic w kolejnej stronie nalecej do innej aplikacji ASP moemy odwoywa si do licznika stworzonego w tym kodzie:
<% Option Explicit Dim MyCounter set MyCounter = Server.CreateObject("MSWC.Counters") Response.Write "<B>Ta strona wyszukuje warto drugiego licznika " Response.Write "stworzonego w innej aplikacji ASP. " Response.Write "<P>Jego warto: " Response.Write MyCounter.Get("Counter2") & ".<P>" %>

Na wstpie pojawia si instrukcja Option


Option Explicit

Explicit:

Nastpnie tworzona jest zmienna licznika:


Dim MyCounter

321

ASP Kompendium

programisty

i jej kopia:
set MyCounter = Server.CreateObject("MSWC.Counters")

Warto licznika utworzonego w innej stronie, wyszukana poprzez metod Get, jest wpisywana do przegldarki:
Response.Write "<B>Ta strona wyszukuje warto drugiego licznika " Response.Write "stworzonego w innej aplikacji ASP. " Response.Write "<P>Jego warto: " Response.Write MyCounter.Get("Counter2") & ".<P>"

Wyjcie tej strony, bdcej czci innej aplikacji ASP, pokazane zostao na rysunku 10.13.

Rysunek 10.13. Wyjcie drugiej pokazowej strony licznika

Skadnik Content Linking


Skadnik Content Linking pozwala na poczenie stron w taki sposb, aby mogy by przegldane w seriach, sekwencyjnie. Przykadowo ksika skada si ze stron uoonych sekwencyjnie, a plik pomocy skada si z serii stron. Jeli masz taki scenariusz, to czsto bdziesz chcia dysponowa czami, ktre dynamicznie przenosiyby goci do strony nastpnej lub z powrotem, do poprzedniej. By moe bdziesz chcia rwnie mie tabel zawartoci dla serii stron. Skadnik Content Linking czy w sobie metody umoliwiajce realizacj takich funkcji. Skadnik jest czci standardowej instalacji IIS. Jego plik biblioteki nosi nazw nextlink.dll. Podstaw dziaania skadnika jest plik tekstowy zawierajcy informacje o wszystkich stronach, ktre chcesz poczy oraz o kolejnoci, w jakiej te strony maj by poczone. W tym specjalnym pliku tekstowym podajesz nie tylko nazw strony, ale rwnie jej adres URL. Plik nie musi nosi jakiej okrelonej, specjalnej nazwy musi by jedynie dostpny w strukturze katalogu tej witryny WWW, w ktrej bdzie wykorzystany. Kady wiersz pliku tekstowego ma nastpujc struktur:
PageURL Description Comment

Rozdzia 10 Skadniki ASP

322

Kade pole oddzielone jest od siebie znakiem tabulacji, a kada pozycja musi umieszczona w osobnym wierszu tekstowego pliku indeksu. Pierwsze pole kadego wiersza przechowuje adres URL danej strony. Drugie pole jest nazw lub opisem strony. Trzecie, ktre nie jest wymagane, moe zawiera dowolny komentarz, ktry po prostu jest ignorowany przez skadnik. Spjrz na ten przykadowy plik indeksu:
TOC.asp Page1.asp Page2.asp Table of Contents Page Page 1 of Chapter 1 Page 2 of Chapter 1

Zauwa, e adres URL i opis s od siebie oddzielone znakiem tabulacji. Ponadto zwr uwag na kolejno pozycji. Jest to wane, poniewa metody nawigacyjne uywaj tej kolejnoci w celu okrelenia, ktra strona jest nastpna, a ktra poprzednia. Stwierdziem, e najlepszym miejscem na zapisanie tego pliku jest katalog, w ktrym umieszczone s uywajce go strony. Dziki temu prostsze staje si uywanie metod, poniewa ciek dostpu do strony mona przestawi za pomoc samej jej nazwy. W twoim kodzie moesz stworzy kopi skadnika Content Linking, ktry bdzie uywa tego pliku tekstowego w celu okrelenia koniecznych do podjcia dziaa. Aby stworzy kopi skadnika Content Linking, naley uy takiego kodu:
Set MyCL = Server.CreateObject("MSWC.NextLink")

Jak to byo w wypadku innych skadnikw, do tworzenia kopii Content Linking uywamy metody CreateObject obiektu Server. Tutaj kopia zostanie umieszczona w zmiennej obiektowej MyCL. Od tej chwili moesz uywa pliku tekstowego wraz z ze stworzonym obiektem do zaspokajania potrzeb nawigacyjnych tego typu aplikacji. Skadnik posiada osiem metod, ktre omwiono poniej i sumarycznie przedstawiono w tabeli 10.2. Tabela 10.2. Metody skadnika Content Linking Metoda Dziaanie GetListCount Zwraca liczb pozycji pliku indeksu. GetListIndex Zwraca numer pozycji biecej strony w pliku indeksu. GetNextURL Zwraca adres URL strony nastpnej wzgldem strony biecej. GetNextDescription Zwraca opis strony nastpnej wzgldem strony biecej. GetPreviousURL Zwraca URL strony poprzedniej wzgldem strony biecej. GetPreviousDescription Zwraca opis strony poprzedniej wzgldem strony biecej. GetNthURL Zwraca URL pozycji indeksu w oparciu o liczb przekazan metodzie. GetNthDescription Zwraca opis pozycji indeksu w oparciu o liczb przekazan metodzie. Metoda GetListCount zwraca liczb pozycji w pliku indeksu. Jej skadnia jest nastpujca:
TheCount = MyCL.GetListCount(Path2IndexFile)

Metodzie przekazywana jest wirtualna cieka do pliku indeksu (Path2IndexFile), jeli wic plik ten pooony jest w tym samym miejscu co strona dokonujca wywoania, wprowadzona musi by jedynie nazwa pliku. Zwracan przez metod wartoci jest liczba pozycji w pliku indeksu, jeli wic stworzysz taki kod odnoszcy si do pliku omwionego wczeniej:
Response.Write MyCL.GetListCount("CLList.txt")

323

ASP Kompendium

programisty

to do przegldarki wpisana zostanie liczba 3. Nastpn metod jest GetListIndex, ktra zwraca numer pozycji biecej strony w pliku indeksu. Metoda ma nastpujc skadni:
TheIndex = MyCL.GetListIndex(Path2IndexFile)

Zmienna MyCL musi by wanym skadnikiem Content Linking. Metodzie przekazywany jest parametr Path2IndexFile, ktry stanowi ciek wirtualn do tekstowego pliku indeksu. Gdyby poszukiwa strony Page1.asp w pliku indeksowym opisanym wczeniej, to nastpujcy kod:
Response.Write MyCL.GetListIndex("CLList.txt")

wpisaby do przegldarki liczb 2. Metoda GetNextURL zwraca URL nastpnej pozycji pliku indeksu. Jeli bieca strona jest ostatni na licie, metoda GetNextURL zwrci pierwsz stron z listy, przenoszc gocia w ptli na pocztek. Metoda ma nastpujc skadni:
TheURL = MyCL.GetNextURL(Path2IndexFile)

Zmienna MyCL musi by wanym skadnikiem Content Linking. Parametr Path2IndexFile jest ciek wirtualn do pliku indeksu. Metoda zwraca adres URL nastpnej pozycji w pliku indeksu, jeli wic znajdowalibymy si na stronie Page1.asp, to ten kod:
Response.Write MyCL.GetNextURL("CLList.txt")

wpisze do przegldarki Page2.asp. Metoda GetNextDescription wyszukuje pole opisu tej pozycji pliku indeksu, ktra nastpuje za biec stron. Jeli biec stron jest strona ostatni, wtedy skadnik zwraca opis pierwszej strony z listy. Metoda ma nastpujc skadni:
TheDescription = MyCL.GetNextDescription(Path2IndexFile)

Zmienna MyCL musi by kopi skadnika Content Linking. Metodzie przekazywana jest cieka do pliku indeksu, a wartoci zwracan jest opis nastpnej w pliku indeksu strony. Jeli wic znajdowaby si na stronie Page1.asp z poprzedniego pliku indeksu, to taki kod:
Response.Write MyCL.GetNextDescription("CLList.txt")

wpisaby do przegldarki nastpujcy tekst:


Page 2 of Chapter 1

Metoda GetPreviousURL zwraca URL poprzedniej pozycji w tekstowym pliku indeksu. Jeli bieca strona jest pierwsza na licie, metoda GetPreviousURL zwrci adres URL ostatniej strony z listy, przechodzc w ptli na koniec pliku. Metoda ma nastpujc skadni:
TheURL = MyCL.GetPreviousURL(Path2IndexFile)

Zmienna MyCL musi by zatwierdzonym skadnikiem Content Linking. Parametr Path2IndexFile jest ciek wirtualn do pliku indeksu. Metoda zwraca URL poprzedniej pozycji pliku indeksu, jeli wic znajdowalibymy si na stronie Page1.asp i napisalibymy taki kod:
Response.Write MyCL.GetNextURL("CLList.txt")

Rozdzia 10 Skadniki ASP

324

w przegldarce ukazaby si URL TOC.asp. Metoda GetPreviousDescription wyszukuje pole opisu tej pozycji pliku indeksu, ktra poprzedza biec stron. Jeli strona bieca jest stron pierwsz, to skadnik zwrci opis strony znajdujcej si na kocu listy. Metoda ma nastpujc skadni:
TheDescription = MyCL.GetPreviousDescription(Path2IndexFile)

Zmienna MyCL musi by kopi skadnika Content Linking. Metodzie przekazywana jest cieka do pliku indeksu. Zwracan wartoci jest opis strony poprzedniej w pliku indeksu, jeli wic znajdowaby si na stronie Page1.asp, to nastpujcy wiersz kodu:
Response.Write MyCL.GetPreviousDescription("CLList.txt")

wpisaby do przegldarki tekst:


Table of Contents Page

Zostay nam do omwienia jeszcze dwie metody, GetNthURL i GetNthDescription, ktre rwnie zwracaj URL i opis (odpowiednio) z pliku indeksu. Jednak w tych metodach okrelasz numer pozycji, ktra ma by zwrcona przez funkcj. Metoda GetNthURL ma nastpujc skadni:
TheURL = MyCL.GetNthURL(Path2ToIndexFile, NumericPosition)

Zmienna MyCL musi by zatwierdzon kopi skadnika Content Linking. Metodzie przekazywane s dwa parametry: pierwszy z nich to wirtualne pooenie tekstowego pliku indeksu; drugi parametr zapamituje numer pozycji, ktrej URL chcesz otrzyma i ten wanie URL jest zwracany przez metod. Jeli przykadowo stworzye taki kod odnoszcy si do pliku indeksu omwionego wczeniej:
Response.Write MyCL.GetNthURL("CLList.txt", 2)

to do przegldarki zostanie wpisane cze Page1.asp. Metoda GetNthDescription ma nastpujc skadni:


TheDescription = MyCL.GetNthDescription(Path2ToIndexFile, NumericPosition)

Zmienna MyCL musi by zatwierdzon kopi skadnika Content Linking. Metodzie przekazywane s dwa parametry: pierwszy z nich to wirtualne pooenie tekstowego pliku indeksu; drugi parametr zapamituje numer pozycji, ktrej opis chcesz otrzyma i ten wanie opis jest zwracany przez metod. Jeli stworzyby taki przykadowy kod odnoszcy si do omwionego wczeniej tekstowego pliku indeksu:
Response.Write MyCL.GetNthDescription("CLList.txt", 2)

to jego wynikiem bdzie pojawienie si w przegldarce tekstu Page 1 of Chapter 1. Jeli poczysz ze sob te metody, moesz stworzy cakiem niez aplikacj ASP umoliwiajc gociom kolejne przechodzenie przez strony twojej witryny, zarwno w przd, jak i w ty oraz wywietlajc tabel zawartoci. Zwrmy uwag na tak witryn WWW, ktra opisuje omwione w poprzednim podrozdziale metody skadnika Counters. Poniej przedstawiony jest tekst pliku indeksu, ktry pooony jest w tym samym katalogu co strony ASP:
get_method.asp set_method.asp Metoda Get Metoda Set

325

ASP Kompendium
increment_method.asp remove_method.asp get_method.asp toc.asp Metoda Increment Metoda Remove Metoda Get

programisty

Tabela zawartoci

Wyszczeglnione zostay cztery metody wraz ze swoimi adresami URL i opisami. Tabel zawartoci, wytworzon na podstawie indeksu, prezentuje rysunek 10.14.

Rysunek 10.14. Strona tabeli zawartoci witryny wykorzystujcej skadnik Content

Linking

Zwr uwag na to, e kolejno pozycji na rysunku 10.14. jest taka sama jak w tekstowym pliku indeksu. Kiedy gocie klikn cze Metoda Get, ujrz stron pokazan na rysunku 10.15.

Rozdzia 10 Skadniki ASP

326

Rysunek 10.15. Strona metody Get witryny wykorzystujcej skadnik Content

Linking

Zwr uwag na cza znajdujce si na stronie metody Get. cze ze stron poprzedni odsya goci do tabeli zawartoci, poniewa strona metody Get je pierwsz stron na licie. cze ze stron nastpn wywietla tekst Metoda Set, ktre odsya goci do strony pokazanej na rysunku 10.16.

Rysunek 10.16. Strona metody Set witryny wykorzystujcej skadnik Content

Linking

Za stron metody Increment pojawia si strona metody Remove, pokazana na rysunku 10.17. Zauwa, e cze ze stron nastpn odsya goci do tabeli zawartoci, poniewa jest to ostatnia pozycja z listy stron. cze z poprzedni stron przenosi goci do strony metody Increment.

327

ASP Kompendium

programisty

Rysunek 10.17. Strona metody Remove witryny wykorzystujcej skadnik Content

Linking

Kod uyty do stworzenia tej witryny skada si z dwch czci: jedna z nich suy wykonaniu strony tabeli zawartoci; nastpnie strony wszystkich metod wykorzystuj t sam struktur kodu w celu wywietlenia cz ze stron nastpn i poprzedni. Pierwszy blok kodu dla tabeli zawartoci jest nastpujcy:
<% Option Explicit Dim MyCL Dim TheCount Dim I Set MyCL = Server.CreateObject("MSWC.NextLink") TheCount = MyCL.GetListCount("CLList.txt") %>

Na pocztku pojawia si instrukcja Option


Option Explicit

Explicit:

Nastpnie tworzona jest zmienna przechowujca obiekt Content


Dim MyCL

Linking:

Kolejna zmienna bdzie przechowywaa cakowit liczb pozycji w tekstowym pliku indeksu:
Dim TheCount

Inna zmienna jest tworzona w celu zapamitania iloci iteracji w drugim bloku kodu:
Dim I

Rozdzia 10 Skadniki ASP

328
Linking:

Tworzona jest kopia skadnika Content

Set MyCL = Server.CreateObject("MSWC.NextLink")

Do zmiennej TheCount wpisywana jest ilo pozycji w tekstowym pliku indeksu:


TheCount = MyCL.GetListCount("CLList.txt")

Nastpny blok kodu wytwarza tabel HTML zawierajc wszystkie pozycje wyszczeglnione w pliku indeksu.
<% For I = 1 to TheCount %> <TR> <TD WIDTH=423><P><A HREF=" <% Response.Write MyCL.GetNthURL("CLList.txt", i) %>"> <B><% Response.Write MyCL.GetNthDescription("CLList.txt", i) %> </B></A> </TD> </TR> <% Next %>

Kod wykorzystuje ptl For, w ktrej przechodzi kolejno przez wszystkie pozycje tekstowego pliku indeksu:
For I = 1 to TheCount

Nastpnie kada pozycja wpisywana jest do tabeli HTML. Adres URL wpisywany jest przy uyciu metody GetNthURL, a opis przy uyciu metody GetNthDescription. Kod przechodzi w ptli do nastpnego rekordu:
Next

Kod wszystkich innych stron jest taki sam. Pierwszy blok kodu tworzy skadnik Content
<% Option Explicit Dim MyCL Set MyCL = Server.CreateObject("MSWC.NextLink") %>

Linking.

Na pocztku instrukcja Option


Option Explicit

Explicit:

Nastpnie tworzona jest zmienna, ktra bdzie przechowywaa skadnik Content


Dim MyCL

Linking:

Tworzona jest kopia obiektu:


Set MyCL = Server.CreateObject("MSWC.NextLink")

329

ASP Kompendium

programisty

Kolejny blok kodu wpisuje do przegldarki cza ze stron poprzedni i nastpn.


<P><A HREF="<% Response.Write MyCL.GetPreviousURL("CLList.txt")%>"><B> <% Response.Write MyCL.GetPreviousDescription("CLList.txt") %></A></B> <P><A HREF="<% Response.Write MyCL.GetNextURL("CLList.txt") %>"><B> <% Response.Write MyCL.GetNextDescription("CLList.txt") %></A></B>

Na pocztku wpisywane jest cze ze stron poprzedni:


<P><A HREF="<% Response.Write MyCL.GetPreviousURL("CLList.txt")%>"><B>

Nastpnie opis cza ze stron poprzedni:


<% Response.Write MyCL.GetPreviousDescription("CLList.txt") %></A></B>

cze ze stron nastpn:


<P><A HREF="<% Response.Write MyCL.GetNextURL("CLList.txt") %>"><B>

W kocu opis cza ze stron nastpn:


<% Response.Write MyCL.GetNextDescription("CLList.txt") %></A></B>

Skadnik Content Rotator


Skadnik Content Rotator umoliwia prezentowanie innej zawartoci za kadym razem, kiedy strona jest adowana. Przykadem zastosowania tego skadnika moe by wczenie do strony cytatu dnia, odmiennych wiadomoci powitania lub porady dnia. Te same funkcje mona realizowa adujc dane z bazy, jednak ten skadnik dostarcza alternatywnych mechanizmw, ktre nie wymagaj adowania bazy danych tylko po to, aby zmieni porad dnia. Skadnik nie jest czci standardowej wersji instalacyjnej serwera IIS, mona go znale w zestawie IIS Resource Kit. Biblioteka jest pooona w nastpujcym miejscu: \IIS Resource Kit\Component\Content Rotator\DLL\i386\controt.dll Umie plik w twoim katalogu WinNT\System32, a nastpnie zarejestruj skadnik przy uyciu polecenia Uruchom (Run) z menu Start, wpisujc Regsvr32 controt.dll. Kiedy ju go zainstalujesz, moesz stworzy jego kopi za pomoc nastpujcego wiersza kodu:
Set objCR = Server.CreateObject("IISSample.ContentRotator")

Do stworzenia kopii skadnika uywamy metody CreateObject obiektu Server. W tym przykadzie zmienna objCR bdzie stanowia kopi tego skadnika. Skadnik bazuje na oddzielnym pliku tekstowym czcym w sobie rn zawarto, ktra ma zosta wywietlona. W pliku nadajesz danej treci poziom odniesienia, okrelajcy jak czsto powinna si ona ukazywa wzgldem reszty zawartoci. Moesz rwnie wpisa swj komentarz, a nastpnie wprowadzi sam zawarto. Zawarto umieszczana jest wprost w HTML-u, moesz wic umieci znaczniki HTML w pozycjach pliku. Plik powinien by zapisany jako zwyky plik tekstowy w takim miejscu, aby mona byo go adresowa ze strony, ktra bdzie korzystaa z jego zawartoci. Przekonaem si, e najlepiej umieci go w tym samym katalogu co strona korzystajca z zawartoci, wtedy wywoanie pliku jest znacznie prostsze. Kada pozycja pliku ma nastpujc struktur:

Rozdzia 10 Skadniki ASP


%% #Ranking // Komentarz Tekst zawartoci

330

Kada pozycja rozpoczyna si podwjnym znakiem procentu. Po tym znaczniku moe nastpowa ranking (nie jest wymagany), ktry okrela czsto pojawiania si jednej pozycji wzgldem innych znajdujcych si na licie; jeli nie okrelisz rankingu, domylnie ustalana jest dla niego warto 1. Po rankingu lub wartoci odniesienia pojawia si komentarz, ktry rwnie nie jest wymagany. Nastpny wiersz to tre pozycji. Moe ona obejmowa wiele wierszy, ktre traktowane s jako tre dopki ponownie nie pojawi si podwjny znak procentu lub dopki plik si nie skoczy. Skadnik ma dwie metody suce wyszukiwaniu zawartoci z pliku. Pierwsz z nich jest metoda ChooseContent, zwracajca pozycj z listy zawartoci. Pojawienie si zwracanej pozycji jest bardziej prawdopodobne, jeli ma ona wyszy ranking. Metoda ma nastpujc skadni:
TheText = objCR.ChooseContent(Path2ContentFile)

Zmienna objCR musi by wan kopi pliku Content Rotator. Metodzie przekazywany jest parametr Path2ContentFile. Jest to wirtualna cieka do pliku zawartoci. Metoda zwraca tekst poszczeglnych pozycji z pliku zawartoci. Druga metoda, GetAllContent, zwraca zawarto wszystkich pozycji pliku i wpisuje je wprost do przegldarki. Metoda ma nastpujc skadni:
objCR.GetAllContent(Path2ContentFile)

Zmienna objCR musi by zatwierdzon kopi skadnika Content Rotator. Parametr Path2ContentFile jest ciek do tekstowego pliku zawartoci. Metoda wpisuje ca zawarto prosto do przegldarki. Kada pozycja zostanie oddzielona lini poziom (znacznik HR HTML-a). Spjrzmy na prbn stron cytatu dnia, ktra wykorzystuje ten skadnik. Kiedy gocie wywoaj stron po raz pierwszy, ujrz widok pokazany na rysunku 10.18.

Rysunek 10.18. Pierwsza strona cytatu dnia Jeli gocie klikn cze Poka kolejny cytat, ujrz tekst pokazany na rysunku 10.19.

331

ASP Kompendium

programisty

Rysunek 10.19. Strona ukazujca si po klikniciu cza Poka kolejny cytat Jeli gocie klikn cze Poka wszystkie cytaty, zobacz stron pokazan na rysunku 10.20. Strona uywa tekstowego pliku szeregowania zawartoci zawierajcego te cytaty, jak to pokazano tutaj:
%% #2 // To jest komentarz <B><FONT FACE="Arial,Helvetica,Univers,Zurich BT"> yj tak, jak gdyby kady dzie by twoim pierwszym i ostatnim dniem. </FONT></B>

%% #3 <I><FONT FACE="Arial,Helvetica,Univers,Zurich BT"> Wsplnie, w pokoju i harmonii, ciche brzmienia szeptay ca noc. </FONT></I>

%% #1 // Ten cytat ma najmniejsz warto <FONT FACE="Arial,Helvetica,Univers,Zurich BT"> Pewnego dnia tego wszystkiego nie bdzie. </FONT>

Rozdzia 10 Skadniki ASP

332

Rysunek 10.20. Strona ukazujca wszystkie cytaty Pierwsza pozycja ma ranking 2. Jeli dodamy do siebie wszystkie liczby rankingu, otrzymamy 6. Z wartoci 2 pierwsza pozycja ma 33 procent (dwie szste) szans na pojawienie si w przegldarce:
%% #2 // To jest komentarz <B><FONT FACE="Arial,Helvetica,Univers,Zurich BT"> yj tak, jak gdyby kady dzie by twoim pierwszym i ostatnim dniem. </FONT></B>

Zauwa, e pozycja zawiera komentarz, a tre pozycji zajmuje wicej ni jeden wiersz. Druga pozycja ma poziom 3, wic ma 50 % (trzy szste) szans na wywietlenie. Zauwa, e ta pozycja nie ma komentarza:
%% #3 <I><FONT FACE="Arial,Helvetica,Univers,Zurich BT"> Wsplnie, w pokoju i harmonii, ciche brzmienia szeptay ca noc. </FONT></I>

Ostatnia pozycja ma poziom 1, powinna wic pojawia si tylko jeden raz na sze wywietle strony:
%% #1 // Ten cytat ma najmniejsz warto <FONT FACE="Arial,Helvetica,Univers,Zurich BT"> Pewnego dnia tego wszystkiego nie bdzie. </FONT>

Kod strony cytatu dnia wywietla jedn lub wszystkie pozycje pliku, w zalenoci od tego, jakie cze klikn go. Pierwszy blok kodu strony tworzy skadnik Content Rotator.
<% Option Explicit Dim objCR Set objCR = Server.CreateObject("IISSample.ContentRotator")

333

ASP Kompendium
%>

programisty

Kod rozpoczynamy w tradycyjny sposb od instrukcji Option pamitaj, e musi by ona pierwszym wierszem kodu strony:
Option Explicit

Explicit.

Kiedy uywasz tej instrukcji

Nastpnie tworzona jest zmienna Content


Dim objCR

Rotator:

oraz jej kopia:


Set objCR = Server.CreateObject("IISSample.ContentRotator")

Kolejny blok kodowy pojawia si w tym miejscu strony, w ktrym ma wystpi cytat, jest wic osadzony wraz z HTML-em:
<% If IsEmpty(Request.QueryString("Show")) Then Response.Write objCR.ChooseContent("cr.txt") Else objCR.GetAllContent("cr.txt") End If %>

Dwa cza u dou strony odnosz si do tej samej strony w celu wywietlenia kolejnego cytatu. Rni si jednak pomidzy sob. Kiedy go kliknie cze wywietlajce na stronie wszystkie cytaty, parametr przekazywany jest poprzez QueryString, dlatego wstpnie wyszukujemy nastpujce pole w zbiorze:
If IsEmpty(Request.QueryString("Show")) Then

Jeli pole nie jest puste, naley wywietli jeden cytat:


Response.Write objCR.ChooseContent("cr.txt")

W innym wypadku uywamy metody GetAllContent w celu wpisania do przegldarki wszystkich cytatw. Zauwa, e nie realizujemy tego zadania przy uyciu metody Write. Nie ma takiej potrzeby, poniewa metoda GetAllContent sama wpisuje tre wprost do przegldarki:
Else objCR.GetAllContent("cr.txt") End If %>

Skadnik MyInfo
We wczeniejszej czci tego rozdziau przyjrzelimy si skadnikowi Counters. Powiedzielimy sobie o jego ogromnym zasigu obejmujcym wszystkie sesje oraz wszystkie aplikacje ASP twojego serwera. Wad tego skadnika byo jednak to, e zapamitywa on tylko liczby. Chocia skadnik MyInfo nie dysponuje metodami

Rozdzia 10 Skadniki ASP


Increment

334

i Remove tak jak skadnik Counters, to jednak pozwala na przechowywanie cigw dostpnych w obrbie serwera. Wartoci te nie s tracone nawet po wyczeniu serwera, poniewa s przechowywane w pliku poza IIS. Skadnik MyInfo zoony jest z waciwoci, ktre tworzysz poprzez ustalenie ich wartoci. Waciwoci te s nastpnie wyszukiwane przez okrelenie ich nazwy. Aby stworzy skadnik, uyj nastpujcego wiersza kodu:
Set MyInfo = Server.CreateObject("MSWC.MyInfo")

Do utworzenia skadnika uywamy metody CreateObject obiektu Server. Zmienna MyInfo staje si kopi skadnika o tej samej nazwie. Kiedy skadnik jest ju utworzony, moesz zacz tworzy i wykorzystywa wybrane przez ciebie waciwoci. Na przykad:
<% Option Explicit Dim MyInfo Set MyInfo = Server.CreateObject("MSWC.MyInfo") MyInfo.CompanyName = "Firma ABC" Response.Write "<B>" & MyInfo.CompanyName & "<P>" %>

Na wstpie stwierdzamy, e bdziemy deklarowa nasze zmienne:


Option Explicit

Nastpnie deklarujemy zmienn MyInfo:


Dim MyInfo

i tworzymy jej kopi:


Set MyInfo = Server.CreateObject("MSWC.MyInfo")

Nastpnie tworzymy waciwo tego skadnika o nazwie CompanyName i w tym samym wierszu kodu ustawiamy jej warto. Jeli waciwo o tej nazwie ju istnieje, jej warto zostanie zastpiona:
MyInfo.CompanyName = "Firma ABC"

Warto waciwoci wpisywana jest do przegldarki:


Response.Write "<B>" & MyInfo.CompanyName & "<P>"

Wyjcie tego kodu pokazano na rysunku 10.21. Pamitaj jednak, e waciwo ma ogromny zasig, moemy wic stworzy rwnie tak stron, jak pokazano poniej, ktra znajduje si na naszym serwerze w zupenie innej aplikacji ASP.
<% Option Explicit Dim MyInfo Set MyInfo = Server.CreateObject("MSWC.MyInfo") Response.Write "<B>Ten tekst znajduje si w innej aplikacji ASP:" _ & MyInfo.CompanyName & "<P>" %>

335

ASP Kompendium

programisty

Tutaj waciwo wpisuje do przegldarki tekst z innej aplikacji ASP, aby zademonstrowa swj zasig. Wyjcie kodu prezentuje rysunek 10.22.

Rysunek 10.21. Wyjcie pierwszej strony uywajcej skadnika MyInfo

Rysunek 10.22. Wyjcie kodu wykorzystujcego waciwo CompanyName strony znajdujcej si w innej aplikacji ASP

You might also like