Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Зимняя сессия 2014 / Вычислительные системы / Практическое занятие 15

.doc
Скачиваний:
86
Добавлен:
13.03.2015
Размер:
59.39 Кб
Скачать

Практическое занятие 15

HTML-формы. HTML-формы предназначены для пересылки данных от удаленного пользователя к веб-серверу. С их помощью можно организовать простейший диалог между пользователем и сервером.

Пример:

<FORM> ACTION = "URL"

METHOD = метод_передачи

ENCTYPE = MIME_тип>

...содержимое формы

</FORM>

Дополнительные параметры: CLASS, NAME, STYLE. Документ может содержать несколько форм, но они не могут быть вложенными друг в друга.

  1. ACTION. Его значением является URL-адрес CGI-программы, которая будет обрабатывать информацию, извлеченную из данной формы.

  2. METHOD. Определяет метод пересылки данных, содержащихся в форме, от браузера к веб-серверу. Обычно принимает одно из двух значений: GET (по умолчанию) и POST. В методе GET данные формы пересылаются в составе URL-запроса. В методе POST данные формы пересылаются в теле запроса.

  3. ENCTYPE. Возможны два значения параметра: application/x-www-form-urlencoded и multipart/form-data. Значением этого параметра является медиатип, определяющий формат кодирования данных, при передаче их от браузера к серверу. Браузер кодирует данные, чтобы исключить их искажения в процессе передачи.

Электронная почта - одно из первых приложений Интернет. Ориентировано на пересылку текстовых сообщений, но часто возникает необходимость вместе с текстом переслать данные в нетекстовом формате (zip-файл, рисунок). Для пересылки этих файлов без искажения средствами электронной почты, их кодируют в соответствии с некоторым стандартом. Стандарт MIME - Multipurpose Internet Mail Extensions (Многоцелевые расширения электронной почты для Интернета). Определяет набор MIME-типов, соответствующих различным типам данных, и правила пересылки их по электронной почте. Для обозначения MIME-типа используется запись вида: тип/подтип. Тип определяет общий тип данных. Например, application, text, image. Подтип определяет конкретный формат внутри типа данных (application/zip, image/gif, text/html). MIME-типы нашли применение в веб, где они называются медиатипами для идентификации формата документов, передаваемых по протоколу http. В HTML-форме параметр ENCTYPE определяет медиатип, используемый для кодирования и пересылки специального типа данных - содержимого формы. Если в форме присутствует элемент для ввода имени локального файла (TYPE = FILE), то этот файл присоединяется к содержимому формы при пересылке на сервер. Для корректной передачи этого файла нужно установить значение параметров формы равными: ENCTYPE = "multipart/form-data" METHOD = POST Иначе будет передана введенная строка, т.е. маршрутное имя файла, а не его содержимое. Тэг <INPUT> TYPE = TEXT - создает элемент для ввода строки текста.     = PASSWORD - символы заменяются на "*".     = FILE - создает поле для ввода имени локального файла, сопровождаемое кнопкой BROWSE.     = CHECKBOX - создает поле для установки флажка, который можно установить или сбросить. Объединяются в группу с одним именем.     = RADIO - создает элемент "переключатель", существующий только в составе группы подобных элементов, из которых может быть выбран только один.     = SUBMIT - определяет кнопку для передачи данных из формы на сервер.     = RESET - кнопка для очистки элементов формы.     = BUTTON - кнопка произвольного назначения.     = IMAGE - действует аналогично кнопке SUBMIT. Создает элемент в виде графического изображения.     = HIDDEN - скрытый элемент, не отображаемый пользователю. Тэг <SELECT>

<SELECT NAME = имя_поля

SIZE = n

MULTIPLE>

…элементы OPTION

</SELECT>

<OPTION SELECTED VALUE = строка>содержимое_тэга

Этот тэг организовывает внутри формы выбор из нескольких вариантов в виде раскрывающегося списка. Тэг <TEXTAREA>

<TEXTAREA NAME = имя

ROWS = m

COLS = n

Текст

</TEXTAREA>

Создает внутри формы поле для ввода многострочного текста. Для пересылки на сервер каждая строка дополняется символами %0D%0A (перевод строки и возврат каретки). Все строки объединяются в одну строку, которая отправляется на сервер под именем NAME. Кодирование и пересылка данных формы в запросе. Взаимодействие между клиентом-браузером и веб-сервером осуществляется по правилам протокола http и состоит из запросов клиента и ответов сервера. Запрос клиента разбивается на три части:

  • 1 строка - команда HTTP (метод GET или POST)

    • - URL-адрес запрашиваемого файла cgi-сценария

    • - номер версии протокола HTTP

  • 2 строка - заголовок запроса

  • 3 строка - тело запроса (собственно данные, посылаемые серверу)

Метод сообщает серверу о целях запроса. В протоколе http определены несколько методов, но для передачи формы в cgi-программу используются 2 метода GET и POST. Метод GET. Данные формы пересылаются в составе URL-запроса, к которому присоединяются после символа "?". Метод POST. Данные формы пересылаются в теле запроса. Схема кодирования данных из формы одинакова для обоих методов и заключается в следующем:

  1. Для каждого элемента формы, имеющего имя, заданное параметром NAME, формируется пара NAME = value, где value - значение элемента, введенное пользователем или назначенное по умолчанию. При отсутствии значения, соответствующая пара имеет вид: NAME =. Для радиокнопок и переключателей используются значения только выбранных элементов.

  2. Все пары объединяются в строку через разделитель &. Символы, не допустимые в составе URL (русские символы, пробелы, служебные символы) заменяются последовательностью, состоящей из символа % и их 16-го ASCII кода. Символ пробела может заменяться либо на %20, либо знаком "+". Признак конца строки заменяется кодом %0D%0A. Этот процесс называется URL-кодированием.

  3. Закодированная информация передается серверу одним из методов (GET или POST).

GET: <FORM METHOD = "GET" action = "/cgi-bin/registrat.cgi"> GET /cgi-bin/registrat.cgi?regname=Bob&password1=asd&password2=asd&age=lt20&language=russian&format=HTML&wish=%F6%C5%CC HTTP1.0 (заголовки запроса, сообщающие серверу информацию о клиенте) <пусто> (тело запроса)

POST:

<FORM METHOD = "POST" action = "/cgi-bin/registrat.cgi">

POST /cgi-bin/registrat.cgi HTTP1.0 (заголовки запроса, сообщающие серверу информацию о клиенте)

content_length:126

regname=Bob&password1=asd&password2=asd&age=lt20&language=russian&format=HTML&wish=%F6%C5%CC

content_length - сообщает серверу количество байт, переданных в теле запроса. При использовании метода GET веб-сервер, получив запрос присвоит переменной среды QUERY_STRING значение строки запроса и вызовет cgi-программу, обозначенную в первой части URL до знака вопроса. cgi-программа после запуска обращается к переменной QUERY_STRING для обработки закодированных в ней данных. При использовании метода POST значение content_length:126 присваивается глобальной переменной CONTENT_LENGTH, а данные пересылаются в стандартный ввод cgi-программы (STDIN). CGI-сценарий. Назначение - создать новый html документ, используя данные, содержащиеся в запросе и передать его обратно клиенту. Если такой документ уже существует, то передается ссылка на него. Свойства языка CGI-программирования:

  • средства обработки текста, необходимые для декодирования входной информации, поступающей в виде строки и состоящей из отдельных полей, разделенных символами ограничителя.

  • средства доступа к переменным среды. С помощью переменных среды данные передаются на вход cgi-программы.

  • возможность взаимодействия с другими программами. Необходима для обращения к СУБД, программам обработки графики и другим специальным программам.

Выбор языка зависит и от операционной системы веб-сервера. Большинство узлов работает под ОС UNIX, в которой очень распространено использование скриптов (текстовых командных файлов, представляющих собой программы, состоящих из обращений к командам ОС и управляющих конструкцией языка shell - командной оболочки UNIX). Shell - интерпретатор команд ОС. В то же время имеет встроенные средства, характерные для языков программирования, а именно строковые переменные и управляющие конструкции. Shell выполняет командные файлы как интерпретатор, т.е. считывает из файла и выполняет команды одну за другой с учетом управляющих конструкций, не преобразуя исходный текст в исполняемый двоичный код. Языки с интерпретаторами:

  • shell

  • perl (Practical Extraction and Report Language)

  • python

  • tcl

Perl. Наиболее распространен для написания cgi-сценариев, т.к. обладает следующими полезными средствами:

  1. Переносимость. Существуют версии интерпретатора Perl для MS-DOS, Windows, Macintosh и других платформ.

  2. Наличие готовых модулей, облегчающих cgi-программирование и свободно-доступных в сети Интернет на многих ftp-серверах.

Ответ сервера состоит из следующих трех частей:

  1. Строка состояния:

  • номер версии протокола HTTP;

  • код состояния;

  • краткое описание состояния.

  • Пример:

  • HTTP 1.0 200 OK #запрос выполнен успешно

    HTTP 1.0 404 Not Found #документ отсутствует

    1. Заголовок ответа. Содержит информацию о сервере и о возвращаемом html-документе.

    2. Пример:

    3. Date: Mon, 16 Jul 2004 15:49:37 GMT #текущие дата и время

    4. Server: Apache/1.3.6 #имя и номер версии сервера

    Content-type: text/html #медиатип содержимого

    1. Содержимое ответа - html-документ, является результатом выполнения cgi-программы, которая передает результат своей работы (html-документ) серверу, который возвращает его клиенту. При этом сервер не анализирует и не изменяет полученные данные, а только дополняет некоторыми общими заголовками. Информация о содержимом ответа формируется cgi-программой и должна содержать как минимум один заголовок, сообщающий браузеру формат возвращаемых данных. Если в качестве ответа клиенту посылается только подтверждение о получении заполненной формы, то он формируется только один раз и сохраняется в файле, адрес URL которого затем указывается серверу для передачи его клиенту в заголовок (location:url). Заголовки отделяются от содержимого документа пустой строкой. Файлы cgi-сценариев хранятся обычно на сервере в поддиректории cgi-bin.

    Обработка данных cgi-программы.

    1. Данные формы поступают в cgi-программу в закодированном виде, поэтому первый шаг - это декодирование данных, состоящее из следующей последовательности действий:

    • замена каждой группы %hh (16-й код ASCII) на соответствующий ASCII-символ

    • замена символа "+" пробелом

    • выделение отдельных пар "имя=значение", разделенных ограничителем &

    • выделение из каждой пары "имя=значение" имени и значения соответствующего поля формы

  • Обработка выделенных и декодированных данных. Программа должна проверить заполнение обязательных полей формы, правильность подтверждения пароля.

  • В зависимости от результата проверки формируется html-документ для отсылки клиенту.

  • Сохранение сценария в файле. (/cgi-bin/registat.cgi)

    Пример формирования cgi-сценария. 1) #!/usr/bin/perl print "Привет! \n" Первая строка сообщает местонахождение интерпретатора perl, а вторая строка - функция print, выводит сообщение в стандартный вывод stdout. 2) сохраняем текст программы в файле hello.pl 3) запуск программы на выполнение: perl hello.pl 4) преобразование программы в cgi-сценарий и сохранение его в файле hello.cgi #!/usr/bin/perl print "Content-type: text/html \n\n"; print "\n"; print "\n"; print "<h2>Привет!</h2>\n"; print "\n" 5) помещаем cgi-программу в каталог cgi-программ веб-сервера, а затем обращаемся к ней из браузера, который отобразит html-документ, созданный этой программой.