1.1 Введення в скрипти, що виконуються на сервері
Першими серверними скриптами для Web були програми CGI. CGI розшифровується як common gateway interface (загальний шлюзовой інтерфейс). Термін шлюз в цьому випадку відноситься не до спеціальних мережевих пристроїв, а до спеціальної програми, яка є посередником між Web-сторінками і ресурсами Web-серверу.
Програми CGI вельми неефективні з точки зору використання ресурсів. Для кожної такої програми операційна система повинна виділити адресний простір в пам'яті, запустити процес, завантажити програму, виконати її і потім ліквідувати все, що було зроблено на попередніх етапах. Програми CGI можуть отримувати дані для обробки у вигляді змінних оточення, з командного рядка і за допомогою стандартних каналів передачі даних. Внаслідок роботи програми створюється код HTML, який передається Web-серверу, який, в свою чергу, доставляє його браузеру. Більше усього програми CGI нагадують програми MS-DOS, для яких всі дані вводяться з консолі комп'ютера.
Однак, оскільки CGI стала першою технологією, яка використовувалася для скриптів, що виконуються на сервері, вона досі підтримується практично всіма Web-серверами. Найбільш поширені мови програмування для програм CGI - Perl і С. Як правило, програми CGI не взаємодіють зі скриптами.
Щоб уникнути проблем CGI, пов'язаних з продуктивністю і гнучкістю, Microsoft та інші компанії розробили технологію ISAPI (Internet Server Application Programming Interface, інтерфейс прикладного програмування
Інтернет -серверу). Програми ISAPI існують у вигляді DLL (dynamic-link libraries, бібліотек динамічного компонування). У результаті в пам'яті повинна знаходитися тільки одна копія DLL, незалежно від того, скільки користувачів одночасно обслуговуються. Крім того, програма ISAPI працює в адресному просторі пам'яті Web-серверу, що дозволяє уникнути необхідності постійного виділення пам'яті і повернення простору, що звільнився. Такі рішення позитивно позначаються на продуктивності роботи Web-серверу.
Тому більшість утиліт для основного Web-серверу від Microsoft (Internet Information Server) реалізована саме у вигляді програм ISAPI. Iнша проблема програм CGI полягала в тому, що мови програмування, що використовувалися для них, наприклад С++ і Perl, були мало знайомі більшості користувачів Windows.
Для розв'язання цієї проблеми Microsoft розробила спосіб використання як мови для серверних скриптів VBScript, заснованого на більш поширеному Visual Basic. Сторінки, на яких використовуються серверні скрипти VBScript, називаються Active Server Pages (активними серверними сторінками), і для них використовується розширення ASP.
Коли сервер отримує запит від браузера на завантаження сторінки ASP, він обробляє цю сторінку, виконує розміщені на ній серверні скрипти і передає видаленому відвідувачеві Web-сайта тільки результати їх виконання, які складаються із звичайного тексту HTML (а не з коду скриптів).
До проблем, які виникають при використанні серверних скриптів, належить додаткова витрата ресурсів серверу і певні ризики, пов’язані з безпекою серверу. З метою забезпечення безпеки на сервері можуть виконуватися тільки ті скрипти, які вміщені в папку, спеціально позначену адміністратором Web-серверу як executable (що виконується). Адміністратор обмежує доступ до цієї папки тільки для визначеного кола осіб і додатків.
Приклад скрипта, що виконується на сервері: зміна змісту Web-сторінки
Сторінка повинна нагадати вам приклад 2 з розділу, в якому розповідалося про скрипти, що виконуються у браузері.
Діє ця сторінка точно так само, як і в прикладі, а саме: якщо з моменту появи елемента списку пройшло менш 14 днів, то відображається малюнок у вигляді напису New! або Upd!. У всіх інших випадках повинно показуватися зображення кульки (cyanballgif). Для правильного компонування сторінки використовується таблиця HTML.
Головна відмінність полягає в тому, що замість скрипта JavaScript, який виконується у браузері, використовується скрипт на мові VBScript, який виконується на Web-сервері. У результаті код виглядає абсолютно по-іншому.
У коді HTML скрипти VBScript, що призначені для виконання на сервері, повинні бути помічені тегами
<SCRIPT LANG=VBSCRIPT RUNON=SERVER> команди </SCRIPT>
Або ж бути вміщеними всередину тега з символами процента:
<% команди %>
Код скрипта, який містить його програмну логіку, виглядає так:
<%maxdays=14%>
<%if (now - #9/19/99# < maxdays) then%>
<img.src="/images/new.gif" <%else%>
<img.src"/images/cyanball.gif" <%end if%>
Для простоти ми прибрали вибір між New! і Upd! (в нашому випадку для оновлених елементів буде використаний тільки файл new.gif), але в іншому програмна логіка залишилася тією ж самою. Однак текст скрипта на VBScript дуже сильно відрізняється від тексту скрипта на JavaScript. Це викликано відмінностями між цими мовами програмування:
у VBScript поточна дата і час повертається за допомогою функції now;
у VBScript дати і час у VBScript зберігаються у вигляді цілих чисел для днів і десяткових дробів для часу. Наприклад, 6.00 буде виглядати як 0.25, 12.00 - 0.5, а 18.00 - як 0.75. Тому віднімання однієї дати від іншої дозволяє відразу ж отримати потрібне нам значення в днях;
у VBScript дати підтримуються напряму. Все, що вміщено між знаками фунта (#), вважається датою;
у VBScript доступна та ж команда document.write, що і в JavaScript, але в VBScript можна також використати і код HTML, який розкиданий всередині конструкцій If...Then...Else.
Тепер детальніше про кожний рядок коду. У першому оголошується змінна maxdays, і їй відразу ж задається значення 14. У другому рядку дата 19 серпня 1999 р. (записана в форматі, прийнятому в США) віднімається від поточної дати, і отримана різниця порівнюється зі значенням змінної maxdays. У третьому рядку вказується код HTML, який буде переданий Web-сервером в браузер, якщо нерівність другого рядка істинна. У наступних двох рядках говориться про те, яке зображення використати у всіх інших випадках. Останній рядок завершує конструкцію If...Then...Else.
Оскільки довжина цього коду набагато менша, ніж в прикладі, написаному на JavaScript для