Реферат: Использование CGI при создании интерактивных интерфейсов - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Использование CGI при создании интерактивных интерфейсов

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 63 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Использование CGI при создании интерактивных интерфейсов 4.1 WWW (World Wide Web) и средств а интерактивного взаимодействия 4.2Спецификация CGI 4.2.1Переменные окружения 4.2.2С тандартный вывод 4.2.3Стандартный входной поток 4.2.4Аргументы командной строки 4.3Последовательность действий для обработки входных данных cgi-модуля для разных методов запроса GET и POST 4.3.1Для метода GET 4.3.2Для метода POST 4.4Примеры cgi-модулей 4.1 WWW (World Wide Web) и сред ства интерактивного взаимодействия Цель данной гл авы познакомить пользователя с той частью WWW-тех нологий которая связана с создание м интерактивных интерфейсов и предполагается что пользователь знаком с основами WWW, HTML и С /С ++. В общем случае , интерактивный интерфейс пользователя представляет собой систему , обеспе чивающую взаимодействие пользовател я и пр ограммы . Для WWW, интерактивный интерфейс можно о пределить как последовательность HTML-документов , реа лизующих интерфейс пользователя . Можно также условно классифицировать принципы построения инт ерфейса по типу формирования HTML-документа : · статиче ский · динамический В первом случа е источником интерфейса является HTML-документ , с озданный в каком-либо текстовом или HTML-ориентир ованном редакторе . Следовательно , данный документ остается неизменным в течение использования . Во втором случае источником интерфейса является HTML-документ сгенерированный cgi-модулем . Следовательно , появляется некоторая гибкость в видоизменении интерфейса во время использовани я . Таким образом , можно ввести понятие ин терактивного интерфейса для WWW. Интерактивный интерфейс для WWW представля ет собой последовательность статических или д инамически формируемых HTML-документов , реализующих и нтерфейс пользователя . Практически любая задача , решающая пробле му получения данных от клиента , связана с построением интерфейса . Наиболее интересным является построение интерфейсов к различным базам данных , доступ к SQL-серверу , получени е информации от периферийных устройств , созда ние клиентских рабочих мест . Все это возмо жно посредством CGI(Common Gateway Interface). Common Gateway Interf ace (CGI) является стандартом интерфейса внешней прикладной программы с WWW сервером . Задача построения вышеназванных интерфейсов делится на две части : · Клиентская часть · Серверная часть Рисунок 4-1. Две части интерактивного интерф ейса . Клиентская часть Для создания к лиентской части необходимо создать HTML-документ , в котором реализ ован интерфейс с пол ьзователем . В языке HTML это возможно посредством форм . Конструкции языка HTML, используемые при реал изации форм , даны в приложении 1 к г л . 4. Серверная часть Серверная ча сть состоит из исполняемого модуля , ре шающего основные задачи обработки данных пост упающих от клиентской части , формирования отв ета в формате HTML, и т.д . Такой модуль наз ывается cgi-модулем . Методы HTTP запроса Для реализации взаимодействия "клиент-серве р " важно , какой метод HTTP запроса использует клиентская часть при обращении к WWW серверу . В общем случа е , запрос - это сообщение , посылаемое клиентом серверу . Первая строка HTTP запроса (см . гл .3 ) вкл ючае т в себя метод , который должен быть пр именен к запрашиваемому ресурсу , идентификатор ресурса (URI-Uniform Resource Identifier), и используемую версию HTTP-проток ола . В рассматриваемом нами случае , клиентская часть применяет методы запроса POST и GET. Ме тод POST используется для запроса с ерверу , чтобы тот принял информацию , включенну ю в запрос , как относящуюся к ресурсу , указанному идентификатором ресурса . Метод GET исполь зуется для получения любой информации , иденти фицированной идентификатором ресурса в HTTP запросе . Для WWW-сервера стандарта NCSA прикладные прогр аммы или CGI-модули , обрабатывающие поток данных от клиента или (и ) формирующие обратный поток данных могут быть написаны на та ких языках программирования как : · C/C++; · Любой UNIX shell; · Fortran; · Perl; · Visual Basic; · TCL; · AppleScript; 4.2 Спецификация CGI CGI определяет 4 инф ормационных потока . 1. Переменные окружения 2. Стандартный входной пото к 3. Стандартный выходной пот ок 4. Командная строка Рисунок 4-2. CGI-интерфейс . 4.2.1 Переменные ок ружения Переменные окружен ия условно делятся на два типа : · общие д ля всех типов запросо в (устанавливаются для всех типов ) · зависящие от метода запроса К переменным п ервого типа относятся следующие переменные : SERVER_SOFTWARE содержит инфо рмацию о WWW сервере (название /версия ) SERVER_NAME содержит инфор мацию об имени машины , на которой за пущен WWW сервер , символическое имя или IP адрес соответствующие URL. GATEWAY_INERFACE содержит инфо рмацию о версии CGI(CGI/версия ) Следующие переменные являются специфичными для разных типов запросов и значения э тим переменным прис ваиваются перед вызово м cgi-модуля . CONTENT_LENGTH значение этой переменной соответствует длине стандартного входного потока в символах . CONTENT_TYPE эта переменная специфицирована для запросов содержащих допо лнительную информацию , таких как HTTP POST и PUT, и содержит тип данных этой информации . SERVER_PROTOCOL эта переменна я содержит информацию об имени и версии информационного протокола (протокол /версия ). SERVER_PORT значение перем енной содержит номер порта , на который был послан запрос . REQUEST_METHOD метод запроса , который был использован "POST","GET","HEAD" и т.д . PATH_INFO значение переме нной содержит полученный от клиента виртуальн ый путь до cgi-модуля PATH_TRANSLATED значение пере менной содержит физический путь до cgi-модуля , преоб разованный из значения PATH_INFO. SCRIPT_NAME виртуальный пу ть к исполняемому модулю , используемый для получения URL. QUERY_STRING значение этой переменной соответствует строке символов сле дующей за знаком "?" в URL соответствующему данному запросу . Эта информация не декодируется сервером . REMOTE_HOST содержит симво лическое имя удаленной машины , с которой б ыл произведен запрос . В случае отсутствия данной информации сервер присваивает пустое з начение и устанавливает переменную REMOTE_ADDRESS. REMOTE_ADDR ESS содержит IP адрес клиента AUTH_TYPE если WWW-сервер поддерживает аутентификацию (подтверждение подлинн ости ) пользователей и cgi-модуль является защище нным от постороннего доступа то , значение переменной специфицирует метод аутотентификации . REMOTE_USE R содержит имя пользователя в случае аутотентификации . REMOTE_IDENT содержит имя пользователя , полученное от сервера (если се рвер поддерживает аутентификацию согласно RFC 931) HTTP_ACCEPT список типов MIME известных клиенту . Каждый тип в списке должен бы ть отделен запятой согласно спецификации HTTP (тип /подтип,тип /подтип и т.д .) HTTP_USER_AGENT название прог раммы просмотра которую использует клиент при посылке запроса . 4.2.2 Стандартный в ывод С GI - модуль выводит информацию в стандартны й выходной поток. Этот вывод может п редставлять собой или документ , сгенерированный cgi-модулем , или инструкцию серверу , где получи ть необходимый документ . Обычно cgi -модуль производит свой в ывод . Преимущество такого подхода в том , ч то cgi -модуль не должен формировать полн ый HTTP заголовок на каждый запрос . Заголовок выходного потока В некоторых случаях необходимо из бегать обработки сервером вывода cgi-модуля , и посылать клиенту данные без изменений . Для отличия таких cgi-модулей , CGI требует , чтобы и х имена начинались на nph-. В этом случа е формирование синтаксически правильного ответа клиенту cgi-модуль берет на себя . Заголовки с синтаксическим раз бором Вывод cgi-модуля должен нач инаться с заголовка содержащего определенные строки и завершаться двумя символами CR(0x10) . Любые строки не являющиеся директивами сервера , посылаются непосредственно клиенту . На данный момент , CGI спецификация определяет три директивы сервера : Content-type MIME или тип возвращаемого документа Например : Content-type : text/html сооб щает серверу , что следующие за этим сообщением данные - есть документ в формате HTML Location указывает сер веру , что возвращается не сам документ , а ссылка на него Если аргументом является URL, то сервер п ередаст указание клиенту на перенаправление з апр оса . Если аргумент представляет собой виртуальный путь , сервер вернет клиенту з аданный этим путем документ , как если бы клиент запрашивал этот документ непосредстве нно . Например : Location: http://host/file.txt приведет к тому , что WWW сервер выдаст file.t xt, как если бы он был затребован клиентом . Если cgi-модуль возвращает ссылки на gopher сервер , например на gopher://gopher.ncsa.uiuc.edu/. Вывод будет с ледующий : Location : gopher://gopher.ncsa.uiuc.edu/ *Status задает серверу HTTP/1.0 строку-статус , кот орая будет послана клиенту в формате : nnn xxxxx где : nnn - 3-х цифровой код статуса ххххх - строка причины Например : HTTP/1.0 200 OK Server: NCSA/1.0a6 Content-type: text/plain <динамически генерируемый текст сообщения > В данном случае , клиенту будет с ообщено об успешном выполнении запроса . 4.2.3 Стандартный в ходной поток В случае метод а запроса POST данн ые передаются как содержимое HTTP запроса . И будут посланы в стандартный входной поток . Данные передаются cgi-модулю в следующей форме : name=value&n ame1=value1&...&nameN=valueN где name - имя переменной , value - значение пере менной , N - количество переменных На файл овый дескриптор стандартного потока ввода пос ылается CONTENT_LENGTH байт . Так же сервер передает cgi- модулю CONTENT_TYPE (тип данных ). Сервер не посыл ает символ конца файла после передачи CONTENT_LENGTH байт данных или после того , как cgi-модул ь их прочитает . Переменные окружения CONTENT_LENGTH и CONTENT_TYPE устанавливаются в тот момент , когда серв ер выполняет cgi-модуль . Таким образом, если в результате исполнения формы с аргумент ом тега FORM - METHOD="POST" сформирована строка данных firm=МММ &price=100023, то сервер установит значение CONTENT_LENGTH равным 21 и CONTENT_TYPE в application/x-www-form-urlencoded, а в стандартный поток вв о да посылается блок данных . В случае метода GET , строка данных передается как часть URL. Т.е . например http://host/cgi-bin/script?name1=value1&name2=value2 В этом случае переменная окружения QUERY_STRING принимает значение name1=value1&name2=value2 4.2 .4 Аргументы командной строки С GI -модуль в командной строке от сервера получает : · остаток URL после имени cgi-модуля в к ачестве первого параметра (первый параметр бу дет пуст , если присутствовало только имя cgi- модуля ), и · список ключевых слов в качеств е остатка командной строки для скрипта поиска , или · чередующиеся имена п олей формы с добавленным знаком равенства и соответствующих значений переменных . Ключевые слова , имена и значения полей формы передаются декодированными (из HTTP URL формата кодиров ания ) и перекодированными в соответствии с пра вилами кодирования Bourne shell так , что cgi-модуль в командной строке получит информацию без необх одимости осуществлять дополнительные преобразования . 4.3 Последовательно сть действий для обработки входных дан ных cgi-модуля для разных методов запрос а GET и POST Исходя из разн ицы методов запросов GET и POST, можно определить последовательность действий для обработки вход ных данных cgi-модуля для разных типов запро сов . 4.3.1 Для метода GET 1. Получить значение п еременной QUERY_STRING 2. Декодировать имена и их значения (учитывая , что все пробелы при декодировании сервером были заменены символо м "+" и все символы с десятичным кодом б ольше 128 преобразованы в символ "%" и следующим за ним шестнадцатеричным кодом с имвола .) 3. Сформировать структуру с оответствия "имя - значение " для дальнейшего исп ользования в cgi-модуле 4.3.2 Для метода POST 1. Получить из стандартного входного п отока CONTENT_LENGTH символов 2. Декодировать имена и их значения (учитывая , что все пробелы при декодировании сервером были заменены с имволом " + " и все символы с десятичным кодом больше 128 преобразованы в символ " % " и следующим за ним шестнадцате ричным кодом символа .) 3. Сформировать структуру с оответствия "имя - значение " для дальнейше го использования в cgi-модуле Очевидно , что о тличие только в источнике данных . Поэтому , в принципе , возможно создание единого модуля для методов POST и GET. Необходимо только добав ить в начало проверку значения переменной REQUEST_METHOD для определения ме тода запроса . Пос ле формирования структуры "имя-значение " можно приступить к решению задач , ради которых , собственно , создавался cgi-модуль . Понятно , что за дачи , решаемые cgi-модулем , могут быть очень разнообразными (получение и обработка почты , д оступ к б азам данных , гостевая к нига и т.д .). Следующим важным моментом является динами ческое формирование cgi-модулем HTML-документа (оформлен ие результата работы модуля ). Например , таблицы выборки из базы данных . Для этого cgi-модуль должен выдать в стандартный выходной поток заголовок сос тоящий из строки : Content-type: text/html и пустой строки (двух символов CR ) После этого заголовка можно давать лю бой текст в формате HTML. 4.4 Примеры cgi-мо дулей В качестве при мера рассмотрим работу тестовых программ пост а вляющихся вместе с программным обеспечен ием сервера НТТР D стандарта NCSA. Для тестирования работы форм поставляются программы : post-query - для тестирования работы форм с методом з апроса POST query - для тестирования работы форм с методом запроса GET util.c - описание функц ий для обработки входного потока (используетс я query и post-query). Рассмотрим простой пример формы на яз ыке HTML использующую программу query. Прим ер использова ния CGI
Введите свое имя ( Фамилию Имя Отчество ):

Пол : - мужской - женский


После инициации формы путем н ажатия кнопки "Послать за прос " WWW сервер обрабатывает поток данных от формы (заменяет все пробелы в именах и значениях на символ "+", заменяет все символы с десятичны м кодом большим 128 на символ "%" и следующим за ним шестнадцатеричным кодом символа (нап ример "И " в %С 8)). Выхо д ной поток примет следующий вид : RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8%E4%EE%F0 %EE%E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE%F1 %EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1 В момент передачи управления модулю post-query сервер присваивает значения пе ременным окружения и аргументам командной строки : argc = 0. argv = SERVER_SOFTWARE = NCSA/1.5.1 SERVER_NAME = iceman.cnit.nsu.ru GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.0 SERVER_PORT = 80 REQUEST_METHOD = POST HTTP_ACCEPT = image/gif, image/x -xbitmap, image/jpeg, image/pjpeg,*/* PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = REMOTE_HOST = fwa.cnit.nsu.ru REMOTE_ADDR = 193.124.209.74 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = application/x-www-form-urlencoded CONTEN T _LENGTH = 142 Результат работы post-query:

Query Results

You submitted the following name/value pairs:

  • RealName = Петров Иван Сидорович
  • Sex = Мужской
  • Submit = Послать запрос
И на экр ане браузера Query Results You submitted the following name/value pairs: RealName = Петров Иван С идорович Sex = М ужской Submit = Пос лать запрос Ниже приведен исходный текст программы post-query. #include #ifndef NO_STDLIB_H #includ e #elsechar *getenv(); #endif #define MAX_ENTRIES 10000 typedef struct char *name; char *val; entry; char *makeword(char *line, char stop); char *fmakeword(FILE *f, char stop, int *len); char x2c(char *what); void unescape_url(cha r *url); void plustospace(char *str); main(int argc, char *argv[]) entry entries[MAX_ENTRIES]; register int x,m=0; int cl; printf("Content-type: text/html%c%c",10,10); if(strcmp(getenv("REQUEST_METHOD"),"POST")) printf("This script should be referenced with a METHOD of POST.\n"); printf("If you don't understand this, see this "); printf(" forms overview.%c",10); exit(1); if(strcmp(getenv("CONTE NT_TYPE"),"application/x-www-form-urlencoded")) printf("This script can only be used to decode form results. \n"); exit(1); cl = atoi(getenv("CONTENT_LENGTH")); for(x=0;cl && (!feof(stdin));x++) m=x;entries[x].val = fmakeword(stdin,'&',&cl); plus tospace(entries[x].val); unescape_url(entries[x].val); entries[x].name = makeword(entries[x].val,'='); printf("

Query Results

"); printf("You submitted the following name/value pairs:

%c",10); printf("

    %c",10); for(x=0; x <= m; x++) printf("
  • %s = %s%c",entries[x].name, entries[x].val,10); printf("
%c",10); Надо отметить , что post-query не обраб атывает имена , поэтому в примере они даны на английском языке . Если Вы используете русские названия имен , то вы должны обработать имена также как и значе ния , т.е . заменить все символы "+" на пробелы и преобразовать шестнадцатеричные коды кирил лических символов в сам символ . Приведем также исходный текст функций используемых post-query char *makeword (char *line, char sto p) /* Предназначена для выделения части стро ки , ограниченной "стоп-символами "*/ int x = 0,y; char *word = (char *) malloc(sizeof(char) * (strlen(line) + 1)); for(x=0;((line[x]) && (line[x] != stop));x++) word[x] = line[x]; word[x] = '\0'; if(line[ x]) ++x; y=0; while(line[y++] = line[x++]); return word; char *fmakeword (FILE *f, char stop, int *cl) /* Предназначена для в ыделения строки , ограниченной "стоп-символом " stop, из потока f длиной cl. */ int wsize; char *word; int ll; wsize = 102400; ll=0; word = (char *) malloc(sizeof(char) * (wsize + 1)); while(1) word[ll] = (char)fgetc(f); if(ll==wsize) word[ll+1] = '\0'; wsize+=102400; word = (char *)realloc(word,sizeof(char)*(wsize+1)); --(*cl); if((word[ll] == stop) || (f eof(f)) || (!(*cl))) if(word[ll] != stop) ll++; word[ll] = '\0'; return word; ++ll; char x2c (char *what) /* Предназначена для преобразования шестнадцатиричного кода с имвола в код символа */ register char digit; digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0')); digit *= 16; digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0')); return(digit); void unescape_url (char *url) register int x,y; for(x=0,y=0;url[y];++ x,++y) if((url[x] = url[y]) == '%') url[x] = x2c(&url[y+1]); y+=2; url[x] = '\0'; void plustospace (char *str) /*замена символов "+" на символ "пробел "*/ register int x; for(x=0;str[x];x++) if(str[x] == '+') str[x] = ' '; Для демон страции реализации формы с методом запроса GET воспользуемся той же самой формой , что и для метода POST и п рограммой query. Для этого изменим значение атрибу тов ACTION и METHOD в теге FORM.
После инициации формы сервер установит следующие значения для переменных о кружения и аргументов командной строки : argc = 0. argv is = SERVER_SOFTWARE = NCSA/1.5.1 SERVER_NAME = iceman.cnit.nsu.ru GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1. 0 SERVER_PORT = 80 REQUEST_METHOD = GET HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = RealName=%CF%E5%F2%F0%EE%E2+%C8%E2%E0%ED+%D1%E8 %E4%EE%F0%E E %E2%E8%F7&Sex=%CC%F3%E6%F1%EA%EE%E9&Submit=%CF%EE %F1%EB%E0%F2%FC+%E7%E0%EF%F0%EE%F1 REMOTE_HOST = fwa.cnit.nsu.ru REMOTE_ADDR = 193.124.209.74 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = CONTENT_LENGTH = Как мы видим , выходной поток от формы появился в значении перем енной QUERY_STRING. Результат работы query полностью совпадает с результатом работы post-query. Приложение 1 к гл .4 Конструкции языка HTML для построения форм ...
использование : предназначен для получения информации от клиента и определяет нача ло и конец формы . атрибуты : · Обязательные ACTION - определяет URI (Universal Resource Identifier-адрес или место расположения документа ) CGI-скрипта METHOD - определяет метод пере дачи информации скрипту . Возможные значения GET или POST. · Необязательные [ENCTYPE] - определяет тип MIME декодирования информации (значение этого ат рибута по умолчанию - "application/x-www-form-urlencoded"). [SCRIPT] - используется для пере дачи URI скрипта . Язык скрипта и интерфейс по льзователя при этом не являются частью спецификации HTML 3.0 Важно : Формы не могут быть вложенными ! Для реализации формы используются следующ ие теги . использование : предназначен для создания различных по своей функциональности полей вво да . атрибуты : · Обязательные : TYPE - определяет тип поля формы . o Допустимые значения : TEXT - позволяет символьный в вод . PASSWORD - предн азначено для "скрытого " ввода символов (вводимы е символы не отображаются ). CHECKBOX - поле , позволяющее два состояния ("есть ", "не т "). Должен применят ься с атрибутами NAME и VALUE RADIO - поле , позволяющее выбор "один из всех " SUBMIT - кнопка инициирующая передачу информации из формы обрабатывающему скрипту , определенному в ACTION в соответствии с методом , определенны м атрибутом ME THOD. RESET - кнопка , сбрасывающая все введенные ранее значения . IMAGE - поле позволяющее воспроизвести событие SUBMIT при помощи вашего изображения , при этом возвращается два значения : name.x = координата Х и name.y = координата Y, где Х и Y координаты п оложения курсора мыши на изображении в момент щелчка . HIDDEN - поле создающее неотображаемое значен ие . RANGE - определ яет поле позволяющее ввести цифровое значение с определенными допустимыми верхним и ни жним пределами . Используется вместе с атрибу тами MAX и MIN определяющими область допустимых значений (например : TYPE=RANGE MIN=1 MAX=10). NAME - значение этого атрибута определяет идентификатор поля. VALUE - значение этого атрибута определяет что будет передано в качестве значения по умолчанию для данно го поля при ини циации формы . SRC - определяет URI файла изображения . Используется толь ко с типом поля IMAGE. [CHECKED] - позволяет установить начальное значен ие поля типа CHECKBOX. SIZE - определяет размер поля . [MAXLENGTH] - определяет максимальное ко личество символов , допустимое для вво да в поле. [ALIGN] - позволяет позиционирование o Допустимые значения : o по вертикали TOP - выравнивание по верху . MIDDLE - в ыравнивание по середине . BOTTOM выравнивание по низу . Эти значения используются только с TYPE=IMAGE. o по горизонтали [LEFT] - выравнивание слева [RIGHT] - выра внивание справа [DISABLED] - определяет поле как "read only" - только для чтения . Значение в поле не может б ыть изменено пользователем. [ERROR] - определяет сообщение об ошибке , об ъясняющее , почему введенное значение в поле не верно.