Създаване на приложения на Active Server Page (ASP) в Delphi

Delphi, Интернет и мрежи, ASP

Новият продукт на Boorland, Delphi5, който започна да се разпространява през есента на 1999 г., съдържа редица нови функции. По-специално, способността за създаване на ASP приложения е добавена към експертите по проекта. Експертът се извиква с помощта на командата File/New/ActiveX и след това се избира иконата Active Server Object. За съжаление, в текущата документация, разпространявана с Delphi 5 (Build 5.62), е изключително оскъдно относно целта, последователността на създаване и тестване на ASP сървър. Примери за работещ ASP сървър също липсват в дистрибуцията Delphi5. Тази публикация частично компенсира тези проблеми.

Типичен пример за достъп до ASP сървър с HTML документ изглежда така:

Този запис е скрипт на Visual Basic (VB). Въпреки наличието на VB скрипт, ASP страницата може да бъде достъпна от клиенти, работещи в други операционни системи, като UNIX. На пръв поглед това може да изглежда странно: компютрите UNIX нямат основния език, камо ли VB. Но факт е, че скриптове в ASP документи се изпълняват на сървъра и клиентът получава HTML документ.

ASP сървърът трябва да бъде инсталиран на операционна система Windows NT (Windows 98), работеща с IIS или Microsoft Personal Web Server (PWS) и този факт намалява възможността за широко използване на ASP сървър. По същество ASP сървърът е вътрешна разработка на Microsoft, която не е била (и не може да бъде) съгласувана с действителните законодатели за по-нататъшното развитие на интернет технологиите (Sun, Netscape). В бъдеще не бива да се очаква напредъкът на тази технология към други платформи, тъй като при внедряването на ASP - сървъри се използва COM технология, записи в системния регистър - и това са изключителни разработки на Microsoft. Освен това други WEB-сървъри, работещи на платформата на Windows (Netscape, Apache), най-вероятно няма да поддържат технологията ASP, тъй като досега производителите на тези сървъри успешно са игнорирали всички нови разработки на Microsoft в тази област.

По същество ASP сървърът е OLE сървър за автоматизация с няколко предварително дефинирани интерфейса, включително IRequest и IResponse. IRequest съдържа методи, чието извикване ви позволява да зададете параметрите, попълнени на клиента - това ще бъде обсъдено по-долу. IResponse съдържа методи, чието извикване води до формиране на HTML документ и като окончателно прехвърляне на този документ към клиента. Въз основа на тези функции, ASP сървърът прилича на CGI приложение и ISAPI/NSAPI dll (наричан по-долу WEB сървър на приложения). Идеологията на изпълнението на метода в приложенията на ASP сървър и WEB сървър също е подобна: заявката на клиента се анализира (ако е необходима) и отговорът се генерира динамично. Разликата е, че WEB сървърните приложения изобразяват целия HTML документ, докато отговорът на ASP сървъра се вмъква в оригиналната HTML страница. Например, ако ASP документ е представен като:

ASP сървърът е реализиран както в * .exe, така и в * .dll приложения - това е разрешено при създаване на OLE сървър за автоматизация. ASP сървърът, внедрен във файл .exe, се стартира веднъж в отговор на заявка на клиента. Когато се използват вътрешни (в процес) ASP сървъри, един DLL екземпляр, зареден в RAM, може да обслужва няколко клиента едновременно. В този случай за всеки клиент може да се създаде както отделен екземпляр на COM обект, така и отделен екземпляр на COM обект може да обслужва няколко клиента. Зависи от избрания Threading Model при попълване на диалоговия прозорец при избор на командата File/New/ActiveX/Active Server Object.

Сега нека разгледаме как работи ASP сървърът чрез конкретен пример за създаване на вътрешен (в процес) ASP сървър. Нека се ограничим до сървър, който прави една заявка. Изберете командата File/New/ActiveX/ActiveX Library и натиснете бутона OK. Ще бъде създаден нов проект, който ще запазим например под името ASP01. След това извикайте командата File/New/ActiveX/Active Server Object от менюто. В диалоговия прозорец, който се появява, дефинирайте името на класа, например Test. Тъй като се създава сървърът в процес, параметърът Instancing няма значение, но параметърът Threading Model има значение. Избирането на параметъра Single води до неефективна работа на сървъра - когато няколко клиента го осъществяват едновременно, сървърът изпълнява последователно заявки и ако един от клиентите направи дълга заявка, останалите трябва да изчакат да завърши, дори ако техните заявки са кратки във времето. Остава впечатлението, че изследователят виси и често това води до опити за прекъсване на задачата с помощта на различни методи. Избирането на параметъра Apartment води до разделяне на заявките на клиенти на нишки, като всеки клиент създава свой собствен екземпляр на COM обект - в този пример класът TTest. В същото време, когато пишете методи на клас, не е необходимо да защитавате променливите на класа в потоци - клиентът може свободно да ги модифицира и това опростява разработването на код на приложение. Недостатъкът на този модел е, че проектът изисква много ресурси и променливите на класа се инициализират за всяко повикване, което удължава времето за реакция. Безплатният модел е лишен от тези недостатъци, при които един екземпляр на COM обект обслужва няколко клиента. Ако обаче клиентите могат да променят данните, това изисква защита на споделени променливи между нишките, което значително усложнява внедряването на кода на приложението и е потенциален източник на фини грешки. По правило този модел се използва в сървъри, които предоставят само данни, но клиентът не може да ги променя.

Контролната група Active Server Type ви позволява да изберете целта на ASP сървъра. Ако планирате да инсталирате сървъра на компютър, който се управлява от IIS версия 3 или 4, тогава трябва да изберете Методи на събитията на ниво страница. Тази опция работи и с IIS5, но опцията Object Context ще работи по-ефективно. Тази опция трябва да бъде избрана, ако ASP се управлява от Microsoft Transaction Server (MTS). Всъщност IIS5 също управлява този сървър, използвайки MTS - и двата продукта са тясно интегрирани.

Опцията Генериране на тестов скрипт за шаблон за този обект винаги трябва да бъде оставена включена - Delphi в този случай ще създаде малък HTML документ, който може да се използва с незначителни промени за тестване на ASP сървъра.

Ако разгледате файла за внедряване (U1_01.pas), тогава класът ТТest е потомък на класа TASPObject. Ако е избрана опцията Object Context, библиотеката на типове не съдържа предварително дефинирани методи и самият клас TTest ще бъде потомък на TASPMTSObject. И двата класа предшественици на TTest съдържат абсолютно едни и същи методи и свойства, но класът TASPObject допълнително съдържа няколко метода за интерфейс на IASPObject - OnStartPage и OnEndPage.

Нека назовем новосъздадения метод ScriptContent, като попълним този текст в името на метода с мигаща карета. Този метод не трябва да има параметри. След това извикайте командата Refresh, като натиснете бутон 2. След това в модула за внедряване (U1_01.pas) ще се появи празно място, където изпълнението трябва да бъде описано. Методът се прилага по следния начин: