Pojem "server" jste ji₧ pravd∞podobn∞ n∞kdy slyÜeli. T°eba p°i uploadovßnφ webov²ch strßnek nahrßvßte na server. Programy m∙₧ete stahovat z download server∙. Obvykle se tφmto pojmem myslφ poΦφtaΦ, kter² je umφst∞n kdesi v sφti (a to nejen tΘ celosv∞tovΘ), kter² poskytuje ostatnφm poΦφtaΦ∙m n∞jakΘ slu₧by. Tento pojem ale zßrove≥ zahrnuje i software, kter² na danΘm stroji b∞₧φ. Internet Information Server je p°ekvapiv∞ taky server.
Klient je ten poΦφtaΦ na druhΘ stran∞, kter² zadßvß po₧adavky a nechß se obsluhovat. A zase ten software, co je obsluhovßn. T°eba Internet Explorer n∞d∞lß nic jinΘho, ne₧ ₧e zobrazuje data, kterß mu poÜlou servery. V naÜem p°φpad∞ si klient °ekne o strßnku a server mu ji poÜle. JednoduchΘ? Ani moc ne, ale nebudeme zabφhat do technick²ch detail∙, kterΘ jß neznßm a vy byste je nepot°ebovali. Proto₧e je ASP.NET technologie serverovß, bude nßs zajφmat, co ud∞lß server p°ed tφm, ne₧ strßnku poÜle klientovi. Kdyby jsme se zab²vali JavaScriptem, zajφmalo by nßs zpracovßnφ na klientovi - v InternetovΘm prohlφ₧eΦi.
Tak₧e jak to probφhß? Na serveru (poΦφtaΦi) pracuje server (program), kter² si hlφdß, jestli n∞kdo nßhodou nevolß dan² poΦφtaΦ o strßnku. Pokud ano, najde si ji disku (kdy₧ ji nenajde, tak vyhodφ znßmou zprßvu 404). Pak ji p°edhodφ k zpracovßnφ serverov²m programovacφm a skriptovacφm jazyk∙m (ASP, PHP, ASP.NET). Strßnka je mu vrßcena pat°iΦn∞ p°e₧v²kßna a u₧ obsahuje pouze HTML k≤d, tak₧e ji server poÜle klientovi. Ten mu poÜle zprßtky pßr po₧adavk∙ na obrßzky, kterΘ jsou na danΘ strßnce odkazovßny.
Ono je to ale opravdu jednoduchΘ. Webov² server je vcelku jednoduch² program. VeÜkerou prßci oded°ou ty p°e₧v²kßvacφ programy.
Je Φas vrßtit se zp∞t k tomuto systΘmu. Co to je?
Samotn² .NET je "nov²" (od p°edstavenφ u₧ jsou to asi Φty°i roky) p°φstup Microsoftu k Internetu. Zßkladem .NETu jsou webovΘ slu₧by. Celou sΘrii Φlßnk∙ o n∞m najdete na serveru ASP Network. S aplikacφ tΘto technologie jste se ji₧ t°eba setkali v souvislosti se systΘmem .NET Passport nebo pokud jste pod Windows XP zkouÜeli spustit soubor s nenadefinovanou p°φponou - systΘm se pak pokusφ najφt p°es webovou slu₧bu vhodn² program. P°esn∞ takhle by to m∞lo fungovat.
.NET Framework je zßklad, na kterΘm .NET platforma stojφ. Na tomto systΘmu jsou vÜechny mo₧nosti .NETu zalo₧enΘ, pod nφm programujeme .NET aplikace. Pod nφm tyto aplikace b∞₧φ. Pod nφm b∞₧φ ASP.NET. Je to takovΘ novΘ API (Aplication programing interface, mo₧nß znßte API systΘmu Windows). Sklßdß se ze dvou zßkladnφch Φßstφ:
- CLR (Common Language Runtime) - B∞hovΘ prost°edφ pro vlastnφ aplikace stvo°enΘ pod .NET Frameworkem. Bez n∞j neb∞hajφ klientskΘ aplikace v n∞m napsanΘ, co₧ m∙₧e b²t docela omezujφcφ, uvß₧φme-li, ₧e je to 20 MB velkß obluda.
- BCL (Base Class Library) - Sada objekt∙, s kterou se jako programßto°i budeme setkßvat nejvφce. Ka₧dß funkce, kterou budeme pou₧φvat bude pat°it sem. Ka₧d² serverov² ovlßdacφ prvek sem pat°φ. Projφt si ji m∙₧ete v SDK Documentation v sekci Reference - Class Library nebo na msdn.microsoft.com v sekci Library, podsekcφch .NET Development, .NET Framework SDK, .NET Framework, Reference, Class Library.
V souΦasnosti existujφ dv∞ verze .NET Frameworku.
1.0 je souΦßstφ Visual Studia .NET 2002.
1.1 je souΦßstφ Visual Studia .NET 2003 - oproti prvnφ verzi samoz°ejm∞ opravuje n∞kolik chyb, standardn∞ obsahuje sadu nßstroj∙ pro v²voj mobilnφch aplikacφ, podporuje IPv6, p°inßÜφ nativnφ podporu pro prßci s ODBC a Oracle databßzemi, atp. Na strßnce Microsoftu najdete p°ehled hlavnφch zm∞n.
Verze 2.0 jeÜt∞ nebyla uvedena - je spolu s nov²m Visual Studiem znßma pod k≤dov²m nßzvem Whidbey. Hlavnφ d∙raz by v nφ m∞l b²t kladen na dalÜφ urychlenφ prßce programßtora. M∞la by obsahovat vφce webov²ch prvk∙ (pr² 45 nov²ch), pracuje se na v²konu celΘho systΘmu. Whidbey bude podporvat 64bitovΘ procesory. Uvedeno by m∞lo b²t tento rok, ve°ejnß Beta bude podle Scotta Guthrie na ja°e.
Na webu www.asp.net najdete zßkladnφ informace o ASP.NET a Visual Studiu Whidbey. Pokud chcete v∞d∞t jeÜt∞ vφc, doporuΦuji rozhovor na serveru TheServerSide.NET, kde Scott Guthrie, jeden z tv∙rc∙ ASP.NET, mluvφ o novinkßch v novΘ verzi.
O Whidbey budete v tΘto rubrice samoz°ejm∞ nadßle sl²chat.
Dost bylo teorie! Jak vlastn∞ takov² serverov² "zdrojßk" vypadß?
<%@ Page Language="VB" Debug="True" %> <%@ Import Namespace="System.Drawing" %> <SCRIPT RUNAT="server"> Sub ZmenText(obj As Object, e As EventArgs) popisek.Text = "Stisknul jste tlaΦφtko." End Sub </SCRIPT> <HTML> <HEAD> <TITLE>Programovßnφ v ASP.NET</TITLE> </HEAD> <BODY> <FORM RUNAT="server"> <ASP:Label ID="popisek" RUNAT="server" Text="Nic se nestalo..." /> <ASP:Button ID="tlacitko" TEXT="Odeslat" OnClick="ZmenText" RUNAT="server" /> </FORM> </BODY> </HTML>
P°φklad v Φinnosti si m∙₧ete prohlΘdnout na strßnce www.czech-ware.net/lansky/CHIP/asp-zac2/priklad.aspx.
ZdrojovΘ k≤dy najdete na tomto CD v ZIP archivu asp-zac2.zip.
To mi p°ipomφnß - jeÜt∞ jsem vßm ne°ekl, jak vlastn∞ v tom pracn∞ nainstalovanΘm serveru n∞co spustit. V utilit∞ ke sprßv∞ IIS (kterou jsme si p°edstavili minule) otev°eme okno nastavenφ naÜeho serveru (taktΘ₧ jsme si ukßzali). Na kart∞ Domovsk² adresß° si zjistφme, pop°φpad∞ p°enastavφme, cestu na disku naÜeho poΦφtaΦe, kde bude z°φzeno mφsto pro obsah webu. Tam nakopφrujeme pot°ebn² soubor (priklad.aspx - ASPX je typickß p°φloha pro ASP.NET) a spustφme prohlφ₧eΦ, do n∞j₧ naklepeme adresu localhost/priklad.aspx. Server bude chvilku pracovat a pak by se nßm m∞la zobrazit k²₧enß strßnka.
A pokud pracujete s Web Matrixem? V tom p°φpad∞ staΦφ otev°φt po₧adovan² soubor a stisknout klßvesu F5. Odsouhlasφte okΘnko s vytvo°enφm Web Matrix serveru na portu 8080 a otev°e se vßm IE s po₧adovanou strßnkou.
Prvnφ objektem na strßnce jsou tzv. strßnkovΘ direktivy. Jsou pou₧φvßny k nastavenφ parametr∙ vlastnφ strßnky - tj. v jakΘm jazyce je napsßna (<%@ Page Language=VB nebo C#), jestli se mß v p°φpad∞ chyby vypisovat zdrojov² k≤d pro lepÜφ orientaci (Debug=True), cachovßnφ strßnky atp.
To ale nenφ vÜechno, co do t∞chto direktiv pat°φ, jsou tu i tzv. importy prostor∙ nßzv∙. Struktura Frameworku je velmi hlubokß a kdybych nap°φklad kreslili obrßzek, mohlo by nßm vadit, ₧e musφme neustßle pou₧φvat podobnΘ volßnφ metod. V tomto p°φkladu je tedy na ukßzku p°idßn i import nßzv∙ (Import Namespace="System.Drawing"), kter² nßm umo₧nφ psßt nap°φklad mφsto volßnφ System.Drawing.Color.FromArgb(...) pouze Color.FromArgb(...) D∙le₧itΘ je, ₧e tento import nemß ₧ßdn² vliv na n∞jakou funkci. Jde "jen" o pohodlφ programßtora.
Nejd∙le₧it∞jÜφ Φßst strßnky - vlastnφ programovßnφ najdeme zde. Z tΘto sekce ovlßdßme serverovΘ ovlßdacφ prvky, reagujeme na udßlosti, naΦφtßme ·daje z databßze atp. A₧ se dostaneme dßl, p°estane nßm i toto odd∞lenφ staΦit a pokusφme se dostat logiku aplikace od Φßsti zobrazovacφ ·pln∞ pryΦ.
Blok zaΦφnß vßm u₧ mo₧nß znßm²m tagem SCRIPT, kter² mß vÜak v tomto p°φpad∞ velmi d∙le₧it² argument RUNAT="server", kter² nazaΦuje ASP.NET, ₧e se o obsah mß starat on. Kdyby jste tento parametr zapomn∞li, k≤d by se normßln∞ odeslal na klienta a ten by se jej pokusil pochopit jako klientsk² program.
Vlastnφ k≤d uvnit° je v tom jazyku, kter² jste nadeklarovali v direktiv∞ Page, m∙₧ete ho ale nastavit i jako parametr tagu SCRIPT (<SCRIPT LANGUAGE="C#">). V p°φÜtφ lekci se na jeho syntaxi zam∞°φme, zatφm nßm staΦφ ved∞t, ₧e zßpis
popisek.Text = "Stisknul jste tlaΦφtko."Znamenß, ₧e se vlastnosti Text objektu popisek p°i°adφ text "Stisknul jste tlaΦφtko." Za b∞hu se to projevφ tak, ₧e jakmile se procedura spustφ, zm∞nφ se koukek textu definovan² prßv∞ objektem popisek.
Zbytek je skoro klasickΘ HTML a₧ na pßr divn²ch znaΦek, kterΘ jsou vyznaΦeny tmav∞ modrou. NßpadnΘ nßm na nich m∙₧e b²t i to, ₧e se nachßzejφ uvnit° tagu FORM s vlastnφ RUNAT="server".
Jde o tzv. serverovΘ ovlßdacφ prvky. Je to velice chytrß v∞c. Pokud jste si n∞kdy hrßli s n∞jak²m vizußlnφm programovacφm nßstrojem (Delphi, VB), urΦit∞ jste si vÜimli, ₧e se nßvrh sklßdß ze dvou Φßstφ - v jednΘ tvo°φte nßvrh vzhledu a v druhΘ navrhujete logiku. Programovßnφ na serveru s tφmto postupem nemφvalo nic moc spoleΦnΘho, proto₧e zatφmco modernφ programovßnφ stßlo na udßlostech, tak architektura klient-server je bezstavovß. Server nerozpoznßvß jednoho u₧ivatele od druhΘho. Pokud mu p°ijde po₧adavek, zpracuje ho a poÜle ho zpßtky. Za takov²ch okolnostφ se s udßlostmi pracuje jen velmi t∞₧ko.
Ale jde to. Technologie .NET Framework nßdhern∞ spojila tak vzdßlenΘ oblasti jako je navrhovßnφ okennφch aplikacφ a tvorbu webov²ch strßnek. V ASP.NET toti₧ takΘ vklßdßte do vaÜφ strßnky objekty, kterΘ mohou inteligentn∞ zobrazovat i naΦφtat ·daje, stejn∞ jako ve Visual Basicu. V Φßsti k≤du pak m∙₧ete nastavit, ₧e pokud u₧ivatel klikne na to a to tlaΦφtko, provedou se ty a ty akce. Programovßnφ °φzenΘ udßlostmi!
Jak to funguje? Spus¥me si naÜi aplikaci. Hle∩me, co se stalo s naÜφ strßnkou:
<HTML> <HEAD> <TITLE>Ilustrace programovßnφ v ASP.NET</TITLE> </HEAD> <BODY> <form name="_ctl0" method="post" action="priklad.aspx" id="_ctl0"> <input type="hidden" name="__VIEWSTATE" value="dDwtOTk1MjE0NDA4O3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDE+Oz47bDx0PHA8cDxs PFRleHQ7PjtsPEtsaWtudWwganN0ZSBuYSB0bGHEjcOtdGtvLjs+Pjs+Ozs+Oz4+Oz4+Oz5 DaJ6yKmm5UQHLhCcsw3ZWzt0pGA=="/> <span id="popisek">Kliknul jste na tlaΦφtko.</span> <input type="submit" name="tlacitko" value="╚ernß" id="tlacitko" /> </form> </BODY> </HTML>
VaÜi pozornost z°ejm∞ okam₧it∞ upoutal velmi divn² element input. Je skryt², tak₧e nemß na strßnce ₧ßdnou p°φmou funkci, p°itom je ale velmi d∙le₧it². To, ₧e je technologie klient-server bezstavovß se dß obejφt. Viz r∙znΘ cookies a sessions. Toto je dalÜφ mo₧nost. Server na zaΦßtek ka₧dΘho serverem zpracovßvanΘho FORM p°idß tento °ßdek, kter² udr₧uje stavovou informaci, tj. urΦuje kdo je kdo. Navφc tam vklßdß dalÜφ ·daje, kterΘ pot°ebuje pro svoji Φinnost.
ServerovΘ ovlßdacφ prvky zmizely - server je p°ebral - mφsto ASP:Label vlo₧il SPAN, mφsto ASP:Button INPUT TYPE="submit".
Tak₧e co ten p°φklad vlastn∞ d∞lß? Serverov² ovlßdacφ prvek Button mß vlastnost OnClick, kterß v naÜem p°φkladu udßvß hodnotu ZmenText. Tato vlastnost udßvß, co se mß stßt po kliknutφ na tlaΦφtko. Dalo by se to za°φdit i jinak - nap°φklad vyu₧φt udßlosti Click. Ka₧dopßdn∞ po kliknutφ na toto tlaΦφtko se provede jeden °ßdek k≤du, kter² zm∞nφ vlastnost Text objektu popisek (to je ten Label). Tφm se zm∞nφ jedin² text na strßnce.
M∙₧ete si vÜimnout zajφmavΘ v∞ci. Pokud na to tlaΦφtko kliknete a potΘ nechßte strßnku refreshnout (a to i bez op∞tovnΘho posφlßnφ dat), z∙stane zobrazen text Kliknul jste na tlaΦφtko. To je to hlφdßnφ stavu - na Internetu je to troÜku p°ekvapivΘ, ale naprosto logickΘ chovßnφ. P°ece jste na to tlaΦφtko ji₧ kliknul, ne? Je to velice v²hodnΘ. Pokud byste tam umφstil textovΘ pole, z∙stalo by po odeslßnφ vypln∞nΘ. Bylo by v²bornΘ, kdyby se takto chovali vÜechny formulß°e na Internetu - snad u₧ by Φlov∞k nikdy neztratil ₧ßdnß data kv∙li nevypln∞nΘmu poli P°φjmenφ babiΦky za svobodna...
V²hoda tohoto postupu je v tom, ₧e tu nenφ ₧ßdnß doba, kdy vyprÜφ platnost strßnky a vy data ztratφte. Ani nejste omezeni omezen²mi u₧ivateli s omezen²mi cookies. Pot°ebnß data si ASP.NET schovßvß v INPUTu __VIEWSTATE. Jedin² problΘm by mohl nastat s hodn∞ star²mi prohlφ₧eΦi... Ale to u₧ je minulost.
DalÜφ dφl je za nßmi! Tentokrßt u₧ to bylo troÜku slo₧it∞jÜφ a doufßm, ₧e jste pochopili, o co v tomto systΘm jde. Nakousli jsme mnoho zajφmav²ch tΘmat. P°φÜt∞ se podφvßme na struΦnou syntaxi jazyk∙ VB.NET a C#. Budeme to pot°ebovat, proto₧e serverovΘ programovßnφ bez programovßnφ by ned∞lalo dobrotu.
VeÜkerΘ nßm∞ty, dotazy a p°ipomφnky piÜte na adresu lansky@czech-ware.net.