Programowanie w języku Delphi » Artykuły

IntraWeb jako ISAPI

Strony WWW</wiki> na początku swego żywota były jedynie statycznymi dokumentami (plikami) zapisanymi w języku HTML</wiki>. Zaczęto wówczas dostrzegać pewne braki &#8211; a mianowicie niemożność tworzenia dynamicznych stron WWW. Niedługo po powstaniu stron WWW lukę tę uzupełniono wymyślając technologię CGI</wiki> (Common Gateway Interface). Technologia CGI pozwala na tworzenie dynamicznych stron WWW, tak jak np. język skryptowy - PHP</wiki>. 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</wiki> jak i w Perlu</wiki> czy Pythonie</wiki>.

Dwaj wiodący wówczas producenci serwerów WWW (Microsoft</wiki>, Netscape</wiki>) 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 WWW używa się raczej PHP, ASP</wiki>, CGI &#8211; 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 &#8211; 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</wiki> 7 Studio istnieje możliwość tworzenia aplikacji IntraWeb. Technologia wymyślona przez firmę Borland</wiki> oferuje możliwość tworzenia dynamicznych stron WWW bez wymaganej znajomości JavaScript</wiki>, innych języków programowania, a nawet samego HTML&#8217;a. Wystarczy sama znajomość 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 &#8212; 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 &#8212; 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 &#8211; 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 &#8211; po prostu aplikacje IntraWeb jako DLL tworzy w ten sam sposób co zwykłe IntraWeb. Po kompilacji uzyskujemy &#8211; 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 &#8212; 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ę &#8222;pokombinować&#8221; &#8212; 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 &#8212; 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 &#8212; 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 &#8212; 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 &#8212; po prostu wolę PHP, które daje mi większe możliwości. Lecz jest to jedynie moje zdanie&#8230;

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

koxak 2003-11-09 19:52

hm... przydatne!