Základy ASP

Transkript

Základy ASP
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

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/

Více

Co je Dojo?

Co je Dojo? strEvent. Více informací v manuálu: http://api.dojotoolkit.org/jsdoc/1.2/dojo.connect

Více

Zpráva o stavu č. 4 - Projekt Modrá kniha

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ů.

Více

API XML 3.0 - SMS.SLUŽBA.cz

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...

Více

Šablona služeb.

Š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...

Více

API_XML30 pro textové SMS zprávy do ČR a do zahraničí

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...

Více

Kognitivní stimulace pacientů trpících Alzheimerovou chorobou

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...

Více

základy gis - Herber.kvalitne.cz

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 ...

Více