Урок 5: Перемещение данных между страницами
Основное отличие динамической веб-страницы заключается в том, что ее содержимое, отображаемое в браузере, не задается в коде, как в случае со статическим HTML, а вставляется на страницу непосредственно в процессе ее обработки. Вследствие этого основным навыком при разработке динамических страниц становится умение получить и ввести данные таким образом, чтобы они добавлялись на веб-страницы во время обработки сервером.
увеличить изображение
Рис. 5.1. В этом уроке для обеспечения устойчивости динамических данных будет создан механизм, передающий данные из URL-адреса в файл cookie, расположенный на жестком диске пользователя
Процесс формирования страниц был показан в конце предыдущего урока, когда в браузере отображалось имя, предварительно введенное пользователем в форму на другой странице. Для выполнения этой задачи применялся код ASP, ColdFusion или PHP, который получал значение переменной firstName и внедрял ее в строку обычного XHTML-кода. Несмотря на то, что приложение оказалось небольшим и очень простым, перемещение значений из формы на веб-страницу занимает значительную часть процесса разработки динамичных сайтов.
Как известно, разработка динамических сайтов состоит не только из форм и их переменных. Нередко на веб-страницу вставляется содержимое базы данных. Широко применяются файлы cookie, размещенные на компьютере клиента, в которых хранится определенная информация, пригодная для дальнейшего использования. Таким образом, создание динамических веб-страниц обычно означает обработку различных типов данных, поступающих из различных источников, и их отображение на стандартной XHTML-странице.
В этом уроке описаны два других способа получения и вставки (или прикрепления [binding] ) данных на веб-страницы. В ходе урока станет понятно, насколько похожи эти подходы к прикреплению данных с точки зрения кода. Тем не менее, у каждого подхода есть особые преимущества, которых нет у остальных. Файлы в упражнениях не относятся к сайту Newland Tours. К тому же, их значимость определяется не их влиянием на дизайн или практической пользой, а тем, что работа с ними составляет основу для приобретения ключевого навыка с целью прикрепления данных на веб-страницы.
При изучении подходов к прикреплению данных будет рассказано и о протоколе HTTP, который используется в сети. Принципы работы этого протокола определяют способы прикрепления данных к веб-страницам, а понимание его основ проясняет внутренние процессы работы динамических веб-страниц. В ходе книги, помимо форм, баз данных и файлов cookie, будут рассмотрены еще несколько способов прикрепления данных, а также описаны ситуации, при которых подходит тот или иной прием.
Что будет изучаться:
- протокол HTTP и его роль в разработке динамических сайтов;
- различия методов GET и POST;
- кодировка и извлечение строк запроса или переменных URL-адресов;
- кодировка и извлечение файлов cookie;
- создание файла cookie, использующего динамические данные.
Время выполнения
На выполнение этого урока потребуется приблизительно 75 мин.
Файлы урока
Исходные файлы:
Lesson05/Start/newland/about.asp
Lesson05/Start/newland/contact.asp
Lesson05/Start/newland/generic_template.asp
Lesson05/Start/newland/index.asp
Lesson05/Start/newland/profiles.asp
Lesson05/Start/newland/test_form.asp
Lesson05/Start/newland/test_form_processor.asp
Lesson05/Start/newland/tours.asp
Итоговые файлы:
Lesson05/Complete/newland/about.asp
Lesson05/Complete/newland/animal_home_page.asp
Lesson05/Complete/newland/animal_questions.asp
Lesson05/Complete/newland/contact.asp
Lesson05/Complete/newland/generic_template.asp
Lesson05/Complete/newland/index.asp
Lesson05/Complete/newland/profiles.asp
Lesson05/Complete/newland/test_form.asp
Lesson05/Complete/newland/test_form_processor.asp
Lesson05/Complete/newland/test_form_processor_cookies.asp
Lesson05/Complete/newland/tours.asp
Протокол HTTP
Страницы перемещаются в сети по протоколу HTTP. Этот протокол определяет, как пользователи (или системы) посылают запросы на серверы, расположенные по всей сети, и как серверы отвечают на эти запросы. Понимание основ этого протокола облегчает понимание принципов работы динамических страниц.
По сути, протокол HTTP – это система обмена сообщениями. Клиент посылает запрос на сервер, а сервер возвращает ответ. В состав запроса входит URL-адрес (Uniform Resource Locator – унифицированный указатель ресурса). При щелчке на ссылке в браузере на сервер отправляется запрос, содержащий адрес нужного файла.
Многие не знают, что помимо адреса компьютер-клиент отправляет серверу и другую информацию – о своих настройках. Сюда входят информация о браузере (в терминологии протокола: об агенте пользователя (user agent), имя пользователя, IP-адрес, форматы файлов, которые принимает клиент (например, GIF и JPEG ) и несколько источников данных. Запрос состоит из заголовка и тела. Большая часть перечисленной информации содержится в заголовке. Причина, по которой не все об этом знают, заключается в том, что заголовок запроса виден только компьютеру.
Получив запрос, сервер, по возможности, отвечает на него. Если в запрошенном документе содержится код, выполняемый на стороне сервера (например, код VBScript для ASP, языка разметки ColdFusion Markup Language или PHP), сервер обрабатывает его. Затем он удаляет обработанный код, а полученные результаты и код XHTML объединяет в документ, который отправляет клиенту в теле ответа. Ответ, как и запрос, содержит заголовок, в который помещается информация, предназначенная для системы клиента (размер и тип документа, дата и время отправки ответа и т.д.). Из всего этого пользователь видит только URL-адрес и итоговую XHTML-страницу.
На приведенной выше схеме отображается процесс передачи данных по протоколу HTTP. Прямоугольники со сплошной границей включают видимые для пользователей документы, а прямоугольники с границами из пунктирных линий содержат скрытую информацию.
В конце предыдущего урока данные, введенные пользователем в форму, были переданы в файл test_form_processor.asp именно при формировании ответа сервером. Переменная firstName и ее значение были переданы в теле запроса после щелчка на кнопке регистрации Submit. Другими словами, наличие скрытых участков в запросах и ответах делают возможным обмен данными между клиентом и сервером, вследствие чего данные становятся доступными расположенным на сервере сценариям ASP, ColdFusion или PHP. Помимо этого, при отправке данных клиенту сервер может добавить в сообщение указание сохранить их в файле cookie.
Прежде чем использовать полученные знания о HTTP при разработке динамических сайтов, следует упомянуть еще одну важную особенность протокола, о которой нужно знать, – отправив ответ клиенту, сервер не сохраняет информацию о совершенной операции обмена данными. Другими словами, если клиент отправит второй запрос серверу, сервер не будет знать о том, что этот клиент отправлял запрос несколько секунд назад. По этой причине HTTP называют протоколом без состояний (stateless protocol).
Неспособность HTTP учитывать историю предыдущих запросов приводит к возникновению проблем при разработке веб-приложений. Если сервер не распознает клиента при загрузке новой страницы, то каким образом можно совершить покупку в интернет-магазине, когда требуется пройти череду из нескольких экранов? Как в опросе из нескольких этапов добавить информацию, указанную на разных страницах, в одну и ту же базу данных? Тем не менее, решение проблемы существует, иначе как объяснить бесчисленное количество интернет-магазинов и проводимых опросов.
Невозможно разрабатывать динамичные сайты, не понимая принципов обмена данными между сервером и клиентом и неспособности протокола HTTP регистрировать проведенную операцию обмена. Разница между переменными запроса и переменными формы, методами POST и GET, установкой и считыванием файлов cookie становится значительно понятнее, если связать все это с протоколом HTTP.