Základy ASP
Transkript
základy asp autor: Ilja Kraval strana 1/25 Základy ASP © Ilja Kraval , r. 2000, http://www.objects.cz Tento dokument podléhá autorskému zákonu. Všechna práva vyhrazena, šíření tohoto dokumentu, resp. jeho částí není bez svolení autora dovoleno a je trestné. Obsah Základy ASP 1 Obsah 1 Co bylo před ASP......................................................................................................................2 Princip dynamicky vytvořených stránek ASP............................................................................2 Server-side a client-side scripting .............................................................................................3 ASP jako GUI a ASP jako část aplikace ...................................................................................5 Základem ASP - vestavěné objekty ASP.................................................................................6 První část konceptu ASP - Session a Application objekty ........................................................6 Druhá část konceptu ASP - komunikace v daném session pomocí Request a Response objektů.......................................................................................................................................7 Transakce ve skriptu ASP.........................................................................................................7 Request objekt ..........................................................................................................................7 Použití kolekce ServerVariables .............................................................................................11 Získání názvu serveru .....................................................................................................11 Získání typu browseru .....................................................................................................12 Získání nastaveného rozlišení browseru.........................................................................12 Získání nastaveného jazyka na klientovi.........................................................................12 Použití kolekce Cookies - zápis a čtení ..................................................................................12 Response objekt .....................................................................................................................13 Rozdělení funkcionality objektu Response .............................................................................14 vložení informace do stránky...........................................................................................14 zaslání cookie..................................................................................................................14 redirect browseru.............................................................................................................14 bufferování.......................................................................................................................14 nastavení property stránky ..............................................................................................14 check konetku klienta ......................................................................................................15 Rozdíl mezi Response.Write a <% = %>.........................................................................15 Buffering v ASP.......................................................................................................................16 1 základy asp autor: Ilja Kraval strana 2/25 Postupné nebo okamžité zobrazování mezivýsledků v ASP ..........................................16 Větvení programu a buffering v ASP...............................................................................17 COM objekty v ASP ................................................................................................................18 Objekt Server ..........................................................................................................................18 Použití metody Server.CreateObject ......................................................................................18 Příklad 1 na tvorbu instance COM objektu v ASP...........................................................19 Oblasti viditelnosti proměnných v ASP ...................................................................................20 Application objekt ....................................................................................................................20 Význam kolekce Contents objektu Application a StaticObject................................................21 Události objektu Application ....................................................................................................21 Použití metody Lock a Unlock.................................................................................................21 Příklad na globální viditelnost proměnné ................................................................................22 Session objekt.........................................................................................................................22 Session a property SessionID.................................................................................................22 Proměnné a objekty v oblasti viditelnosti Session ..................................................................23 Příklad na login do aplikace v ASP .........................................................................................23 Další objekty v ASP.................................................................................................................24 Scripting ..................................................................................................................................24 Server komponenty .................................................................................................................24 Objekty MS Samples...............................................................................................................25 Co bylo před ASP Internetu se nejprve používaly pouze statické stránky HTML. Technologií statických stránek nebylo možné zavést aplikační prvky - stránky se pouze prohlížely bez interakce se systémem. Postupem času se začal zdokonalovat samotný jazyk HTML. Stránky získaly dynamiku na straně klienta. Dalším vývojem vznikla technologie DHTML - Dynamic HTML. Tato technologie sice přinesla dynamiku na stránky HTML, avšak jedná se pouze o dynamiku na straně klienta (formulářovou dynamiku). Nelze hovořit o aplikační dynamice, pouze klientské. V současné době je DHTML jedním ze základních prvků Internetovských formulářů a dynamických stránek a dále se rozvíjí. Prvním případem použití aplikační dynamiky byla technologie Common GateWay Interface (CGI). Tato technologie umožňuje dynamicky vytvořit stránku pomocí C nebo Perlu. Brzy se však projevila nevýhoda této technologie - každý HTTP požadavek dává vzniknout novému procesu a po obsluze tohoto požadavku proces opět zaniká. Další technologií, která vznikla jako alternativa k CGI, je ISAPI technologie. Zde je logika aplikace natažena do procesu pouze jednou a nedochází tak k takové zátěži jako u CGI. Tato technologie je také základem technologie ASP - Active Server Pages. Technologie Active Server Pages je technologií běžící pod MS Internet Information Serverem. Princip dynamicky vytvořených stránek ASP Základní princip ukazuje následující obrázek: 2 základy asp autor: Ilja Kraval strana 3/25 Princip ASP - dynamicky tvořené stránky Web server Web browser ASP stránka např. default.asp HTML kód HTML zobrazení obrázek 1 Princip ASP - dynamicky vytvořené stránky Požadavek ze strany klienta na stažení stránky vede k dynamickému vytvoření stránky, která je poté stažena a zobrazena. Server-side a client-side scripting Je třeba rozlišovat mezi dynamicky tvořenými stránkami (například pomocí ASP) a mezi dynamickým HTML. Dynamicky tvořené stránky v ASP se vytvářejí na serveru, tj. před jejich vytvořením není známa konečná podoba stránky. Záleží na aplikaci, jak bude výsledná stránka nakonec vypadat. Teprve až když nastává proces „stažení stránky“ browserem a teprve tehdy vstupuje role DHTML na straně klienta. DHTML a ASP dvě různé dynamiky ClientClient-side scripting a DHTML Web server Server-side Server-side scripting - ASP ASP stránka např. default.asp Web browser HTML kód HTML zobrazení obrázek 2 Pozice server-side scriptingu a client-side scriptingu 3 základy asp autor: Ilja Kraval strana 4/25 Následující příklad ukazuje na rozdíl mezi dynamikou DHTML a ASP dynamikou. Kód dynamiky na straně klienta - DHTML : (stránka .../pr1/pr1_2.asp) <P>ukázka client-side scriptingu <BR> pozor browser musí umět VB script</P> <SCRIPT Language = "VBScript"> sub hello() msgbox "Toto je Vb script na klientovi" end sub </SCRIPT> <INPUT TYPE = "BUTTON" NAME="VBS" VALUE="Klikni na script" onclick = "hello()"> Tento jednoduchý kód umožňuje pomocí kliknutí na button spustit procedury na straně klienta, tato procedura je součástí client-side skriptu. Oproti tomu následující jednoduchý server-side skript se na straně klienta chová staticky, ale stránka ASP je dynamicky vytvořena na straně serveru před stažením. Některé části stránky jsou statické, jiné se dynamicky vytvářejí ve skriptu na serveru. Tato „serverová část“ skriptu je syntakticky v ASP oddělena pomocí <% ...%>. Části mimo tuto sekci jsou klasickými HTML kódem, části uvnitř odpovídají server-side syntaxi (v tomto případě VBScriptu). (stránka .../pr1/pr1_3.asp) <P>příklad na server side scripting</P> <P> dnes je : <% = Date %> a čas je <% = Time %> <P> ale pozor, to je čas na serveru a ne na klientovi (na Internetu hraje roli) </P> V tomto příkladu byla použita syntaxe výstupu do HTML kódu pomocí rovnítka, tj. do místa označeném rovnítkem se do HTML dosazuje hodnota uvedená za rovnítkem. Výsledná stránka v kódu vypadá (pokud ten den bylo na serveru 18.1.2000 a čas byl zrovna 21:46:06) takto: <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <P>příklad na server side scripting</P> <P> dnes je : 4 základy asp autor: Ilja Kraval strana 5/25 18.1.2000 a čas je 21:14:06 <P> ale pozor, to je čas na serveru a ne na klientovi (na Internetu hraje roli) </P> </BODY> </HTML> což se zobrazí u klienta takto: příklad na server side scripting dnes je : 18.1.2000 a čas je 21:14:06 ale pozor, to je čas na serveru a ne na klientovi (na Internetu hraje roli) Do místa v „hotovém“ HTML kódu se dosadily hodnoty za rovnítkem (konkrétní datum a konkrétní čas). Je zřejmé, že klient při prohlídce HTML kódu již nepozná, která část stránky byla generována dynamicky a která staticky. Rozdíl mezi DHTML a ASP také zodpovídá otázku, která zazněla na jednom ze seminářů, jak se řeší obecně tisk z Internetovské aplikace založené na ASP. Ve chvíli, kdy je stránka stažena, tak ASP již „ztratilo svou moc cokoli ovlivnit“ - na straně klienta ASP již nemá smysl, protože ASP je technologie pro tvorbu dynamickou stránek na straně serveru před stažením ke klientovi. Otázka tisku z Internetovských aplikací je obecně (pokud chceme řešit problém pro libovolný browser) dost složitá a je to otázka samotného DHTML. Například pro IE5 lze použít pro řízení tisku následující konstrukce: <style> .myBreak {page-break-before: always} </style> a pro novou stránku vložit tag: <p class=myBreak> V případě, že řídíme nové stránky z aplikace v ASP, potom vložení tagu <p class=myBreak> provedeme pomocí příkazu Response.Write. ASP jako GUI a ASP jako část aplikace Dynamicky vytvořené stránky mají zvláštnost v tom, že na jedné straně jsou prezentovány na straně klienta jako stránky (formulář, výstup apod.), na straně druhé protože obsahují skripty, nesou také určitou část aplikační logiky. Například výstupem pro dynamicky vytvořenou stránku může být přímo část HTML kódu, například takto: (stránka .../pr1/pr1_4.asp) <P>příklad na výstup přes proměnnou (resp. operaci)</P> <P> 5 základy asp autor: Ilja Kraval strana 6/25 <% s = "<FONT SIZE=6>nyní je " & Date & " a čas je " & Time & "</FONT>" %> <% = s %> <P> všimněte si, že výstup je interpretován i s tagem fontu... </P> V příkladu je v proměnné s uschována část HTML kódu a výstupem je interpretována i s tagem. Základem ASP - vestavěné objekty ASP ASP obsahuje scripting na straně serveru, většinou se používá VBScript, ale je možné zavést i jiný jazyk (například Perl). Pro funkcionalitu ASP jsou podstatné vestavěné objekty, které umožňují vytvořit přes svou funkcionalitu plnohodnotnou Internetovskou aplikaci. Tyto objekty vytvářejí objektový model ASP (název model je trochu nadnesený, protože se jedná o nezávislé objekty): Objektový model ASP - přehled Request object Klient Server object Response object Server Application object N krát ObjectContext object Session object obrázek 3 Přehled objektů ASP Existuje celkem pouze 6 objektů, které jsou součástí ASP technologie, z toho tři objekty, které umožňují komunikaci mezi klientem a serverem - Request, Response a ObjectContext objekt a tři objekty, které jsou v kompetenci aplikace na serveru Server, Application a Session objekt. První část konceptu ASP - Session a Application objekty Prvním konceptem ASP je viditelnost v rámci celé aplikace a viditelnost v rámci jednoho „session“ klienta. K tomuto konceptu jsou zavedené objekty Application a Session. Objekt Application má pouze jednu instanci v celé aplikaci a Session objekt se vyskytuje na serveru N krát - tolikrát, kolik je přihlášených klientů. Každý Session objekt patří k danému přihlášenému klientovi. Protože je kód aplikace napsaný z pohledu jednoho klienta (i když se jich hlásí několik), pracuje se v kódu pouze s jedním objektem Session, který jediný je v dosahu viditelnosti kódu, klient nemá přístupné Session objekty jiných klientů. 6 základy asp autor: Ilja Kraval strana 7/25 Objekt Session je v dosahu viditelnosti daného session klienta, objekt Application je ve viditelnosti celé aplikace a lze pomocí něj sdílet informace společné pro celou aplikaci. Druhá část konceptu ASP - komunikace v daném session pomocí Request a Response objektů Druhý koncept ASP spočívá v komunikaci mezi klientem a aplikací v rámci daného session pomocí objektů Request a Response. Komunikace na nejnižší úrovni pomocí HTPP je „obalena“ vyšším přístupem pomocí objektů Request a Response, čímž se tato komunikace skrývá za jednoduchou práci s těmito dvěma objekty. Jednotlivé HTTP požadavky ze strany klienta se do aplikace dostávají přes objekt Request. Navíc tento objekt zpřístupňuje informace o klientovi. Odpovědi HTTP se klientovi z aplikace zasílají pomocí objektu Response. Tento objekt umožňuje také redirect - přesměrování požadavku na jinou stránku. Transakce ve skriptu ASP Jako vcelku nová věc se v ASP 2.0 objevuje možnost transakčního zpracování stránky. Pokud stránka obsahuje directivu @TRANSACTION, bude tato stránka zpracována transakčně. Objekt ObjectContext zpřístupňuje dvě metody SetComplete a SetAbort. Zavedení transakčního zpracování u ASP stránky není nic jiného, než aplikování MTS na VBscript stránky ASP. Blíže o transakčním zpracování pod MTS v semináři o třívrstvové architektuře a její nástroje. Request objekt Request objekt zprostředkuje převzetí požadavku od klienta a přenese jej do aplikace. Výčet jeho kolekcí, property a metody ukazuje obrázek: Request object Collections • QueryString Properties Methods • TotalBytes • BinaryRead • Form • ServerVariables • Cookies • ClientCertficate obrázek 4 Kolekce, property a metody objektu Request 7 základy asp autor: Ilja Kraval strana 8/25 Hodnoty převzaté od klienta z formuláře se vyskytují v objektu Request buď v kolekci QueryString anebo v kolekci Form. Záleží na jedné konstrukci ve formuláři, který vyplňuje klient. Tuto situaci zobrazuje následující obrázek: Základní scénář - FORM, GET, POST URL browser HTTP header <FORM...> <FORM...> .... </FORM METHOD = GET METHOD = POST Čtení dat pomocí Request. Request.QueryString collection Čtení dat pomocí Request. Request.Form collection ASP Aplikace obrázek 5 Rozdíl metody GET a POST ve formuláři Výchozím bodem scénáře je formulář, který vyplňuje klient. Tento formulář ve tvaru HTML má podobu <FORM ....> ...nějaké Inputy </FORM> Tag <FORM ..> obsahuje: stránku, která bude odpovědí na tento formulář (na ní se provede automatický redirect, tato stránka se zadává do atributu ACTION zadání metody, která má být použita - buď metoda GET nebo POST, což se zadává do atributu METHOD Příklad takového tagu: <FORM NAME="frm" ACTION="answer.asp" METHOD="GET"> Pokud se zadá metoda GET, potom převzaté hodnoty z formuláře se stávají součástí URL oddělené od názvu stránky otazníkem. V tomto případě je také omezen počet znaků, které lze převzít z formuláře počtem znaků URL. Příklad na metodu GET: (stránka .../pr2/pr2_1.asp) <P>Příklad na metodu get</P> <CENTER> <FORM NAME="frm" ACTION="answer.asp" METHOD="GET"> <PRE> Jmeno: <INPUT TYPE="TEXT" NAME="Jmeno"> 8 základy asp autor: Ilja Kraval strana 9/25 e-mail: <INPUT TYPE="TEXT" NAME="email"> </PRE> <INPUT TYPE=Reset VALUE="RESET"> <INPUT TYPE=Submit VALUE="OK"> </FORM> V tomto případě se požadavek zpracuje nad stránkou answer.asp a po zadání hodnot Jmeno: hurvinek e-mail: [email protected] a odsouhlasení bude mít URL tvar: URL = .../answer.asp?Jmeno=hurvinek&[email protected] Hodnoty za otazníkem vznikly z názvů INPUT atributů NAME a zadaných hodnot podle schemtau NAME input=zadaná hodnota kde oddělovačem za otazníkem je &.. Tedy pokud zadáme formulář takto s metodou GET, vznikne redirect na stránku zadanou v ACTION, v URL bude za stránkou otazník s hodnotami podle uvedeného schématu <name>=<hodnota> oddělené &. Na druhé straně pokud ASP přijme požadavek se stránkou s otazníkem a schematem <name>=<hodnota>, provede redirect na zpracování uvedené stránky a sopučasně provede parsing výrazu za otazníkem, čímž získá jak všechna <name>, tak všechna odpovídající <hodnota>. Poté kolekci QueryString naplní hodnotami <hodnota> s klíči <name>, takže lze jednoduchým způsobem čtením této kolekc získat údaje zadané klientem, příklad Stránka answer.asp v předešlém příkladu: (stránka .../pr2/answer.asp) <PRE> Jmeno: <% =Request.QueryString("jmeno") %> E-mail: <% =Request.QueryString("email") %> </PRE> Odpovídající klíče ”jmeno” a ”email” v syntaxi Request.QueryString("jmeno") a Request.QueryString("email") odpovídají té části URL, kde je za otazníkem Jmeno=hurvinek&[email protected] a tato část URL odpovídá názvům INPUT tagů v HTML formuláře. Tímto se dostaly hodnoty z formuláře až do Request objektu, odkud jsou vyjímatelné přes klíče. 9 základy asp autor: Ilja Kraval strana 10/25 Protože Request objekt naplní kolekci QueryString vždy při parsingu části za otazníkem, nemusí se toto URL produkovat pouze pomocí formuláře. V dalším příkaldu je uveden odkaz s URL, kde je přednastavena hodnota pro parsing „natvrdo“ za otazníkem takto: (stránka .../pr2/pr2_2.asp) <P>metoda GET používá URL, což lze ukázat zde: (musíte změnit název serveru, zde je server "ilja", nahraďte svým) </P> <P><a href="http://ilja/sem4/pr2/answer.asp?jmeno=aaa&email=bbb"> klikni sem </a> Po kliknutí na odkaz s nápisem „klikni sem“ vznikne požadavek s URL: http://ilja/sem4/pr2/answer.asp?jmeno=aaa&email=bbb což vede k parsingu a v QueryStringu budou dvě hodnoty, s klíčem jmeno bude aaa a s klíčem emali bbb. Stránka answer.asp zobrazí „zadané hodnoty“ aaa a bbb. Tohoto vcelku triviálního přístupu lze využít pro dynamickou tvorbu stringu za otazníkem a tak předat hodnoty pro server. Nemusí jít tedy pouze o formulář, který vytvoří konstrukci za otazníkem Další příklad jednoduchým způsobem provádí výběr obrázku při kliknutí na odkaz: (stránka .../pr3/pr3_1.asp) <P>ukázka na využití QueryStringu jinak, než formulářem a metodou GET - odkaz přebírá hodnotu do QueryStringu a tím se zvolí hodnota proměnné </P> <P><a href=answer.asp?file=msdn_cz.gif>logo CZ</a></P> <P><a href=answer.asp?file=msdn_en.gif>logo EN</a></P> a stránka answer.asp obsahuje kód: (stránka .../pr3/answer.asp) <P><IMG SRC=<%=Request.QueryString("file") %> > </P> Při kliknutí na první odkaz se Request.QueryString("file") naplní hodnotou msdn_cz.gif, což má za následek, že v answer.asp se do atributu SRC vloží tato hodnota a zobrazí se tento obrázek. Podobně pokud se klikne na druhý odkaz, zobrazí se druhý obrázek. Tento příklad je ilustrativní v tom, že lze použít ještě složitější struktury naplnění kolekce QueryString. Připomeňme, že pokud se použije metoda POST, potom předávané hodnoty nejsou součástí URL adresy, ale přímo headeru HTTP požadavku a délka je na rozdíl od GET metody takřka neomezena. Pokud se však použije metoda POST ve formuláři, potom se nenaplní objekt kolekce QueryString, ale kolekce Form (která je také obsažena v Request objektu). Je třeba podotknout, že pro předání hodnot do do Request objektu ať už metodou GET nebo POST se nemusí použít pouze editační pole (TYPE = “TEXT”}, ale i jiné standardní prvky DHTML. Jako příklad na použití POST metody a jiných prvků ve formuláři ukažme například použití radiobuttonů (přepínačů): 10 základy asp autor: Ilja Kraval strana 11/25 (stránka .../pr4/pr1_4.asp) <P>Jiné prvky formuláře, např. radiobutton:</P> <CENTER> <P>Muž nebo žena</P> <P> <FORM NAME="frm" ACTION="answer.asp" METHOD="POST"> <INPUT TYPE = "RADIO" NAME="Pohlavi" VALUE="Muž">Muž <INPUT TYPE = "RADIO" NAME="Pohlavi" VALUE="Žena">Žena </P> <INPUT TYPE="Submit" VALUE="OK"> </CENTER> </FORM> a v answer.asp kód (stránka .../pr4/answer.asp) <P>vybráno: <%=Request.Form("Pohlavi")%></P> Použití kolekce ServerVariables Kolekce ServerVariables obsahuje velké množství informací od údajů z HTTP (header apod., údajů spojených s certifikací, s klientem , IP adresy apod. Ukažme si některé příklady pro získání těchto informací: Získání názvu serveru (stránka .../pr5/pr5_1.asp) <P>příklad na server variable SERVER NAME </P> <P>Tento server se jmenuje:</P> <P><% = Request.ServerVariables("SERVER_NAME") %> </P> <P>a tato hodnota se dává do odkazu např. takto:</P> <A HREF="http://<% =Request.ServerVariables("SERVER_NAME")%>/sem4/pr1/pr1_1.asp"> toto je první příklad semináře... </A> <P>např. toto použijeme u aplikace, kde neznáme jméno serveru při psaní aplikace...</P> 11 základy asp autor: Ilja Kraval strana 12/25 Získání typu browseru (stránka .../pr6/pr6_1.asp) <P>Příklad na zjištění browsera je jednoduchý</P> <% = Request.ServerVariables("HTTP_USER_AGENT") %> Získání nastaveného rozlišení browseru Nejprve se pomocí jednoduchého skriptu na straně klienta získají hodnoty „výška“ a „šířka“, které se předají pomocí otazníkové konvence (pro parsing QueryString) do URL a provede se redirect na takto získané URL: (stránka .../pr7/pr7_1.asp) <SCRIPT LANGUAGE="JAVASCRIPT"> s="?W=" + screen.width + "&H=" + screen.height location.href="answer.asp" + s </SCRIPT> Na stránce kam došlo k automatickému přesměrování se mohou hodnoty přečíst pomocí kolekce QueryString, například: (stránka .../pr7/answer.asp) <P>width= <% =Request.QueryString("W")%></P> <P>height= <% =Request.QueryString("H")%></P> Získání nastaveného jazyka na klientovi (stránka .../pr8/pr8_1.asp) <P>lang = <% = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")%></P> Použití kolekce Cookies - zápis a čtení Jedno cookie je „malá informace“, kterou si klient na žádost serveru může uschovat a použít později. Většinou se jedná o přednastavení položek v editačních polích apod. (Je třeba vzít na vědomí, že klient si může použití cookies vypnout). Samotné cookie jako objekt může mít další své atributy, které lze nastavit (doba expirace apod.) Jednoduchý příklad na demonstraci cookie: (stránka .../pr9/pr9_1.asp) 12 základy asp autor: Ilja Kraval strana 13/25 <%@ Language=VBScript %> <% Response.Cookies("mycook") = "hello" %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <P>Příklad na cookie. V úvodu stránky došlo k zápisu cookie pomocí Response.Cookie... Druhá stránka převezme cookie od klienta a ukáže hodnotu</P> <a href="answer.asp"> ukaž cookie... </a> </BODY> </HTML> Při načtení této stránky dojde k zápisu cookie u klienta. Na jiné stránce si převzaté cookie můžeme zobrazit: (stránka .../pr9/answer.asp) <P>cookie "mycook" má hodonotu</P> <P><% = Request.Cookies("mycook") %> Response objekt Objekt Request sloužil k převzetí informací ze strany klienta. Objekt Response slouží k opačnému účelu - k řízení přenosu informace od serveru ke klientovi. Použití obou objketů vytváří základní koncept komunikace přes ASP. Seznam kolekcí, properties a metod objektu Response ukazuje následující obrázek: 13 základy asp autor: Ilja Kraval strana 14/25 Response objekt Collections • Cookies Properties Methods • Buffer • AddHeader • CacheControl • AppendToLog • Charset • BinaryWrite • ContentType • Clear • Expires • End • ExpiresAbsolute • Flush • IsClientConnected • Redirect • PICS • Write • Status obrázek 6 Objekt Response a jeho kolekce, properties a metody Rozdělení funkcionality objektu Response vložení informace do stránky write, zapisuje proměnnou do současného HTTP binarywrite zapisuje proměnnou do současného HTTP bez konverze zaslání cookie cookies předává cookie klientovi redirect browseru redirect přesměruje browser na jiné URL bufferování buffer nastaví možnost bufferingu stránky flush vyprázdní buffer a pošle jeho obsah klientovi clear vyprázdní buffer (a nic víc) end vyprázdní buffer a ukončí plnění a přenos nastavení property stránky expires specifikuje délku času za jak dlouho dojde k expiraci stránky cachované na browseru expiresabsolute specifikuje absolutně datum a čas expirace cachované na browserou contenttype specifikuje HTTP contenttype addheader nastavuje název HTML headeru na hodnotu status nastavuje status line serveru, například 401 Unauthorized cachecontrol nastavuje informaci pro proxy server a chachování 14 základy asp autor: Ilja Kraval strana 15/25 PICS nastavuje PICS label charset nastavuje charset do headeru check konetku klienta isclientconnected vrací zda je klient konektován Rozdíl mezi Response.Write a <% = %> Jsou možné dvě syntaxe pro výstup proměnné s konverzí HTML, buď se použije „rovnítková“ konvence anebo Response.Write. Z hlediska výstupu jsou si obě syntaxe rovnocenné, avšak v některých případech je výhodnější použít Response.Write namísto rovnítka. Nechejme provést výstup z cyklu pomocí rovnítka například takto: (file .../pr10/pr10_1.asp) <% for i = 1 to 6 %> result: <% = i %> <BR> <HR> <%next%> Všimněte si, že statické části stránky jsou po částech result: a poté <BR> <HR> Mezi tyto části je vložen skript serveru, přičemž pouze v části <% = i %> dojde k výstupu do dynamicky tvořené stránky ASP. Stejného výsledku výstupu z cyklu můžeme dosáhnout tímto kódem: (viz stejný file .../pr10/pr10_1.asp) <% for i=1 to 6 Response.Write ("result : " & i & "<BR><HR>") next %> Tento zápis je do jisté míry přehlednější - skript je celistvý. Z tohoto příkladu vyplývá jeden zajímavý závěr: Response.Write má podobný význam jako syntaxe <% %>, ale inverzně. Zatímco <% %> vkládá skript serveru do výstupu (streamu HTML), Response.Write vkládá výstup streamu HTML do server skriptu. Metoda BinaryWrite na rozdíl od Write neprovádí konverzi a provede výstup jako binární balík dat bez ohledu na jeho obsah (obrázky apod.). 15 základy asp autor: Ilja Kraval strana 16/25 Buffering v ASP Pomocí Response objektu lze řídit výstup do browseru klienta pomocí bufferování. Pokud se na začátku stránky nastaví povolení bufferování, může se provádět postupný a řízený výstup na browser klienta. Postupné nebo okamžité zobrazování mezivýsledků v ASP Pomocí metody flush můžeme vypustit držený obsah bufferu ke klientovi až v okamžiku, kdy je to třeba, například: viz file ...pr11/pr11_1.asp <%@ Language=VBScript %> <%Response.Buffer= true %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <P>Příklad na buffering 1, všimněte prosím v úvodu, že ve skriptu je nastaveno na buffering na true</P> <P>Čekejte...</P> <% Response.Flush for i=1 to 6 for j=1 to 600000 j=j+1 next Response.Write("result: " & i & "<br>") Response.Flush next %> poznámka: Příklad obsahuje zpožďovací smyčku. V tomto případě je flush umístěn za každý zápis do bufferu proměnné i (a nový řádek) Response.Write("result: " & i & "<br>"), čímž dojde k okamžitému zobrazení výsledku již v průběhu cyklu. Pokud příkaz Response.Flush umísítme až za next, tj. takto: ... 16 základy asp autor: Ilja Kraval strana 17/25 Response.Write("result: " & i & "<br>") next Response.Flush %> dojde k zobrazení výsledku až po proběhnutí celého operace (celého cyklu). Větvení programu a buffering v ASP Buffering se používá také pro větvení programu, kdy v určité větvi se má výsledek zobrazení podstatně změnit od začátku oproti jiné větvi. Použije se proto vyčištění bufferu a „začne se nanovo“. Podobného účinku se dá docílit poněkud kostrbatěji pomocí proměnné, která drží obsah stránky (tato proměnná nahrazuje vlastně buffer). Příkladem takovéto situace je chybový stav, který ruší již připravené zobrazení a musí se zobrazit něco úplně jiného (například error hlášení apod.). Následující kód simuluje sekvenci operací. Pokud je výsledek funkce simulovaný proměnnou operace false, dojde k zobrazení chybového hlášení, v opačném případě se zobrazí všechny OK sekvence: viz file ...pr11/pr11_2.asp <P>Buffering lze použít pro větvení programu, kdy se změní výsledek a nemusíme si výstup z ASP do HTML uschovávat do proměnné, ale je v bufferu, který se buď vyčistí anebo zobrazí</P> <P>Provádíme nějaké výpočty...</P> <P>Chodíme do DB apod.</P> <% Response.Flush %> <% Response.Write("zatím je mezivýsledek OK!<BR>") Response.Write("další mezivýsledek OK!<BR>") Response.Write("další mezivýsledek OK!<BR>") Response.Write("další mezivýsledek OK!<BR>") 'operace = false operace = true if operace = true then Response.Write("další mezivýsledek OK!<BR>") Response.Write("Všechno OK!") else Response.Clear Response.Write ("Všechno špatně<BR>") end if %> 17 základy asp autor: Ilja Kraval strana 18/25 Změňte hodnotu proměnné operace = true na operace = false pomocí přepnutí apostrofu a sledujte výsledek. COM objekty v ASP Základem ASP je skript technologie. Znamená to ve svém důsledku, že lze použít vlastnoručně vytvářené objekty COM a volat je stejně jako v každém jiném skriptu (například VBskcipt u VBS filu, makro aplikace u aplikací Office - VBA apod). Poloha ASP se takto dostává do jiné roviny - pokud totiž business logiku přeneseme pouze do objektů COM, samotný skript ztrácí business logiku a stává se pouze pojítkem mezi klientem a business objektem. Tento stav je z hlediska návrhu architektury ideální, dochází k re-use binárních objektů na síti přes ASP Internetem nebo Intranetem. Poznámka: Může nastat případ, kdy se tato technologie takto nemůže použít z organizačně obchodních důvodů. Pokud je například WEB server pouze pronajatý, potom vám provider ze samozřejmých důvodů nedovolí použít vaše vlastní (a pro něj neznámé) COM objekty. Objekt Server Vlastnosti objektu Server ukazuje následující obrázek Server objekt Collections Properties • ScriptTimeOut Methods • CreateObject • HTMLEncode • MapPath • URLEncode obrázek 7 Objekt Server a jeho vlastnosti Objekt Server jak vidět „nedrží“ žádné kolekce. Vlastnost ScriptTimeOut nastavuje délku time-out pro výkon scriptu (například při chybě apod.). Tato časová délka nemůže být kratší než administrativně nastavená implicitní hodnota (bez administrativního zásahu je implicitní hodnota 90 s). Použití metody Server.CreateObject Podobně jako v jiných prostředí skriptu volání CreateObject slouží k zavedení instance objektu- COM v prostředí daného skriptu. Existují dva podstatné rozdíly v ASP oproti „klasickému“ CreateObject v jiných skript prostředích: 18 základy asp autor: Ilja Kraval strana 19/25 1. Musí být vždy v syntaxi uvedeno Server.CreateObject - nestačí pouze CreateObject jako např. ve VBScriptu 2. Viditelnost daného objektu je závislá na tom, jak a kde tento objekt vzniká a jakému druhu proměnné je přiřazen. O viditelnosti (tzv. scope) bude pojednáno dále u objektů Session a Application Jinak je použití COM objektu stejné, jako u jiných skript prostředí. Příklad 1 na tvorbu instance COM objektu v ASP Vzhledem k tomu, že v předešlých kapitolách máme již zavedenu komponentu Barvy ActiveX DLL, použijeme právě tuto COM komponentu pro ukázku vytvoření instance: (viz file pr12/pr12_1.asp) <P>Musíte mít zaregistrovánu komponentu BarvyDLL (viz předešlé semináře), v kódu změňte cestu k souboru UDL</P> <% set colB = Server.CreateObject("BarvyDLL.ccolBarvy") colB.NaplnZDatabaze ("file name=d:/barvy.udl") for each it in colB Response.Write(it.text & "<BR>") next %> <P> Podobný příklad můžeme převést na výběr barvy: (viz file pr13/pr13_1.asp) <SELECT NAME="Barvy"> <% set colB = CreateObject("BarvyDLL.ccolBarvy") colB.NaplnZDatabaze ("file name=d:/barvy.udl") for each it in colB Response.Write("<OPTION VALUE=") Response.Write(it.kod & ">" & it.text) next %> </SELECT> kde se zobrazí seznam barev jako combobox. V předešlém příkladu se objekt kolekce barev zrodil na dané stránce a pouze s touto stránkou také žije. Oblast viditelnosti jev tomto případě oblast jedné stránky. Tento příklad je pouze ilustrací zrodu objektu, málokdy se totiž používá tato oblast viditelnosti objektu omezená na jednu stránku. Všimněme si, jak jsme jednoduchým způsobem přemístili již hotovou část systému ve tvaru COM objektu do nového prostředí pomocí ASP na Internet. 19 základy asp autor: Ilja Kraval strana 20/25 Oblasti viditelnosti proměnných v ASP V aplikaci ASP existují tři oblasti viditelnosti proměnné nebo COM objektu (oblast platnosti a použitelnosti): 1. oblast viditelnosti jedné stránky - proměnnou nebo objekt lze použít pouze na této stránce (viz předešlý příklad). Podobně libovolná proměnná zavedená na dané stránce jako lokální na této stránce má oblast viditelnosti pouze na této stránce a jinde nemůže být volána. 2. oblast viditelnosti v rámci jednoho Session. V rámci „sezení“ jednoho přihlášeného klienta lze zavést proměnné nebo objekty, které jsou použitelné z několika stránek, ale patří pouze k danému Session (nesdílejí se mezi Session). K zavedení takto viditelných proměnných slouží objekt Session. 3. oblast viditelnosti v aplikaci. Lze zavést viditelnost proměnné nebo objektu v celé aplikaci, takž informace nesená v této proměnné (objektu) je sdílená mezi všemi session. Application objekt Kolekce, property metody a události objektu Application ukazuje následující obrázek: Application objekt Collections • Contents Events • onStart Methods • Lock • StaticObjects • onEnd • Unlock obrázek 8 vlastnosti Application objektu Objekt Application umožňuje zavádět globální proměnné a objekty v aplikaci. Syntaxe zavedení takovéto proměnné je velmi jednoduchá - sám objekt Application je kolekcí těchto proměnných s klíčem názvu této proměnné. Proměnnou globální viditelnosti lze tedy jednoduše zavést pomocí klíče kolekce a zadání hodnoty, např.: <%... Application(“MyNumber”) = 100 ... %> anebo pro COM objekt takto: <%... Set Application(“MyObject”) = Server.CreateObject(...) %> 20 základy asp autor: Ilja Kraval strana 21/25 Význam kolekce Contents objektu Application a StaticObject Kolekce Contents obsahuje proměnné a objekty zavedené přes přiřazení do Application objektu skript příkazem. Ke kolekci Contents lze přistoupit pomocí výčtu For Each Item In Application.Contents, a získat tak výčtem všechny globální proměnné. Kromě možnosti zavést COM objekt na globální úrovni pomocí Server.CreateObject, lze zavést objekt také pomocí tagu <OBJECT> v souboru global.asa a nastavit mu SCOPE Application, název instance pomocí ID a PROGID: (viz soubor global16.txt) <OBJECT RUNAT=Server SCOPE=Application ID=colBarvy PROGID="BarvyDLL.CcOlBarvy"> </OBJECT> V tom případě je také objekt přístupný globálně (pod jménem ID zadaným v Tagu OBJECT), ale vyskytuje se v kolekci Applicaion.StaticObject, nikoliv v kolekci Contents. Události objektu Application Objekt zavádí dvě události, které můžeme obsloužit svým kódem, událost startu aplikace a ukončení aplikace. Odpovídající metody se jmenují Application_OnStart a Application_OnEnd. První metoda se spouští při stažení první stránky a druhá při shut-down serveru. Příklad - na začátku spuštění aplikace vyžadujeme natažení hodnot do objektu kolekce barev: Viz global16.txt sub Application_OnStart colBarvy.NaplnZDatabaze("file name=d:/barvy.udl") end sub Poznámka: Objekt je v tomto případě tvořen jako static object pomocí tagu. Druhá možnost je tento objekt pomocí Server.CreateObject: sub Application_OnStart Set Application(“colBarvy) = Server.CreateObject(“BarvyDLL.CcOlBarvy“) colBarvy.NaplnZDatabaze("file name=d:/barvy.udl") end sub Použití metody Lock a Unlock Protože proměnné resp. objekty v globální viditelnosti jsou sdílené mezi klienty (přesněji mezi session), může obecně dojít ke kolizi při pokusech zapsat do takovéto proměnné (nebo při volání objektu) od dvou klientů současně nějaké hodnoty. Aby se takovýmto kolizím předešlo, je umožněno „zamknout“ nebo „odemknout“ celý Application objekt (se svými proměnnými a objekty) pomocí jeho metod Lock a Unlock. Každé změně u globální proměnné nebo objektu by mělo předcházet volání metod Lock a po provedení této změny volání Unlock. 21 základy asp autor: Ilja Kraval strana 22/25 Příklad na globální viditelnost proměnné (viz file pr15/pr15_1.asp) V tomto příkladu se jednoduchým způsobem při každém re-loadu stránky zvýší hodnota globální proměnné: <% Application("MyNumber") = Application("MyNumber") + 1 %> V jiné stránce (viz file pr15/answer.asp) se pouze tato hodnota proměnné zobrazí: <P><% = Application("MyNumber")%></P> Nyní otevřete celkem třikrát instanci browseru (vzniknou tří okna browseru): Na první a druhé instanci browseru nastavte URL na stránku, která zvyšuje hodnotu proměnné, na třetí instanci nastavte URL na stránku. Provádějte postupně re-load stránek u všech tří instancí browseru. Je zřetelné sdílení informace v proměnné. Session objekt Session objekt poskytuje potřebné vlastnosti na úrovni jednoho session. Kolekce, property metody a události objektu Session ukazuje následující obrázek: Session objekt Properties Methods • Contents • CodePage • Abandon • StaticObjects • LCID Collections • SessionID • TimeOut Events • onStart • onEnd obrázek 9 Vlastnosti objektu Session Session objekt je obdobou Application objektu s tím rozdílem, že Application objekt se týkal celé aplikace, kdežto Session objekt se týká jednoho session klienta. Poznámka: Zavedený koncept session umožňuje vytvořit konstrukci jednoho „rozhovoru“ klienta se serverem. Jednotlivé HTTP požadavky a odpovědi mezi klientem serverem jsou obecně na Internetu nezávislé. Jejich analytické sjednocení do jednoho rozhovoru tzv. session umožňuje technologie cookie a zavedení identifikátoru jednoho session SessionID. Session a property SessionID Základním prvkem konceptu session je property SessionID. Každému session je přiřazen jednoznačný identifikátor, jeho hodnota je v tomto property SessionID. 22 základy asp autor: Ilja Kraval strana 23/25 Příklad: Představme si, že na úrovni scope Application zavedeme kolekci všech SessionID. Lze potom pracovat se všemi přihlášenými klienty a rozlišovat je v aplikaci (například hráči ve hře apod.), každý z nich má své SessionID. Poznámka: Pokud se otevře nová instance browseru a dojde k přihlášení se ke stejnému serveru, toto přihlášení zakládá nové nezávislé session s novým SessionID, i když stroj klienta je stejný. Proměnné a objekty v oblasti viditelnosti Session Zavedení proměnných a objektů na úrovni session (v oblasti viditelnosti jednoho session) je velmi podobné jako u objektu Application. Podobně lze přidat novou proměnnou s hodnotu do kolekce Session (resp. změnit její hodnotu), např. takto: <% Session(“MyNumber”) = 100 %> a podobně pro objekt: <% Set Session(“MyObject”) = Server.CreateObject(...) %> Události Session_OnStart a Session_OnEnd Podobně jako Application objekt, také Session objekt má události zahájení a ukončení session. V metodách Session_OnStart a Session_OnEnd se může umístit kód, který je třeba vykonat při těchto událostech. Příklad na login do aplikace v ASP Jako příklad na použití Session objektu si ukažme přístup při řešení loginu do aplikace (například jménem a heslem apod.). Není problém vytvořit stránku s formulářem pro zadání hodnot jméno a heslo a převzít je. Problém je v tom, že pokud neošetříme další logiku v chodu stránek, může se na jiné další stránky klient dostat i bez hesla. Stačí, když zadá cestu k této další stránce a obejde tak první login stránku. Poznámka: Problematika je ještě složitější v případě bankovních aplikací. Je potom třeba pro přenos HTTP použít moderních kryptografických metod (např. SSL) včetně vnějšího zařízení pro autentikaci jak klienta, tak serveru. Jako příklad login stránky viz pr17/pr17_1.asp <PRE> <CENTER> <FORM NAME=Login ACTION="answer.asp" method=GET> Heslo: <INPUT TYPE="TEXT" NAME="txtLog"> <BR> heslo je: www.objects.cz <INPUT TYPE="SUBMIT" NAME="OK" VALUE="OK"> </FORM> </CENTER> </PRE> V tomto případě se vyžaduje pouze heslo. Po převzetí hodnoty přes INPUT se přesměruje požadavek na stránku answer.asp, která začíná tímto skriptem: <%@ Language=VBScript %> <% password = Request.QueryString("txtLog") 'převzetí proměnné 23 základy asp autor: Ilja Kraval strana 24/25 if password = "www.objects.cz" then session("Logged") = true 'viditelnost proměnné Logged je session, 'proměnná Logged má implicitní hodnotu false end if 'na této stránce nemusíme setrvat, provede se redirect... 'změňte adresu na správnou: Response.Redirect("http://ilja/sem4/pr17/anotherpage.asp") %> Nejprve se vyhodnotí heslo (v tomto případě pouze porovnáním s jedním stringem) a pokud je OK, potom se do session proměnné Logged nastaví hodnota true. V opačném případě lze buď vypsat chybové hlášení, nebo vrátit se na stránku login apod. (v příkladu není uvedeno). Jiná stránka aplikace, která má být chráněna proti přístupu bez loginu, začíná skriptem, který vyhodnotí hodnotu proměnné Logged. Pokud je false, neprovede se vykonávání aplikace a například se aplikace vrátí na login stránku: <%@ Language=VBScript %> <% if not session("Logged") Then 'nepovedlo se zalogovat, proměnná je false, přesměrujeme na 'první stránku příkladu Response.Redirect("http://ilja/sem4/pr17/pr17_1.asp") end if %> Další objekty v ASP V ASP aplikaci můžete zapojit objekty a komponenty COM: 1. Vestavěné objekty ASP (zmíněná šestice) 2. COM objekt „vlastní výroby“, tj. business logika aplikace, například BarvyDLL 3. Objekty MS Scripting 4. Objekty dodávané od MS a od třetích stran jako další nadstandardní Scripting Pomocí knihovny skriptingu můžete použít tuto sadu objektů: Dictionary object (trochu dokonalejší kolekce) FileSystemObject (pro práci s fily, adresáři, textovými soubory atd.) Err object (zpracování errorů) Server komponenty Jedná se o sadu komponent standardně dodávaných od MS (viz Resource Kit) Ad Rotator (např. různé obrázky při loadu) Browser Capabilities (zodpoví co vše podporuje klient) 24 základy asp autor: Ilja Kraval strana 25/25 Content Linking (se stránkami s obsahem jako v knize) Content Rotator (jako Ad rotator text) Page Counter (počítadlo této stránky) Permission Checker (permission čtení filu) Counters (počítadlo obecné) MyInfo (informace uloženy v XML) Tools - některé funkcionality Status - server status informace, zatím nefunkční Objekty MS Samples jsou umístěny http://backoffice.microsoft.com/downtrial/moreinfo/iisamples.asp ASP2HTM - stažení do HTML souboru. Registry Access Text Formatter Konec ASP 25
Podobné dokumenty
Active Server Pages
Plecháč, V. Databáze na Webu.1. vyd. Praha :
GComp, 2000. 244 s. ISBN 80-85649-82-9.
http://www.activeserverpages.cz/
http://www.asp.cz/
Co je Dojo?
strEvent. Více informací v manuálu: http://api.dojotoolkit.org/jsdoc/1.2/dojo.connect
Zpráva o stavu č. 4 - Projekt Modrá kniha
důkazy o tomto fenoménu, všechny informace, které byly získány jsou od
veteranů z 2. světové války. Je k dispozici pouze několik faktů.
API XML 3.0 - SMS.SLUŽBA.cz
kde id je ID zprávy, ke které se doručenka váže.
Tag messages může obsahovat "neomezený" počet (výchozí nastavení vrací pouze jeden tag
message) vnořených tagů message různého typu. Počet převzatýc...
Šablona služeb.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\jméno naší služby
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\jméno naší služby
První zápis je o údajích služby, d...
API_XML30 pro textové SMS zprávy do ČR a do zahraničí
kde id je ID zprávy, ke které se doručenka váže.
Tag messages může obsahovat "neomezený" počet (výchozí nastavení vrací pouze jeden tag
message) vnořených tagů message různého typu. Počet převzatýc...
Kognitivní stimulace pacientů trpících Alzheimerovou chorobou
systémem Android, která bude vhodná pro stimulaci kognitivních funkcí jak pacientů trpících
mírnou formou demence, tak zdravých lidí. K řešení tohoto úkolu je třeba seznámit se
s problémem deklinac...
základy gis - Herber.kvalitne.cz
Geografická informace a GIS
Dámeme-li ví
více „prů
průsvitek“
svitek“ na sebe,
máme zá
základ geografické
geografického
informač
informačního systé
systému (GIS)
Geografická
Geografická informace ...