IntraWeb jako ISAPI

Adam Boduch

Strony WWW na początku swego żywota były jedynie statycznymi dokumentami (plikami) zapisanymi w języku HTML. Zaczęto wówczas dostrzegać pewne braki – a mianowicie niemożność tworzenia dynamicznych stron http://pl.wikipedia.org/wiki/CGI http://pl.wikipedia.org/wiki/CGIąc technologię CGI (Common Gateway Interface). Technologia CGI pozwala na tworzenie dynamicznych stron http://pl.wikipedia.org/wiki/PHP - PHP. Podstawową zaletą CGI jest niezależność od systemu operacyjnego, platformy systemowej, a nawet języka programowania. Skrypty CGI można pisać zarówno w C jak i w <wiki href="Perl">Perlu</wiki> czy <wiki href="Python">Pythonie</wiki>.

Dwaj wiodący wówczas producenci serwerów http://pl.wikipedia.org/wiki/Microsoftwiki/Microsoft">Microsoft</a>, Netscape) doceniając zalety dynamicznych stron WWW postanowili stworzyć technologię ISAPI oraz NSAPI w oparciu o dołączane biblioteki DLL. Zaletą zastosowania ISAPI jest szybkość oraz większa wydajność w porównaniu z CGI.

Nie będziemy rozwodzić się teraz nad NSAPI, gdyż ta technologia jest praktycznie nie używana w dzisiejszych czasach. Skupimy się na ISAPI, która mimo większej prostoty i popularności nadal ustępuje CGI. Na czym polega owa technologia? Otóż do biblioteki DLL umieszczonej na serwerze mogą zostać przekazane parametry, które, następnie są interpretowane przez ową bibliotekę i na tej podstawie generowana jest strona WWW zapisana w kodzie HTML. Oto przykład wywołania programu ISAPI:

http://mój_serwer.com/isapi.dll/test

W takim przypadku parametrem przekazanym do biblioteki jest /test.

Wadą ISAPI jest niewątpliwie mała popularność. W dzisiejszych czasach do generowania dynamicznych stron http://pl.wikipedia.org/wiki/ASPf="http://pl.wikipedia.org/wiki/ASP">ASP</a>, CGI – bardzo rzadko można spotkać strony WWW oparte o ISAPI. Dlaczego? Otóż ISAPI jest technologią wymyśloną i zaimplementowaną przez Microsoft, tak więc działa ona jedynie dla systemów Windows (aczkolwiek podobno istnieją implementacje ISAPI pod system UNIX, ale autor tego artykułu nie jest w stanie zweryfikować tych informacji a tym bardziej – sprawdzić działanie takiego programu pod serwerem na systemie UNIX), tak samo jak ASP. CGI oraz PHP działają na wielu serwerach i wielu systemach operacyjnych, i to stanowi o ich dużej popularności.

W Delphi 7 Studio istnieje możliwość tworzenia aplikacji IntraWeb. Technologia wymyślona przez firmę Borland oferuje możliwość tworzenia dynamicznych stron http://pl.wikipedia.org/wiki/JavaScriptttp://pl.wikipedia.org/wiki/JavaScript">JavaScript</a>, innych języków programowania, a nawet samego HTML’a. Wystarczy sama znajomość <wiki href="Object Pascal">Object Pascala</wiki>. Artykuł ten przedstawia sposób użycia programów IntraWeb jako biblioteki ISAPI, dzięki czemu istnieje możliwość uruchomienia takiego programu na serwerze.

IntraWeb jako DLL

Problem polega na innym sposobie utworzenia aplikacji IntraWeb. W Repozytorium zamiast ikony Stand Alone Application należy wybrać ISAPI Application. Wówczas Delphi utworzy nowy projekt biblioteki ISAPI; korzystanie z takiego projektu odbywa się w identyczny sposób, jak w przypadku zwykłej aplikacji. Różnicą jest plik wynikowy — w tym wypadku będzie to biblioteka DLL. Po skompilowaniu programu plik DLL należy umieścić w odpowiednim katalogu serwera. Rysunek poniżej prezentuje działanie aplikacji IntraWeb na serwerze opartym o program PWS (Personal Web Server, serwer Microsoftu).

09_11_03_1.jpg

Działanie programu jest raczej symboliczne — po naciśnięciu przycisku w etykiecie wyświetlany jest tekst. Odpowiednia procedura wygląda tak:

procedure TformMain.IWButtonClick(Sender: TObject);
begin
  IWLabel.Caption := 'Cześć! To jest biblioteka z aplikacją IntraWeb!';
end;

Dlaczego akurat wybrałem serwer PWS? Otóż instalacja tego serwera jest bardzo prosta, jest to prosty serwer nadający się wspaniale do własnych eksperymentów, a dodatkowo – obsługa ISAPI jest standardowo wbudowana w serwer (w przeciwieństwie do Apache gdzie obsługę ISAPI trzeba dodatkowo instalować).

Wydaje mi się, że zbędny jest tu dalszy opis – po prostu aplikacje IntraWeb jako DLL tworzy w ten sam sposób co zwykłe IntraWeb. Po kompilacji uzyskujemy – nie plik EXE, lecz plik DLL który jest biblioteką ISAPI i może zostać umieszczona na serwerze.
W tym miejscu należy się jeszcze jedna, mała uwaga. W momencie wpisania w przeglądarce np. adresu http://127.0.0.1/SCRIPTS/ISAPI.dll załadowana zostanie biblioteka DLL, która (niestety) będzie przebywać w przestrzeni adresowej serwera aż do jego zamknięcia. Inaczej mówiąc, Windows nie pozwoli na usunięcie takiej biblioteki ani jej zmodyfikowanie przed zakończeniem pracy serwera. To rozwiązanie ma jednak zalety w postaci większej wydajności, w przeciwieństwie do programów CGI, które muszą być uruchamiane za każdym wywołaniem.
Nie wszystkie serwery stosują takie praktyki — w niektórych istnieje możliwość podmiany pliku w trakcie działania serwera.

Konwertowanie aplikacji do ISAPI

Poprzednie nasze aplikacje wykorzystywały wbudowany serwer. Teraz chcąc program wyświetlić w postaci ISAPI, należy troszkę „pokombinować” — na szczęście niezbyt dużo. W nowym projekcie wystarczy usunąć plik *.dpr i utworzyć w jego miejsce nowy plik *.dpr, generowany po utworzeniu nowego projektu ISAPI Application. Spójrz na poniższe dwa listingi, zawierające odpowiednio plik *.dpr z projektu głównego oraz z projektu aplikacji ISAPI.

Plik *.dpr z projektu IntraWeb

program p45;
{PUBDIST}

uses
  IWInitStandAlone,
  ServerController in 'ServerController.pas' {IWServerController: TDataModule},
  IWUnit1 in 'IWUnit1.pas' {formMain: TIWForm1};

{$R *.res}

begin
  IWRun(TFormMain, TIWServerController);
end.

Plik *.dpr z projektu ISAPI IntraWeb

library IWISAPIProject;

uses
  IWInitISAPI,
  ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},
  IWUnit1 in 'IWUnit1.pas' {formMain: TIWForm1};

{$R *.RES}

begin
  IWRun(TFormMain, TIWServerController);
end.

Sam możesz zaobserwować, że różnica polega przede wszystkim na użyciu słowa kluczowego library w miejsce słowa kluczowego program.

IntraWeb kontra tradycyjne metody

Wielu ludzi jest zachwyconych działaniem technologii IntraWeb, jej prostoty, braku konieczności poznawania HTML — wszystko odbywa się przecież na poziomie IDE Delphi. Wiele osób jest także przekonanych, że technologia nowej generacji IntraWeb wyprze języki skryptowe (takie jak CGI) albo nawet w ogóle zlikwiduje konieczność znajomości HTML przy projektowaniu własnych witryn. Ja nie byłbym o tym tak silnie przekonany — moim zdaniem HTML sam w sobie nie zniknie. Nie znikną przecież rzesze ludzi, którzy piszą strony HTML, nie korzystając z żadnych wyspecjalizowanych edytorów, gdyż wówczas mają pełną kontrolę nad kodem i mogą go maksymalnie zoptymalizować, czego nie można powiedzieć o IntraWeb, będącym jedynie programem, który nigdy nie zastąpi człowieka.
Nie wiem, jak inni, ale ja raczej nie będę aż takim zwolennikiem IntraWeb — wolę stary, dobry HTML oraz PHP z wykorzystaniem MySQL. Znam zarówno PHP, jak i Delphi, więc mogę z czystym sumieniem powiedzieć, że w ogóle nie chciałbym tworzyć stron dynamicznych z wykorzystaniem IntraWeb — po prostu wolę PHP, które daje mi większe możliwości. Lecz jest to jedynie moje zdanie…

Więcej informacji...

Więcej informacji na temat tworzenia aplikacji ISAPI, obsługi serwera PWS oraz pisania programów IntraWeb znajdziesz w książce Delphi 7. Kompendium programisty wyd. Helion 2003.

1 komentarz

hm... przydatne!