Professional Documents
Culture Documents
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
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
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
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.
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.
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.
10
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.
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
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"); } }
// ></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;
14
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
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.
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.
19
ASP Kompendium
programisty
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
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>
W dalszej czci tego rozdziau przyjrzymy si jak kod ASP wsppracuje z HTML w celu realizacji dynamicznego wywietlania zawartoci.
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.
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
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.
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.
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
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>
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.
30
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
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.
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.
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.
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.
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
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
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.
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.
38
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.
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.
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.
43
ASP Kompendium
programisty
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).
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.
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.
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.
48
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.
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.
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.
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.
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.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.
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.
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
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.
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).
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).
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.
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.
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.
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>
62
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
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.
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.
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.
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.
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.
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.
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
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).
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.
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.
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).
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.
80
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.
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.
84
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.
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.
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.
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).
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
Wyrni nawet fraz expression, bdziesz mg wic natychmiast wpisa w to miejsce wybrane wyraenie. Jeli wpisaby ten kod wraz ze spacj:
Select
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
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:
92
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"
</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.
94
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.
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.
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
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>
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
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:
100
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.
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
102
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">
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">
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>
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.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.
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
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.
110
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
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
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
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 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"
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,
bdzie przypisanie zmiennej X wartoci 2, poniewa wanie dwjka jest reszt z tego dzielenia.
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")
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
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
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 %>
Case
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
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") %> <%
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.
126
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 %>
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.
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>" %>
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
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)) _
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.
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
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.
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
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.
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) %>
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>" %>
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>" %>
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>" %>
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) %>
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
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
144
Na wstpie uyto funkcji Len w celu sprawdzenia, czy wprowadzony adres ma dugo przynajmniej szeciu znakw:
If Len(FieldToTest) < 6 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) %>
146
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
147
ASP Kompendium
programisty
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"
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 %>
Ponadto zwr uwag na to, e funkcja wysya wiadomo poprzez przypisanie jej nazwie zwracanej wartoci.
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.
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
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.
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:
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")
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)
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
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
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")
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
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>"
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
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")
162
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 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 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
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.
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.
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.
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.
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
W przeciwnym wypadku dane znajdujce si w bazie s wykorzystane do ustawienia aspektw wywietlania strony:
Layout = RSVisitor("Layout") FavCat = RSVisitor("FavCat")
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 <>
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)
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
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
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
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.
176
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"
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") & "'")
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
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") & "')"
180
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.
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.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")
184
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")
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
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") %>
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"
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 %>
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)
190
Explicit,
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)
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)
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
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 %>
Explicit:
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
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
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"
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
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
196
Potem deklarowana jest zmienna, ktra bdzie zapamitywaa binarne dane obrazka:
Dim ThePicture
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
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!" %>
Metoda End
Metoda End obiektu Response nakazuje kompilatorowi zatrzymanie przetwarzania kodu. Przybiera ona nastpujc form:
Response.End
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
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.
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
Rysunek 6.10. Strona gwna wykorzystujca readresowanie przy uyciu obiektu wyboru
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") %>
203
ASP Kompendium
programisty
Nastpnie deklarowane s dwie zmienne, ktre wykorzystamy do czenia si z baz oraz wyszukiwania potrzebnych danych:
Dim conn Dim RSMostPopular
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>
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>
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>
Wstpnie powyszy kod upewnia si, czy pole RedirectTo byo przesane wraz z formularzem:
If not isempty(Request.Form("RedirectTo")) Then
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.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.
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 %>
Tworzona jest rwnie zmienna przechowujca czas opnienia potrzebny do symulacji dugoci procesu:
Dim 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
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
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>"
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.
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
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"
212
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")
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 %>">
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>" %>
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
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.
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
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
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 %>
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?"
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.
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<B<P>B. P>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>" %>
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>" %>
225
ASP Kompendium
programisty
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.
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
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
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"
230
Nastpnie uywamy metody Goto w celu znalezienia zakadek w dokumencie Word o nazwie CurrentDate, ktry wanie otwarlimy:
MyWord.ActiveWindow.Selection.GoTo -1,,, "CurrentDate"
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 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))
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
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
232
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
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"
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) _
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
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.
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.
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.
238
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.
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
Wartoci zmiennych UserID i City uywane s jako dodatkowe wyjcie dla przegldarki:
Response.Write "Twj numer to : " _ & Session("UserID") & ".<P>"
240
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
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
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.
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>" %>
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 & " " _
Session.LCID = 1049 Response.Write "Format rosyjski: " & Now & " " _
Session.LCID = 1032 Response.Write "Format grecki: " & Now & " " _
Session.LCID = 2049 Response.Write "Format iracki: " & Now & " " _
Session.LCID = 3073 Response.Write "Format egipski: " & Now & " " _
Session.LCID = 6154 Response.Write "Format panamski: " & Now & " " _
Nastpnie kod wywietla aktualn dat i godzin, jak rwnie walut w formacie obowizujcym w Stanach Zjednoczonych:
246
Tutaj iracki:
Session.LCID = 2049 Response.Write "Format iracki: " & Now & " " _
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
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.
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.
249
ASP Kompendium
Session.Abandon
programisty
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.
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
I wreszcie czwarta zmienna aplikacji, ShipHandPercent, przechowuje naliczany procent za transport i obsug:
Application("ShipHandPercent") = .07
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
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
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 %>
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
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"
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 %>
Explicit,
Nastpnie tworzona jest zmienna, ktra bdzie zapamitywaa odwoanie do pozycji zbioru:
Dim MyAppSO
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
Nastpnie tworzymy kolejn zmienn, ktra bdzie wyszukiwaa w bazie danych informacje o udanych wywoaniach:
Dim 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
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 %>
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>
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
258
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"
260
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"
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
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")
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:
262
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
procedury"
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.
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
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
W innym wypadku nazwa komputera nie zostaa odnaleziona i wykorzystany bdzie jedynie adres IP:
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()))
(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"))
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
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
Numer identyfikacyjny nowo utworzonego rekordu koszyka jest wyszukiwany w bazie danych:
268
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
Widzisz wic, e dobrze rozplanowana, zoona aplikacja ASP w peni wykorzystuje funkcje obiektw Application i Session.
269
ASP Kompendium
programisty
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
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"
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.
272
Rysunek 9.2. Wiadomo e-mail wysana przy uyciu metody Send obiektu NewMail
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.
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."
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
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:
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
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)
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 %>
Nastpnie tworzona jest zmienna, ktra bdzie przechowywaa nasz obiekt NewMail:
Dim objMail
Nastpnie wykorzystujemy metod CreateObject obiektu Server do stworzenia kopii obiektu NewMail:
Set objMail = Server.CreateObject("CDONTS.NewMail")
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
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
278
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"
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
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
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 %>
281
ASP Kompendium
programisty
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>"
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 %>
284
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>" %>
286
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
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
288
Explicit,
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, 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:
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
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.
293
ASP Kompendium
Capabilities
programisty
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)
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
294
Jeli korzystae z przegldarki Netscape Navigator w systemie Windows 95, nagwek zwrci t warto:
Mozilla/4.0 * (Win95; U)
Skadnik Browser
Capabilities
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
Capabilities
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
Capabilities:
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>"
Capabilities
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>"
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
Capabilities
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
298
Capabilities:
Capabilities,
Jeli tak, to go jest readresowany do podkatalogu zawierajcego strony dla tej przegldarki:
Response.redirect "./IE/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
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 %>
Capabilities:
set BC = server.createobject("MSWC.BrowserType")
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"
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.
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)
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:
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
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
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
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.
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")) %>
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
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.
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 %>
Explicit:
307
ASP Kompendium
Option Explicit
programisty
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")
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."
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)
Nastpnie uywamy wbudowanej w HTML metody Write obiektu Response w celu wysania zmiennej wiadomoci do przegldarki:
<P><B><% Response.Write TheMessage %></B>
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.
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 %>
Explicit:
Counter:
Counter:
Counter
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.
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
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 %>
Explicit:
312
Tworzona jest zmienna, ktra bdzie przechowywaa liczb wywoa strony informacyjnej:
Dim CompInfoCount
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
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
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 %>
314
Rysunek 10.11. Strona raportu po wyzerowaniu licznika Na wstpie pojawia si instrukcja Option
Option Explicit
Explicit:
Counter:
315
ASP Kompendium
Dim CompInfoCount Dim WelcomeCount Dim HitReportCount
programisty
Counter:
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")
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
316
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.
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
Explicit:
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>"
Nastpnie tworzony jest drugi licznik, ktry bdzie wywietlany w kolejnej stronie, znajdujcej si w obrbie innej aplikacji ASP:
320
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>" %>
Explicit:
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.
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")
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")
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")
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)
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.
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.
326
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.
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
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") %>
Explicit:
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
328
Linking:
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.
Explicit:
Linking:
329
ASP Kompendium
programisty
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:
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>
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.
Rotator:
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
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
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>" %>
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"
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.22. Wyjcie kodu wykorzystujcego waciwo CompanyName strony znajdujcej si w innej aplikacji ASP