logo
Разработка web-приложения, обеспечивающего взаимодействие депутатов городской Думы г. Нижнего Новгорода с избирателями

1.5 Обоснование проектных решений

Обзор и сравнение существующих веб-технологий

На данный момент существуют и успешно применяются различные виды технологий построения Web приложений серверной стороны. Все такие приложения имеют общую цель - реализацию бизнес - логики на стороне сервера и генерацию кода для клиента. Также у всех этих приложений одинакова архитектура взаимодействия сервера и клиента и общий протокол взаимодействия - HTTP. Общая логика работы приложения серверной стороны представлена на рис. 1.14.

Рис. 1.14 Архитектура работы приложений серверной стороны

Как видно из рисунка, работа серверных приложений происходит в три основных этапа:

Запрос. Клиент, используя web - браузер, инициирует запрос к серверу;

Обработка запроса, подготовка ответа. После получения запроса web - сервер проводит обработку запрашиваемого ресурса. В случае, если запрашивается статический ресурс, такой как HTML страница, рисунок, документ, эта информация форматируется для протокола HTTP и передается клиенту в качестве ответа. Если же запрашивается динамический ресурс, запрос передается на обработку соответствующему контейнеру web - приложений, где и происходит дальнейшая работа;

После формирования, данные передаются клиенту посредством протокола HTTP в качестве ответа. Ответ содержит данные (обычно HTML код, либо двоичные данные), а также дополнительные параметры, передаваемые в заголовках HTTP ответа.

Работа приложений серверной стороны всегда происходит по описанному выше сценарию. Очевидно, что такой подход создает сложности при создании web -приложений, основной из которых является отсутствие состояния у web - приложения (так называемое stateless programming). Это означает, что приложение работает исключительно в режиме запрос-ответ, не имея данных о предыдущих шагах пользователя или какой-либо иной постоянной информации. Для решения этой проблемы применяется понятие пользовательской сессии, которая позволяет хранить данные на сервере в течение сеанса работы пользователя.

Требования к приложениям серверной стороны

При рассмотрении платформ для создания приложений серверной стороны необходимо выделить два основных существующих подхода:

Непосредственная обработка запросов и формирование ответов.

Встраивание программного кода в шаблоны HTML страниц.

Первый подход предоставляет наибольшие возможности по управлению обработкой и повышению производительности. Он предусматривает передачу всех данных о запросе непосредственно исполняемому коду, который может как сформировать ответ со страницей для пользователя, так и открыть на передачу поток двоичных данных, например для передачи изображения. Однако при таком подходе все данные для передачи формируются программным путем, что замедляет разработку простых страниц и усложняет взаимодействие между верстальщиком и программистом. Примерами этого подхода служат технологии CGI, Java Servlets. Второй подход использует шаблоны страниц пользователя, оформленные особым образом, что позволяет вставлять в них участки программного кода. Этот подход особенно эффективен при создании простых приложений, основная информация в которых статична, а динамическая информация может быть сгенерирована простыми программными конструкциями. При разработке сложных программных систем этот вариант усложняет взаимодействие между компонентами и затрудняет реализацию сложной архитектуры. Также он менее эффективен по производительности и ограничивает возможности по реализации сложных страниц. Примерами этого подхода служат очень популярные на данный момент технологии PHP, ASP, JSP.

Помимо различного подхода к генерации страниц платформы разработки в разной степени удовлетворяют современным требованиям, выдвигаемым при создании сложных Web систем. Наиболее важные из этих требований, наличие которых делает систему привлекательной для использования, приведены ниже:

Платформная независимость.

Язык реализации.

Производительность, масштабируемость.

Возможности расширения и интеграции.

Простота использования, наличие средств разработки.

Наличие необходимых программных библиотек.

Итак, мы определили ряд требований, необходимых для современной платформы разработки. Ниже рассматриваются наиболее популярные на данный момент платформы, их особенности, а также оценка с точки зрения приведенных критериев.

Обзор базовых технологий

Рис. 1.15 Классификация веб-технологий

На данный момент существует множество разработанных технологий серверной стороны, как коммерческих, так и свободно распространяемых.

Все описываемые языки программирования относятся к числу объектно-ориентированных.

Из них Perl, РНР, Python, JAVA -- языки, исполняющиеся на сервере (серверные языки). JavaScript -- язык, исполняющийся на браузере (клиентский). Компьютер, открывающий доступ к собственным ресурсам, носит название сервера, а получающий такой доступ -- клиент.

Технологии HTML и DHTML

HTML, Hyper Text Markup Language (язык разметки гипертекста) -- базовая технология интернета. Этакий царь всех языков программирования для всемирной паутины. Его программный код мы сможем найти в основе практически каждой web-страницы.

При помощи HTML можно создавать отдельные элементы, а в дальнейшем компоновать их между собой. HTML позволяет формировать текстовые блоки, форматировать их, выделяя абзацы, организовывать и создавать любые таблицы и списки. Есть возможность управлять цветовым оформлением документов, добавлять на сайт звуки, анимацию, картинки. HTML, естественно, помогает организовывать связь документов, разделов и страниц сайта между собой посредством гиперссылок.

Директивы HTML называются не командами, процедурами или операторами, как в большинстве языков, а гордо носят собственное наименование -- тэги (от английского слова tag -- отметка).

Главный недостаток HTML -- отсутствие средств, при помощи которых было бы возможно контролировать просмотр web-страниц независимо от пользователя. Web-мастер подготавливает страницу под какие-то определенные параметры, разрешение монитора, вид браузера и т.д. Пользователь же, изменив эти параметры у себя на компьютере, может получить на выходе страницу, существенно отличающуюся от замыслов программиста.

DHTML (Dynamic Hyper Text Markup Language), динамический язык разметки гипертекста -- это просто улучшенный и собранный воедино ряд web-технологий, расширенный набор средств, которые позволяют создавать интерактивные страницы, при этом уменьшая загрузку сервера.

DHTML базируется на объектной модели документа DOM (Document Object Model), технология эта встроена во все виды браузеров и помогает осуществить доступ к любому отдельно взятому элементу web-страницы (который в дальнейшем можно видоизменить). А потому технология DHTML позволяет нам осуществлять программное управление всеми тегами и атрибутами и создавать сложные пользовательские интерфейсы. DHTML позволит программисту спроектировать такие интерактивные элементы, как движущийся фон, расположенный под статичным текстовым содержимым страницы, любые сложные объекты, выпадающие меню, мигающие при наведении курсора кнопки, анимацию, титры и многое другое.

Технология Common Gateway Interface

Технология Common Gateway Interface (CGI), отличается от остальных рассматриваемых технологий тем, что является наиболее низкоуровневой и является стандартом интерфейса, который служит для связи внешней программы с web-сервером.

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

Рассмотрим основные достоинства и недостатки технологии CGI по выделенным критериям:

с CGI не налагает особых условий на платформу и web - сервер, поэтому работает на всех популярных платформах и web - серверах. Также технология не привязана к конкретному языку программирования и может быть использована на любом языке, работающем со стандартными потоками ввода/вывода.

с Производительность CGI - программ не высока. Основной причиной этого является то, что при очередном обращении к серверу для работы CGI - программы создается отдельный процесс, что требует большого количества системных ресурсов.

с Встроенных средств масштабируемости технология не предусматривает, об этом разработчикам приходится заботиться отдельно.

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

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

Технология Personal Home Page

Технология Personal Home Page (PHP) получила очень широкое распространение благодаря своей бесплатности и поддержке самых популярных платформ. Она базируется на принципе построения страниц из шаблонов, впервые появившемся в Active Server Pages, но развивает и дополняет его. Страницы РНР имеют вид обычных HTML страниц, в которых могут использоваться специальные тэги вида <?php и ?>. Между тэгами вставляются строки программного кода на специальном языке сценариев РНР.

Язык программирования PHP создавался специально для сети. PHP лучше всего охарактеризовать так: программист пишет сценарии -- код, сервер, получая готовые указания, обрабатывает информацию и выводит результат на монитор пользователя.

PHP помогает создавать динамические web-приложения, такие как форумы, счетчики статистики, может работать с большими объемами данных -- массивами. Очень хорошо язык PHP подходит для написания систем управления сайтами "движков".

Основное достоинство языка PHP -- простота изучения. Он будет интуитивно понятен программистам, обладающим навыками в таких языках, как Perl и C, и для новичка вполне доступен.

В PHP нет поддержки ссылок на переменные, из-за чего сложно обрабатывать масштабные структуры данных, например, вложенные списки. Нет проверки типов данных передаваемых функций, что может повлечь за собой множественные ошибки.

Рассмотрим основные достоинства и недостатки платформы:

Применяемый в РНР язык прост и удобен, однако не является в полном смысле объектно-ориентированным;

Для РНР существуют обширные библиотеки, а также масса встроенных функций для решения самых разнообразных задач.

При использовании РНР с Web сервером Apache есть возможность эффективного исполнения ядра, как расширения сервера. В остальных случаях производительность платформы невысока.

Собственных средств масштабирования РНР не имеет, все возможности по кластеризации целиком ложатся на Web - сервер и разработчиков.

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

Шаблонный подход РНР, при всех больших возможностях, скрывает серьезные недостатки. Из общих недостатков этого подхода, применимых как к РНР, так и ASP, JSP необходимо выделить следующие:

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

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

Хранение бизнес логики в файлах - страницах в распределенном по управляющим элементам виде приводит к затруднению ее вынесения в объекты второго уровня.

Как общий итог рассмотрения платформы можно заключить, что, благодаря простоте использования, наличию большого числа функций и библиотек, распространенности и поддержке большинства существующих Web - серверов и платформ, РНР является очень удобным средством разработки небольших систем. В то же время ограничения по производительности, масштабируемости, языку программирования и возможностям расширения и интеграции препятствуют использованию платформы при разработке масштабных систем.

Технология Java

JAVA представлен на сегодняшний момент в двух вариантах: JavaScript и собственно JAVA. Поговорим о каждом языке в отдельности.

JavaScript -- по сути, всего лишь надстройка стандарта HTML, которая значительно расширяет возможности документа, созданного в этом формате. Часть кода, написанная на JavaScript, внедряется в документ HTML как подпрограмма и вызывается на исполнение соответствующей строкой HTML-кода. Весь сценарий JavaScript умещается в одном-единственном теге <script>.

Встроенный в браузер интерпретатор языка воспринимает и скрипт, и сам код гипертекста как единый документ, обрабатывая те и другие данные одновременно.

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

JAVA -- это уже нечто большее: полноценный кросcплатформенный язык программирования, который будет правильно обработан и компьютером с операционной системой Windows, и ПК под управлением UNIX, и даже Mac OS легко "поймет, о чем речь".

На языке JAVA для сети разрабатываются небольшие программки, называемые аплетами, они загружаются из интернета и выполняются браузером (примером аплета могут послужить различного рода игры, например, шашки).

Большинство web-камер, передающих на сайты изображение в реальном времени, также работают на базе приложений JAVA.

Технология Java Servlets (сервлеты) была разработана компанией Sun Microsystems, чтобы использовать преимущества платформы Java для решения проблем технологии CGI и API расширений сервера. Технология решает проблему производительности, выполняя все запросы как нити в одном процессе. Сервлеты также могут легко разделять ресурсы, и не зависят от платформы, поскольку выполняются внутри Java Virtual Machine (JVM).

Технология обладает широкими функциональными возможностями. Большое количество библиотек предоставляет самые разнообразные средства, необходимые в разработке. Модель безопасности Java делает возможным точное управление уровнем доступа, например, позволяя доступ только к определенной части файловой системы. Обработка исключений Java делает сервлеты более надежным средством, чем расширения серверов на C/C++.

Любой сервлет является классом Java, и, поэтому, должен быть выполнен внутри Java VM так называемым сервлет - контейнером (servlet container, servlet engine). Сервлет - контейнер загружает класс сервлета при первом обращении к нему, либо сразу при запуске сервера при специальном указании. Далее сервлет остается загруженным для обработки запросов, пока он не выгружается явным образом, либо до остановки контейнера.

Технология является распространенной, и может быть использована со всеми популярными Web - серверами (Enterprise Server от Netscape, Microsoft Internet Information Server (IIS), Apache, Java Web Server от Sun).

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

Итак, сервлеты обеспечивают компонентный, платформе - независимый метод для построения web-приложений без ограничений производительности CGI программ. Они имеют широкий диапазон доступных прикладных API, позволяют использовать все преимущества Java, легко расширяются и масштабируются, поддерживаются всеми популярными Web - серверами. Все это делает их отличным средством разработки крупных Web - систем.

Технология Java Server Pages

Технология Java Server Pages (JSP) от компании Sun Microsystems явилась надстройкой над технологией Java Servlets, обеспечивающей более быструю и простую разработку web - приложений с помощью применения шаблонного подхода.

Для понимания архитектуры и преимуществ JSP необходимо знать технологию Java Servlets, поскольку они тесно связаны. Страницы Java Server Pages представляют из себя шаблоны страниц HTML, схожие с шаблонами РНР и ASP.

Основным отличием от других подобных технологий является то, что код, находящийся внутри специальных тэгов не интерпретируется при обращении к странице, а предварительно компилируется в Java Servlet. Статические участки шаблона преобразуются в вызовы к функциям для их помещения в поток вывода. Код компилируется так, как если бы он находился внутри сервлета. Компиляция JSP страниц в сервлеты является трудоемкой, но проводится один раз - либо при первом обращении к странице, либо при запуске сервлет - контейнера.

Технология JSP удачно объединяет шаблонный подход к построению сайтов и все преимущества Java платформы. Благодаря этому технология получила широкое распространение как среди профессиональных коммерческих разработчиков, так и при создании открытых бесплатных проектов.

Важным шагом к расширению шаблонного подхода стали так называемые библиотеки тэгов (tag libraries). Это гибкая возможность интегрировать стандартные, сторонние, или собственные программные компоненты в страницы. Простота создания и использования привели к большой популярности библиотек тэгов.

Благодаря работе на основе Java технология JSP не привязана к конкретной аппаратной или программной платформе. Таким образом JSP являются отличным решением для использования в гетерогенных средах.