| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NovΘ prvky ASP.NET je mo₧nΘ zaΦφt vyu₧φvat ve stßvajφcφch aplikacφch velmi rychle. Tφmto zp∙sobem m∙₧eme takΘ pracovat na v²voji rozpracovanΘ aplikace a pozvoln²m p°echodem se nauΦit tvorb∞ ASP.NET aplikacφ ani₧ by nßs migrace na nov² systΘm v²razn∞ji zdr₧ela v prßci.
Jen p°ipomφnßm, ₧e b∞hovΘ prost°edφ (.NET Framework) pro server je k dispozici zdarma, o vyÜÜφm v²konu dφky opuÜt∞nφ metody interpretace k≤du je toho takΘ popsßno spousta, ale takΘ °ada nov²ch okam₧it∞ pou₧iteln²ch komponent, striktn∞ objektovΘ programovßnφ, p°ehlednost a sdφlenφ k≤du jasn∞ mluvφ pro ASP.NET. Pokud tedy na svΘm serveru jeÜt∞ .NET Framework nemßte, proΦt∞te si tento Φlßnek a v∞°φm, ₧e jej doinstalujete jeÜt∞ dnes. Pokyny pro instalaci naleznete v minulΘm Φlßnku.
Nejd°φve si povφme n∞co o vzßjemnΘm "sou₧itφ" ASP a ASP.NET aplikacφ. StruΦn∞ °eΦeno û nenφ problΘmem. Na jednom serveru spolu m∙₧ete provozovat najednou obojφ aplikace. Trik je v tom, ₧e server mß zvlßÜ¥ nastaveno zpracovßnφ soubor∙ s p°φponou .asp a zvlßÜ¥ soubor∙ ASP.NET aplikacφ (*.aspx,*.ascx,*.asmx...), tak₧e ka₧d² po₧adavek je obslou₧en tou sprßvnou cestou, ani₧ by dochßzelo k negativnφmu ovliv≥ovßnφ obou systΘm∙.
Teoreticky je tak mo₧nΘ mφt v ASP.NET jen n∞kterΘ Φßsti aplikace (t°eba ty, kterΘ se nßm postupn∞ da°φ upravovat, nebo nov∞ dopsanΘ dopl≥ky. Prakticky je vÜak t°eba si uv∞domit, ₧e je ka₧d² systΘm obsluhovßn ·pln∞ jinou slu₧bou serveru a ·pln∞ jin²m mechanismem. SystΘm ASP nemß nic spoleΦnΘho s enginem zpracovßnφ ASP.NET aplikacφ. Z toho vypl²vß, ₧e pokud naÜe aplikace vyu₧φvß informace, kterΘ se na serveru uklßdajφ do session, application nebo vyu₧φvajφ tzv. view_state, nenφ vhodnΘ kombinovat oba systΘmy. Neexistuje ₧ßdn² mechanismus, kter² by dovedl p°edßvat takovΘ ·daje mezi ob∞ma systΘmy. Lze si sice dopsat vlastnφ obsluhu, kterß by mohla zabezpeΦit p°edßvßnφ ·daj∙ mezi ob∞ma systΘmy, myslφm si vÜak, ₧e v °ad∞ p°φpad∙ bude lepÜφ v podobnΘm p°φpad∞ bu∩ upravit pro ASP.NET aplikaci celou, nebo ji nechat funkΦnφ v ASP.
Migraci (p°evedenφ vyvφjenΘ nebo stßvajφcφ aplikace, ale takΘ p°evedenφ naÜeho stylu programovßnφ a uva₧ovßnφ) provedeme v n∞kolika krocφch - mφru pokroΦilosti si nadßvkujeme sami podle uvß₧enφ. Prvnφ, o co se pokusφme, je prost∞ zkompilovat n∞jakou naÜi aplikaci v ASP tak, aby pracovala v systΘmu ASP.NET. Nedostaneme tak ale plnohodnotnou ASP.NET aplikaci - ona sice pob∞₧φ, ale zpravidla nevyu₧ije pln² v²kon (nejsou dostupnΘ metody vφcevlßknovΘho zpracovßnφ MTA, aplikace je zpracovßna jednovlßknov²m principem STA). AΦkoli jsou nutnΘ urΦitΘ ·pravy k≤du strßnek, p°esto nßm v takto p°evedenΘ funkΦnφ strßnce zbyde vcelku dost relikviφ, kter²m bychom se v budoucφm programovßnφ ASP.NET aplikacφ m∞li vyhnout. V n∞kolika dφlech si postupn∞ ukß₧eme, jak se t∞chto relikviφ zbavit, aby byla vaÜe aplikace po ·pravßch stßle funkΦnφ a vy ji mohli kousek po kousku p°evßd∞t do ryzφho ASP.NET.
V∞°φm, ₧e tento postup povede takΘ k lepÜφmu pochopenφ "myÜlenφ v ASP.NET", a ₧e budete mφt dßle zßjem pochopit hloub∞ji zp∙soby psanφ ASP.NET aplikacφ û zp∙sob, kdy do ASP.NET p°evedete starÜφ ASP aplikaci je t°eba chßpat jako v²jimeΦnou ba nouzovou situaci. Rozhodn∞ si nelze °φci, ₧e prost∞ z∙stanu u psanφ ASP s tφm, ₧e to pak jen poupravφm pro ASP.NET û up°φm∞ °eΦeno, tφmto zp∙sobem ve skuteΦnosti vytvo°φme funkΦnφ aplikaci, avÜak v zßvislosti na Φistot∞ naÜich programßtorsk²ch zp∙sob∙ takΘ v∞tÜφ Φi menÜφ nep°ehledn² hybrid staro-nov²ch metod.
Na tomto mφst∞ je pot°eba si °φct, ₧e teoreticky by ₧ßdnΘ ·pravy nemusely b²t pro p°evod do ASP.NET nutnΘ. Proto₧e vÜak v∞tÜina ASP strßnek byla psßna pomocφ VB Scriptu, kter² je znaΦn∞ benevolentnφ v syntaxi, byla °ada programßtor∙ vedena k psanφ nekvalitnφch skript∙, bez deklaracφ prom∞nn²ch, p°edpoklßdaly se tzv. default hodnoty objekt∙, parametry funkcφ bez zßvorek, nenφ striktnφ typovost (do ΦφselnΘ prom∞nnΘ je mo₧nΘ vlo₧it °et∞zec), Üpagetov² k≤d. To vÜe vede v d∙sledku k psanφ nep°ehledn²ch a Φasto chybn²ch aplikacφ. ASP.NET toto neumo₧nφ, syntaxe je velmi striktnφ, stejn∞ jako typovost a objekty. I kdy₧ si t°eba jeÜt∞ netroufneme psßt novou aplikaci ji₧ v ASP.NET, bude dobrΘ psßt ASP aplikace dle nφ₧e uveden²ch pravidel û p°echod bude o to snadn∞jÜφ.
Pokusme se tedy vzφt n∞jakou svoji jednoduÜÜφ aplikaci, kterß t°eba i pracuje s databßzφ, a upravme ji. Vodφtkem nßm p°i ·prav∞ budou takΘ chybovß hlßÜenφ systΘmu ASP.NET û ne°eknou vßm ·pln∞ v₧dy, co mßte ud∞lat, ale v₧dy sd∞lφ, co je Üpatn∞ i s Φßstφ k≤du s oΦφslovan²mi °ßdky a Φerven∞ vyznaΦen²m chybn²m °ßdkem. V pr∙b∞hu ka₧dΘho kroku zkouÜejte zobrazit v²sledek aplikace v prohlφ₧eΦi û nakonec budete jist∞ korunovßni po °ad∞ chybov²ch strßnek rozb∞hnuvÜφ se aplikacφ zkompilovanou v ASP.NET.
- Zkopφrujte si soubory aplikace do novΘho adresß°e. P°ejmenujeme soubor aplikace û zm∞nφme p°φponu z asp na aspx.
- Dopl≥te na zaΦßtek strßnky deklaraci typu aplikace û v naÜem p°φpad∞ to bude tento °ßdek:
<% @Page Language="VB" Explicit="True" ASPCompat="True" %>
Atribut ASPCompat nenφ nutn² v₧dy, m∙₧ete jej zkusit smazat, a₧ bude celß aplikace funkΦnφ. Pokud jej systΘm nebude pot°ebovat, aplikace bude normßln∞ pracovat a dokonce rychleji v re₧imu MTA, jinak si o n∞j systΘm °ekne v chybovΘm hlßÜenφ, aplikace pak pob∞₧φ v jednovlßknovΘm re₧imu kompatibility STA.
- Pro komentß°e je mo₧nΘ pou₧φt pouze apostrof, mßte-li jinΘ znaky, nahra∩te je apostrofem.
- Je dovolen pouze jeden jazyk pro strßnku, nenφ mo₧nΘ pou₧φt souΦasn∞ VB.NET a t°eba JavaScript.
- D∙le₧itß je striktnφ deklarace prom∞nn²ch vΦetn∞ urΦenφ typu (viz p°φklad u bodu 5).
- Odstra≥te tzv. Üpagetov² k≤d û funkce, subrutiny a deklarace prom∞nn²ch musφ b²t v Φßsti <script ...> </script>, nenφ mo₧nΘ je uvßd∞t mezi znaky <%
%> do bloku zobrazenφ k≤du. Zde m∙₧e b²t trochu problΘm, zvlßÜt∞ p°i pou₧itφ p°φkazu if. Pokud nap°. pomocφ podmφnky zobrazujete jin² HTML k≤d, bude
nutnΘ celou Φßst p°epsat do Φßsti <script ... a po₧adovan² HTML k≤d nechat vypsat pomocφ Response.Write.
<%
Dim X
Dim str
Sub MySub()
Response.Write "Tento °et∞zec..."
End Sub
str = "Jin² °et∞zec"
%>
K≤d po ·prav∞ - vÜimn∞te si, ₧e p°i°azenφ do prom∞nnΘ str je mo₧nΘ ji₧ i v Φßsti zobrazenφ k≤du:
<script language = "vb" runat = "server">
Dim X As Integer
Dim str As String
Sub MySub()
Response.Write "Tento °et∞zec..."
End Sub
</script>
<% str = "Jin² °et∞zec" %>
- Na °ßdku smφ b²t jen jedin² p°φkaz. Mßte-li n∞kde v Φßsti bloku zobrazenφ k≤du vφce p°φkaz∙ za sebou (nap°φklad n∞jakΘ podmφn∞nΘ Response.Write po if), je
pot°eba vyu₧φt klßvesu Enter k zalomenφ na vφce °ßdk∙.
- Nenφ podporovßna v²chozφ vlastnost objektu, pokud t°eba vytahujeme n∞jak² ·daj z databßze a mßme ho v kolekci s nßzvem DBResult, je pot°eba doplnit, ₧e
chceme pracovat s hodnotou, nikoli s objektem sam²m:
Response.Write DBResult("Name") upravte na Response.Write (DBResult("Name").Value)
- Parametry metod a funkcφ musφ b²t povinn∞ v zßvorkßch:
Response.Write RS("Name")
DBResult.Open(sql,con,1)
- V jazyce Visual Basic .NET jsou urΦitΘ zm∞ny oproti VB Scriptu v ASP:
- neexistuje typ VARIANT, jednoduÜe pou₧φvejte typ Object;
- zm∞na formßtu Date û zp∙sob ulo₧enφ a definice je odliÜnß, m∙₧e zp∙sobit problΘmy p°i p°edßvßnφ COM objekt∙m;
- Option Explicit je v²chozφ vlastnost û jak ji₧ bylo zmφn∞no, prom∞nnΘ je t°eba povinn∞ deklarovat;
- v²raz Let a Set nenφ podporovßn û prost∞ jej z vaÜeho k≤du odma₧te, ponechejte jen Φßst za nimi nßsledujφcφ;
- v²chozφ p°edßnφ argument∙ funkcφ je nynφ hodnotou (ByVal), d°φve bylo odkazem (ByRef); pokud nadßle pot°ebujete p°edßvat odkazem, je nutno p°ed argument funkce uvΘst ByRef û nap°. Sub MyByRefSub (ByRef Value);
- integer je 32bitov², long typy 64bitovΘ û m∙₧e op∞t vyvstat problΘm p°i prßci s COM objekty nebo p°i vyvolßnφ Win32 API komponenty;
- zachytßvßnφ chyb je propracovan∞jÜφ, d°φv∞jÜφ On Error Resume Next a On Error Goto je nynφ nahrazeno strukturovan²m mechanismem zpracovßnφ v²jimek Try, Catch, Finally;
Pevn∞ v∞°φm, ₧e pokud si projdete t∞chto 10 bod∙, vaÜe aplikace se rozb∞hne. Pokud budete mφt p°esto problΘm, podφvejte se p°φmo na strßnky MSDN, kde naleznete vφce typ∙ a p°φklad∙. Jakkoli je vÜak aplikace funkΦnφ, jde o ne zrovna Φist² k≤d v duchu systΘmu .NET, a proto neusφnejte na vav°φnech. V dalÜφm pokraΦovßnφ si probereme dalÜφ kroky, jak naÜi aplikaci vφce p°iblφ₧it objektovΘmu pohledu û to dßle prohloubφ naÜe znalosti a zbavφ nßs to urΦit²ch p°e₧it²ch zlozvyk∙.