Jak udělat z ASP stránky ASP.NET aplikaci

22. ledna 2003

Existuje způsob, jak jednoduše ASP stránku upravit tak, aby z ní byla ASP.NET aplikace. Nevyužijeme sice veškerý potenciál, který ASP.NET nabízí, ale můžeme vcelku rychle začít pozvolna přecházet na ASP.NET. V článku se dozvíte, jak na to.

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.

  1. Zkopírujte si soubory aplikace do nového adresáře. Přejmenujeme soubor aplikace – změníme příponu z asp na aspx.
     
  2. 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.
     
  3. Pro komentáře je možné použít pouze apostrof, máte-li jiné znaky, nahraďte je apostrofem.
     
  4. Je dovolen pouze jeden jazyk pro stránku, není možné použít současně VB.NET a třeba JavaScript.
     
  5. Důležitá je striktní deklarace proměnných včetně určení typu (viz příklad u bodu 5).
     
  6. 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" %>

     

  7. 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ů.
     
  8. 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)
     
  9. Parametry metod a funkcí musí být povinně v závorkách:
    Response.Write RS("Name")
    DBResult.Open(sql,con,1)
     
  10. 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ů.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *