Лабораторная
работа №2.
Создание CGI-скрипта.
(4 часа)
Цель работы:
Получить практические навыки в написании и отладке CGI-скрипта на языке программирования, имеющем средства для работы с интерфейсом CGI.
Задание:
Во всех вариантах заданий необходимо разработать CGI-скрипт.
Тест должен содержать не менее трех вопросов с не менее чем двумя вариантами ответа на каждый вопрос.
Данные, введенные пользователем, пересылаются на серверную сторону, где обрабатываются CGI-скриптом, который «на лету» формирует документ с результатами прохождения теста.
Примечание: CGI-скрипт следует написать так, чтобы он мог принимать данные, присланные как методом GET, так и методом POST.
Вариант 0
Проверка знаний правил дорожного движения.
Вариант 1
Проверка знания таблицы умножения.
Вариант 2
Психологический тест.
Вариант 3
Проверка знания языка разметки гипертекста HTML.
Вариант 4
Проверка знания каскадных таблиц стилей CSS.
Вариант 5
Проверка словарного запаса иностранного языка.
Вариант 6
Проверка знания языка программирования JavaScript.
Вариант 7
Проверка знания директив web-сервера Apache.
Вариант 8
Проверка знания языка программирования C++.
Вариант 9
Проверка знания языка программирования PHP.
Порядок выполнения лабораторной работы:
1. Для выполнения лабораторной работы установить программный комплекс Denwer (http://denwer.ru).
2. Создать html-документ с формой.
3. Написать CGI-скрипт в соответствии с заданным вариантом.
4. Протестировать созданный CGI-скрипт (при тестировании использовать методы передачи данных GET и POST).
Содержание отчета (отчет в электронном виде):
- отчет сохранить в файле с именем ЗФ-000 Иванов (лр).doc;
- титульный лист (образец можно скачать по адресу http://ermak.cs.nstu.ru/webprogramming/wp_cd_labworks_titlepage.doc);
- цель работы;
- задание;
- порядок выполнения лабораторной работы
- разметка html-документа;
- исходные коды скриптов;
- скриншоты html-документа с исходной формой и документом, сформированным CGI-скриптом;
- выводы по работе.
Теоретические сведения
CGI (Common Gateway Interface) – общий шлюзовой интерфейс
Один из способов формирования динамических html-документов (документов, создаваемых программно на серверной стороне «на лету») заключается в использовании CGI-скриптов.
CGI — это интерфейс, используемый для связи внешней программы, работающей на серверной стороне, с web-сервером.
Интерфейс CGI разработан таким образом, что для написания серверного CGI-скрипта можно использовать любой язык программирования, имеющий средства для работы со стандартными устройствами ввода/вывода.
CGI-скрипт, как правило, помещается в каталог cgi (или cgi-bin) web-сервера, но это требование необязательно, так как CGI-скрипт может располагаться в любом каталоге, но при этом большинство web-серверов требуют дополнительной настройки.
CGI-скрипт, использующий CGI-интерфейс, получает информацию от клиента, обрабатывает ее, и возвращает результат (динамически сформированный html-документ, гиперссылку на существующий html-документ, графическое изображение и т.д.) Так как CGI-скрипт — это программа, она должна быть оттранслирована для той операционной системы, под управлением которой работает web-сервер.
На стороне клиента отображается форма, размеченная тегом <form>, содержащая некоторые поля для ввода данных и кнопку для отсылки данных. После заполнения полей и нажатия кнопки данные в запросе клиента пересылаются на сторону сервера, где web-сервер передает присланные данные CGI-скрипту, используя CGI.
После обработки полученных данных CGI-скрипт создает документ и передает его web-серверу, который в ответе сервера возвращает документ на сторону клиента.
Передача информации от клиента к серверу и передача сформированного документа от сервера к клиенту изображена на рисунке.
1 — клиент формирует запрос, включая в него данные, внесенные в поля формы, запрос отсылается web-серверу.
2 — web-сервер, используя CGI, передает присланные в запросе данные CGI-скрипту.
3 — CGI-скрипт на основе данных формирует документ, возвращает его web-серверу, который, в свою очередь, формирует ответ сервера, включая в него документ, созданный CGI-скриптом, и возвращает ответ клиенту.
Для создания формы используется тег <form>.
<form action=URL method=GET | POST>
…
</form>
Атрибут action определяет url GCI-скрипта, обрабатывающего присланные данные.
Атрибут method определяет метод передачи данных. По умолчанию используется метод get.
Метод GET
Метод GET предполагает передачу данных GCI-скрипту через переменные среды (environment variables), устанавливаемые на стороне сервера.
Для передачи данных, присланных методом GET, используется переменная QUERY_STRING. Значением переменной QUERY_STRING будет строка, содержащая данные в формате name1=value1&name2=value2& … &nameN=valueN, где name — это имя поля формы, value — значение, определенное пользователем для поля формы.
Метод POST
При использовании метода POST GCI-скрипт получает присланные данные через стандартный поток ввода.
Объем переданных данных (в байтах) можно получить через переменную окружения CONTENT_LENGTH.
Формирование возвращаемого документа
Вне зависимости от метода передачи данных, GET или POST, результат своей работы GCI-скрипт должен направить в стандартный поток вывода.
При формировании возвращаемого документа GCI-скрипт должен предварить документ хотя бы одним заголовком ответа сервера, определяющим media-тип возвращаемого документа, заголовком Content-type. Заголовок должен быть отделен от собственно возвращаемого документа пустой строкой, как того требует структура ответа сервера.
Чаще всего GCI-скрипт используется для создания html-документов на основе данных, полученных от клиента. В этом случае заголовок ответа сервера должен определять media-тип возвращаемого документа как текст в формате html (Content-type: text/html), за которым необходимо вывести пустую строку, отделяющую заголовок от html-документа.
Web-сервер возвращает результат, сформированный GCI-скриптом, клиенту, возможно дополняя его статусной строкой и другими заголовками ответа сервера.
GCI-скрипт может сформировать полный ответ (со всеми заголовками ответа сервера). В этом случае web-сервер ничего не изменяет в результате работы GCI-скрипта, только пересылает его клиенту «как есть».
Пример: на стороне клиента в поля формы вносятся имя и возраст, в зависимости от возраста возвращаются разные приветствия (рассматриваются два варианта: для методов GET и POST).
Метод GET
HTML-документ, содержащий форму:
<html>
<form action=http://localhost/cgi/hello.exe method=get>
<p>ИМЯ<input type=text name=name>
<p>ВОЗРАСТ<input type=text name=age>
<p><input type=submit>
</form>
CGI-приложение (файл hello.cpp)
void main()
{
int age;
char *name=new char[256];
char *query_string=new char[256];
query_string=getenv("QUERY_STRING");
//query_string=”name=Maria&age=18”
//из строки извлекаются подстроки “Maria” и “18”
//и присваиваются переменным name и age соответственно
cout<<”Content-type: text/html\n\n”;
cout<<”<html>”;
if(age<=16) cout<<”Привет, ”;
if(age>16) cout<<”Здравствуйте, ”;
cout<<name<<”</html>”;
}
Метод POST
HTML-документ, содержащий форму:
<html>
<form action=http://localhost/cgi/hello.exe method=post>
<p>ИМЯ<input type=text name=name>
<p>ВОЗРАСТ<input type=text name=age>
<p><input type=submit>
</form>
CGI-приложение (файл hello.cpp)
void main()
{
int age;
char *name=new char[256];
int length=atoi(getenv("CONTENT_LENGTH"));
char * string=new char[length+1];
cin≫string;
//string=”name=Maria&age=18”
//из строки извлекаются подстроки “Maria” и “18”
//и присваиваются переменным name и age соответственно
cout<<”Content-type: text/html\n\n”;
cout<<”<html>”;
if(age<=16) cout<<”Привет, ”;
if(age>16) cout<<”Здравствуйте, ”;
cout<<name<<”</html>”;
}
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.