ASP versus COM aneb konverzia ASP do COM
Niektorí programátori možno poznajú či dokonca využívajú možnosť tvoriť web stránky vo Visual Basicu. Ak sa na to pozrieme z iného uhla pohľadu, využívajú to všetci programátori ASP stránok, keďže samotný engine ASP využíva zjednodušenú verziu runtime enginu Visual Basicu (verzia 5 alebo 6). Prečo to nevyužiť?
Webová aplikácia naprogramovaná ako ActiveX COM objekt má svoje výhody, aj nevýhody. Podobne ako pri iných otázkach sú strany za aj proti. V stručnosti môžeme spomenúť výhody, medzi ktoré patrí zvýšenie rýchlosti a stability aplikácie, možnosť omnoho kvalitnejšieho ošetrenia chybových stavov ASP stránky či vedľajší produkt kompilácie – nemožnosť čítať zdrojový kód, takže je chránený pred nedovoleným kopírovaním. Zrýchlenie spočíva v kompilácii, pretože pri štandartnom použití ASP stránok sa kód stránky prevádza zakaždým riadok po riadku, každý riadok je ISAPI filtrom upravený do podoby použiteľnej pre VB kompilátor, poslaný na kompiláciu a výsledok vrátený do ASP stránky. Zvýšenie stability je možné dosiahnuť omnoho lepším ošetrením chýb, keďže je možné využiť kompletné možnosti enginu VB, ktorý je v tomto ohľade kvalitnejší oproti enginu VBScriptu.
Medzi nevýhody musíme spomenúť nutnosť registrovať COM komponentu na serveri a samozrejme pri nevhodnom použití aj nadmerné odčerpávanie pamäťových prostriedkov serveru. Taktiež by sme nemali zabudnúť na bezpečnostné problémy používania ActiveX prvkov, aj keď použitie na serverovej strane znižuje toto nebezpečenstvo aj vzhľadom k tomu, že navonok nie je žiaden rozdiel oproti použitiu ASP stránok.
Pri samotnej tvorbe môžeme použiť dve metódy, využiť predpripravené šablóny vo VB alebo programovať aplikáciu úplne od začiatku. Je tu ešte tretia možnosť, a tou je konverzia existujúcich ASP stránok do ActiveX COM objektu, ktorá si vyžaduje minimálnu námahu. Tejto konverzii sa budeme venovať v tomto článku.
Ak sa dobre prizrieme zdrojovému kódu ASP stránky a použijeme presný zápis kódu podľa špecifikácie ASP (to znamená, že všetok HTML kód je „uzavretý“ v procedúre Response.Write) zistíme, že je to všetko len VB kód. Príklad „nesprávne“ formátovaného kódu vidíme nižšie:
<% CodePage=1250 Language=“VBScript“ %>
<%
Option Explicit
Dim strThisDate ‚ dnešný dátum
strThisDate = CStr(Now())
Set cnn = Server.CreateObject(„adodb.connection“)
%>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.01 Transitional//EN“>
<html>
<head>
<title>Test page</title>
</head>
<body>
Dnes je <%= strThisDate %>.
</body>
</html>
<%
strThisDate = 0
Set cnn = Nothing
%>
Príklad správne formátovaného kódu stránky „test.asp“:
<%@ CodePage=1250 Language=“VBScript“ %>
<%
Option Explicit
Dim strThisDate ‚ dnešný dátum
Dim cnn
strThisDate = CStr(Now())
Set cnn = Server.CreateObject(„adodb.connection“)
Response.Write „<!DOCTYPE HTML PUBLIC „“-//W3C//DTD HTML 4.01 Transitional//EN““>“ & vbCrLf
Response.Write „<html>“ & vbCrLf
Response.Write „<head>“ & vbCrLf
Response.Write „
<title>Test page</title>“ & vbCrLf
Response.Write „</head>“ & vbCrLf
Response.Write „<body>“ & vbCrLf
Response.Write „
Dnes je <%= strThisDate %>.“ & vbCrLf
Response.Write „</body>“ & vbCrLf
Response.Write „</html>“ & vbCrLf
strThisDate = 0
Set cnn = Nothing
%>
Z príkladu je jasné, že „správne“ formátovaná ASP stránka obsahuje len jeden súvislý blok VB kódu (<% ... %>
). Takže pred použitím kompilácie musíme upraviť kód do správnej podoby. Po úprave samozrejme nestačí priame načítanie do VB a spustenie kompilácie, pretože VB nepozná objekty ASP. To dosiahneme pridaním referencie na potrebné objekty (Microsoft Active Server Pages Object Library a COM+ Services Type Library) do projektu vo VB, určením správneho typu projektu (ActiveX DLL) a doplnením obslužného kódu pre inicializáciu objektov, na čo použijeme v ďalších častiach hotové „šablóny“ s kódom.
Pre úpravu ASP stránky z predchádzajúceho príkladu založíme vo VB nový projekt typu ActiveX DLL a pridáme v Referencies potrebné objekty. Ak nemáte nainštalovaný IIS, referenciu na ASP library nenájdete. Možnosti sú dve, nainštalovať si IIS, alebo získať od známeho súbor asp.dll a cez regsvr32 ho zaregistrovať. Pre samotnú kompiláciu to stačí.
Do projektu pridáme novú triedu (Class) s názvom rovnakým, ako je ASP stránka (vlastnosť Instancing = „MultiUse“), prípadne môžete použiť svoj názov, na čo ale nesmiete zabudnúť pri vytváraní „obslužných“ ASP stránok. Ak konvertujeme väčší projekt s rovnakými názvami stránok v rôznych adresároch, premenovávaniu tried sa nevyhneme. Projekt nazveme primerane výstižným názvom, cez ktorý budú volané jednotlivé triedy pre každú ASP stránku, v našom skúšobnom príklade „ComTest“. Do kódu doplníme „obslužné“ procedúry zo „šablóny“ nižšie, pridáme kód z ASP stránky a nahradíme objekty z ASP objektmi z VB. Tu je príklad súboru „test.cls“:
Dim ObjSession As Session
Dim ObjApplication As Application
Dim ObjRequest As Request
Dim ObjResponse As Response
Dim ObjServer As Server
Public Sub OnStartPage(cursc As ScriptingContext)
Set ObjSession = cursc.Session
Set ObjApplication = cursc.Application
Set ObjRequest = cursc.Request
Set ObjResponse = cursc.Response
Set ObjServer = cursc.Server
End Sub
Public Sub OnEndPage()
Set ObjSession = Nothing
Set ObjApplication = Nothing
Set ObjRequest = Nothing
Set ObjResponse = Nothing
Set ObjServer = Nothing
End Sub
Public Function ViewPageAsp()
Dim strThisDate ‚ dnešný dátum
Dim cnn
strThisDate = CStr(Now())
Set cnn = ObjServer.CreateObject(„adodb.connection“)
ObjResponse.Write „<!DOCTYPE HTML PUBLIC „“-//W3C//DTD HTML 4.01 Transitional//EN““>“ & vbCrLf
ObjResponse.Write „<html>“ & vbCrLf
ObjResponse.Write „<head>“ & vbCrLf
ObjResponse.Write „
<title>Test page</title>“ & vbCrLf
ObjResponse.Write „</head>“ & vbCrLf
ObjResponse.Write „<body>“ & vbCrLf
ObjResponse.Write „
Dnes je <%= strThisDate %>.“ & vbCrLf
ObjResponse.Write „</body>“ & vbCrLf
ObjResponse.Write „</html>“ & vbCrLf
strThisDate = 0
Set cnn = Nothing
End Function
Teraz „nastal čas“ pre prípadnú ďalšiu úpravu kódu, napríklad kvalitnejšie ošetrenie chýb, využitie možnosti skokov a volaní a podobne.
Po dokončení revízie kódu sme pripravení ku kompilácii projektu. Určite sa nevyhneme viacnásobným kompiláciám a úpravám, preto ihneď po prvej kompilácii nastavíme vo vlastnostiach projektu binárnu kompatibilitu na skompilovaný DLL súbor. Vyhneme sa tak nielen hromadeniu „nepotrebných“ záznamov v registroch ale aj prípadnému problému, ak sa rozhodnete pre zrýchlenie aplikácie volať objekt jeho GUID identifikátorom.
Na odskúšanie skompilovanej aplikácie potrebujeme ešte vytvoriť „náhradnú“ ASP stránku, ktorá bude volať spracovanie kódu z našej COM DLL. Kód novej stránky „test.asp“ pre náš prípad je následovný:
<%@ Language=VBScript %>
<%
Option Explicit
Dim Ctest
Set Ctest = Server.CreateObject(„ComTest.test“)
Call Ctest.ViewPage
Set Ctest = Nothing
%>
Týmto sme náš malý „experiment“ prevodu ASP stránky do COM objektu dokončili. Na odskúšanie je potrebné skopírovať na IIS server súbory test.dll a novú ASP stránku test.asp, zaregistrovať pomocou regsvr32 knižnicu test.dll a odskúšať novú web aplikáciu. Pre záujemcov je k dispozícií vzorový VB projekt, ktorý si môžete stiahnuť.
Mohli by sme skončiť, ale popíšme si ešte malý trik, ako použiť tejto techniky aj bez vlastnenia Visual Basicu. Na kompiláciu sa dá použiť aj voľne dostupná a šíriteľná verzia Visual Basicu – Control Creation Edition (VBCCE). Keďže táto verzia umožňuje tvoriť len ActiveX komponenty, musíme použiť namiesto novej triedy novú komponentu. Tej nastavíme Vlastnosť InvisibleAtRuntime = True a vložíme kód triedy. V podstate sa nič výraznejšie nezmení, keďže aj komponenta je typ triedy s vizuálnym rozhraním, ktoré ale nevyužijeme.
Další zdroje
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Regulace digitálních služeb: Co přináší nové nařízení DSA?
20. února 2024 -
Windows App: Pracujte odkudkoliv, kdykoliv
3. listopadu 2024 -
Proč je důležité tvořit obsah na váš web?
29. srpna 2024 -
Monitory OLED: klíčové pojmy a funkce
13. května 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024