Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Особенности алгоритмизации при разработке WEB-приложений (Подходы к построению Web-приложений)

Содержание:

1. Введение

Проект World Wide Web зародился в начале 90-х годов в швейцарском

институте CERN. Изначально он задумывался, как средство облегчаю-

щее поиск библиотечной информации, распределенной между несколь-

кими серверами в CERN. Для этого он использовал концепцию «гипер-

текста», разработанную ранее Тедом Нельсоном и Ванневаром Бушем.

У WWW было несколько важных отличий от других систем гипертек-

ста, которые тогда уже существовали (Note Code, HyperCard, Gopher):

• В WWW использовались только однонаправленные ссылки, что

позволяло ссылаться на другие ресурсы без каких-либо действий

со стороны владельца этого ресурса.

• WWW не принадлежал какой-либо компании, поэтому можно бы-

ло создавать программное обеспечение независимо и без всяких

лицензионных ограничений.

Эти черты сыграли большую роль во взрывном росте популярности

WWW в середине 90-х годов, когда вышел веб-браузер Mosaic и после-

довавший за ним коммерческий аналог Netscape Navigator.

WWW был построен на трех главных стандартах: URL (RFC2396),

HTTP (RFC2616) и HTML. Самый молодой из них и следовательно са-

мый развивающийся — HTML. Изначально он был задуман исключи-

тельно для семантической разметки текста (ссылки, разделы, цитаты и

пр.), затем всвязи с коммерциализацией веба к этому стандарту стали

добавляться различные, часто не совместимые друг с другом тэги для

художественного оформления текста. В последствии эта тенденция была

признана неправильной (по причинам отсутствия стандартизации и от-

сутствия разделения смысловой и оформительской части документа) и

консорциумом W3C, который разрабатывает стандарт HTML, был взят

обратный курс — на оставлении в HTML только семантической раз-

метки, для оформления же был придуман специальный стандарт CSS

(каскадные списки стилей).

Еще одна ярко выраженная тенденция в развитии WWW — это со-

вершенствование средств поддержки интерактивности веб-страниц. На

стороне клиента это HTML-формы, JavaScript — скриптовый язык про-

граммирования, встраиваемый в браузер, и DOM (Объектная модель

документа) — стандарт описывающий способ работы с частями HTML-

документа из языков программирования, в частности из JavaScript. На

стороне сервера — CGI-интерфейс, различные скриптовые и компили-

руемые языки программирования, взаимодействующие с пользователем

через этот интерфейс, а впоследствии и сервера веб-приложений, ори-

ентированные на разработку приложений с веб-интерфейсом на опреде-

ленном языке программирования (Java, Python, и т.д.).

Со временем возможности WWW по взаимодействию с пользовате-

лем доросли до определенного уровня, на котором стало возможным

создание полноценных Web-приложений.

2. Web-приложения

Web-приложение — это приложение, работающее на платформе Web,

т.е. использующее для взаимодействия с пользователем веб-сервер, ра-

ботающий по протоколу HTTP и браузер, интерпретирующий страницы

HTML. По-другому можно сказать, что это некоторый сайт, содержимое

которого изменяется динамически на основе взаимодействия с пользова-

телем.

Понятия и классификация web-приложения

Развитие современной компьютерной техники и внедрение новейших технологий положили начало нового направления жизни на Земле. За довольно короткий промежуток времени развития микроэлектроники и кибернетики произошло много изменений.

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

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

Интернет -- это не только "прохладный бассейн", в котором так комфортно чувствуют себя весьма "перегревшиеся" люди, но и место, где можно "потрогать" практически любую горячую тему, не опасаясь при этом обжечься

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

Информация, доступная пользователям Internet, располагается на компьютерах (Web-серверах), на которых установлено специальное программное обеспечение. Значительная часть этой информации организована в виде Web-сайтов. Каждый из них имеет свое имя (адрес) в Internet. Web-сайт - это информация, представленная в определенном виде, которая располагается на Web-сервере и имеет свое имя. Для просмотра Web-сайтов на компьютере пользователя используются специальные программы, которые называются браузерами. Наиболее распространенными браузерами в настоящее время являются Internet Explorer и Netscape Navigator. Взависимости от того, какое имя сайта мы зададим в строке "Адрес", браузер будет загружать в свое окно соответствующую информацию.

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

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

В настоящее время с точки зрения назначения различают три основных типа порталов:

· Публичные, или горизонтальные, порталы (называемые иногда мегапорталами), такие как Yahoo, Lycos, Excite, Rambler. Такие порталы нередко являются результатом развития поисковых систем. Предназначены они для самой широкой аудитории, что отражается на содержании предоставляемой ими информации и услуг. Как правило, эта информация носит общий характер, равно как и предоставляемые услуги (электронная почта, новостные рассылки и так далее).

· Вертикальные порталы. Этот вид порталов предназначен для специфических видов рынка и обслуживает аудиторию, пользующуюся услугами этого рынка или работающую на нем. Примерами таких порталов могут служить, например, туристические агентства, предоставляющие услуги по бронированию мест в гостиницах, заказу и доставке билетов, доступу к картам и сведениям об автомобильных маршрутах, либо порталы типа B2B (business-to-business), позволяющие своим клиентам реализовывать совместные бизнес-операции (например, выбирать поставщиков и осуществлять закупку товаров, проводить аукционы).

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

Другие наиболее распространённые web-приложения:

· Региональные Интернет-порталы, универсальные по своему направлению, но ограниченные географией заинтересованных посетителей (e1.ru);

· Поисковые системы -- это Интернет-порталы, которые предназначены для того, чтобы предоставить их посетителю возможность найти сайты, на которых встречаются заданные слова или целые фразы (metabot.ru);

· Каталог -- это коллекция ссылок на сайты. Зачем же нужны каталоги, если есть поиск? Очень часто мы не знаем точно, что нам нужно, не можем это сформулировать парой слов (mail.ru);

· Электронные доски объявлений - являются местом в Интернет, где практически любой желающий может оставить информацию ознакомительного, пригласительного или рекламного характера;

· Форумы -- это специальные сайты или разделы на сайтах, предназначенные для того, чтобы посетители, оставляя свои сообщения, обменивались мнениями;

· Чаты - являются еще одним местом для общения в Интернет, только его назначение не обмен мнениями на какую-то тему, а просто времяпрепровождение;

· Файлы для скачивания;

· Фотогалереи;

· Элементы статистики;

· Хранение в интернете различной информации;

· Серверы почтовых рассылок, они предлагают услуги по доставке информации широкому кругу читателей (subscribe.ru);

Технические особенности

Существенное преимущество построения веб-приложений для поддержки стандартных функций браузера заключается в том, что функции должны выполняться независимо от операционной системы данного клиента. Вместо того, чтобы писать различные версии для Microsoft Windows, Mac OS X, GNU/Linux и других операционных систем, приложение создаётся один раз для произвольно выбранной платформы и на ней разворачивается. Однако различная реализация HTML, CSS, DOM и других спецификаций в браузерах может вызвать проблемы при разработке веб-приложений и последующей поддержке. Кроме того, возможность пользователя настраивать многие параметры браузера (например, размер шрифта, цвета, отключение поддержки сценариев) может препятствовать корректной работе приложения.

Другой (менее универсальный) подход заключается в использовании Adobe Flash, Silverlight или Java-апплетов для полной или частичной реализации пользовательского интерфейса. Поскольку большинство браузеров поддерживает эти технологии (как правило, с помощью плагинов), Flash- или Java-приложения могут выполняться с легкостью. Так как они предоставляют программисту больший контроль над интерфейсом, они способны обходить многие несовместимости в конфигурациях браузеров, хотя несовместимость между Java- или Flash-реализациями на стороне клиента может приводить к различным осложнениям.

На 2015 год технологию Adobe Flash не поддерживают Chrome, Safari, и другие популярные браузеры.[1]

В связи с архитектурным сходством с традиционными клиент-серверными приложениями, в некотором роде «толстыми» клиентами, существуют споры относительно корректности отнесения подобных систем к веб-приложениям; альтернативный термин «полнофункциональное приложение интернета» (англ. Rich Internet Applications).

Архитектура веб-приложений

Веб-приложение состоит из клиентской и серверной частей, тем самым реализуя технологию «клиент-сервер».

Клиентская часть реализует пользовательский интерфейс, формирует запросы к серверу и обрабатывает ответы от него.

Серверная часть получает запрос от клиента, выполняет вычисления, после этого формирует веб-страницу и отправляет её клиенту по сети с использованием протокола HTTP.

Само веб-приложение может выступать в качестве клиента других служб, например, базы данных или другого веб-приложения, расположенного на другом сервере. Ярким примером веб-приложения является система управления содержимым статей Википедии: множество её участников могут принимать участие в создании сетевой энциклопедии, используя для этого браузеры своих операционных систем (будь то Microsoft Windows, GNU/Linux или любая другая операционная система) и не загружая дополнительных исполняемых модулей для работы с базой данных статей.

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

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

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

Название

Лицензия

Веб-сервер

ASP

проприетарная

специализированный

ASP.NET

проприетарная

специализированный

C/C++

свободная

практически любой

Java

свободная

множество, в том числе свободных

Perl

свободная

практически любой

PHP

свободная

практически любой

Python

свободная

практически любой

Ruby

свободная

практически любой

Nodejs

MIT License

собственный

ASP.NET vNext

Apache 2

практически любой[Прим. 1]

На стороне клиента используется:

Для реализации GUI

HTML, XHTML

CSS

Для формирования запросов, создания интерактивного и независимого от браузера интерфейса:

ActiveX

Adobe Flash, Adobe Flex

Java

JavaScript

Silverlight

2.1. Примеры

Наиболее известные примеры веб-приложений: веб-почта

(http://mail.ru), интернет-магазины (http://amazon.com), онлайно-

вые аукционы (http://ebay.com). Однако область применения веб-

приложений гораздо шире, чем электронный бизнес, они используются

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

2.2. Организация

Хотя возможны различные вариации, чаще всего используется трехуров-

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

нибудь технология предоставления динамического веб-контента и база

данных. Веб-браузер посылает запросы среднему уровню, который об

служивает их, производя запросы к базе данных, и представляя резуль-

таты в пользовательском интерфейсе.

Например, рассмотрим самую популярную на сегодняшний день платформу для веб-приложений, т. н. LAMP — Linux, Apache, MySQL, PHP.

Здесь роль среднего уровня играет веб-сервер Apache с установленным

на нем модулем поддержки скриптового языка программирования PHP.

А в качестве базы данных выступает MySQL.

2.3. Достоинства и недостатки

Достоинства:

• независимость от клиентской, а часто и серверной платформы;

• нетребовательность к ресурсам клиента (используется т.н. тонкий

клиент — браузер);

• не требует установки на клиентский компьютер какого-либо про-

граммного обеспечения кроме браузера;

• легкость обновления версий веб-приложения, т.к. оно обновляется

только один раз — на сервере;

• «встроенные» сетевые возможности (возможность работать с

несколькими клиентами одновременно);

• сохраняются все данные при переходе клиента с машины на машину.

Недостатки и способы их обхода:

• низкое время реакции — ориентация на клиентские технологии,

типа JavaScript, DOM, Flash, XUL;

• протокол HTTP не хранит состояния — механизм cookies, сессии;

• малая защищенность — защищенные соединения HTTPS, автори-

зация встроенная в HTTP или на основе сессий;

• неразвитость языка HTML в смысле форм — разработка стандарта

XForms, Flash, Java applets.

3. Современное состояние и перспективы

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

Некоторые уже ставят веб в один ряд с Windows, Linux и

проч., в качестве новой платформы для выполнения приложений

(http://www.joelonsoftware.com/articles/APIWar.html).

Развитие веб-технологий идет полным ходом. В данный момент наиболее интересными и перспективными технологиями представляются:

• XForms — новый стандарт для описания интерфейсов на XML, учитывающий недостатки форм в HTML. Он добавляет к стандартным

возможностям HTML-форм проверку правильности заполнения, об-

мен данными в формате XML и использование стандартных XML-

технологий, независимость от платформы.

• XMLHttpRequest дает возможность послать на сервер какие-либо

данные без полной перезагрузки страницы.

• XUL — еще один стандарт для описания интерфейсов, который

используется в Mozilla и других, созданных на его основе брау-

зерах, благодаря чему получил сейчас большое распространение в

качестве технологии для создания т.н. «rich» веб-приложений, т.е.

обладающих большим набором возможностей на стороне клиента,

чем традиционные веб-приложения.

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

4. Построение веб-приложений

В этой работе основное внимание будет уделено разработке веб-

приложений. В качестве платформы для разработки выбрана Java, т.к.

эта технология на данный момент является наиболее развитой, стандар-

тизированной, применяемой на уровне Enterprise и классической (т.е. из

нее в основном идут заимствования в других платформах). Она обладает

следующими преимуществами:

• Большое сообщество опытных пользователей, программистов, ад-

министраторов. Не возникает проблем с поиском интересующей

информации.

• Стандартизированность и постоянное развитие через Java

Community Process — стандартный процесс, позволяющий заин-

тересованным сторонам участвовать в разработке будущих версий

платформы.

• Большое количество и разнообразие разработанных библиотек.

• Переносимость между различными платформами.

4.1. Технологии построения Web-приложений

В данном разделе будут рассмотрены технологии среднего уровня для

построения веб-приложений. Старейшей из них является CGI (Common

Gateway Interface) — это спецификация, которая задает способы взаимо-

действия обычных приложений, выполняющихся на серверной машине,

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

отображения на странице и HTTP-заголовки передаются программой в

стандартном потоке вывода, а параметры в программу передаются че-

рез переменные окружения. CGI позволяет писать сервеные скрипты на

каком угодно языке, лишь бы он поддерживался программным обеспече-

нием, установленным на сервере. Наиболее часто используемыми такими языками были Perl, C, bash (язык командной строки Unix).

Основным недостатком такого подхода была неустойчивость под высокими нагрузками на сервер, связанная с тем, что каждый запущенный скрипт создавал новый процесс на сервере (как известно операции с процессами довольно дорогостоящи), кроме того у такого подхода возникали сложности с хранением промежуточных данных между вызовами скриптов или общих для всех скриптов данных (приходится их где-то сохранять, что также связано с дополнительными накладными расходами). Решением всего этого стало встраивание специальных модулей непосредственно в веб-сервер Apache (например, модуль PHP). Теперь промежуточные данные могли храниться в оперативной памяти, новых процессов каждый раз не созывалось, и все скрипты могли иметь общиеразделяемые ресурсы, такие как соединение с базой данных (установка соединения тоже занимает определенное время). Кроме PHP существуют также модули для Perl, Python и других скриптовых языков.

Следующим шагом в развитии платформ для веб-приложений ста-

ли сервера веб-приложений (Apache Tomcat, Zope), ориентированные на

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

используются скриптовые, довольно медленные, достигается неплохое

увеличение производительности. В первую очередь это происходит из-за

кэширования всего, что только можно в оперативной памяти: програм-

мы не перекомпилируются каждый раз, когда к ним обращаются, суще-

ствует общий пул соединений с базой данных. Кроме того достигается

масштабируемость за счет использования языков с хорошей поддержкой

многопоточности.

4.2. Java технологии

Язык Java изначально позиционировался производителем, как язык для

Интернет. С пользовательскими приложениями у Java не сложилось, но

зато на стороне сервера Java применяется очень широко и имеет большое

количество различных интересных возможностей.

Прежде всего существует несколько конкурирующих серверов веб-

приложений, которые несмотря на различия придерживаются некоторых

стандартов, установленных Sun, а значит большинство приложений без

каких-либо значительных модификаций могут быть перенесены с серве-

ра на сервер.

Кроме того существует несколько разного уровня сложности и с

разными подходами фреймворков для разработки веб-приложений (т.е.

библиотек классов, на основе которых строится веб-приложение). Это

фреймворки для структурирования приложений на основе паттерна

MVC (Struts, Spring), библиотеки для построения шаблонов веб-страниц

(JSTL, Velocity, Java ServerFaces), библиотеки для отображения реляци-

онной таблицы на объекты и обратно (Hibernate).

4.3. Подходы к построению Web-приложений

Подходы к построению веб-приложений развивались эволюционно. Са-

мым простым и вероятно самым первым подходом было писать веб-

приложения точно также, как обычные консольные приложения. Т.е.

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

файле и никак не разделены. Пример:

word = "world";

display("<h1>Title</h1>");

display("hello " + word);

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

личеством вызовов процедуры вывода текста странички. Поэтому вывод

шаблонных данных и непосредственно программу решено было условно

разделить с помощью специальных синтаксических конструкций (как в

PHP или JSP). Пример:

<% word = "world"; %>

<h1>Title</h1>

hello <% display(word) %>

И как только избавились от самого заметного недостатка исходного

подхода, внимание было обращено на другой, скрывавшийся в его те-

ни, — проблема разделения логики и представления. Для этого в рамках

использования предыдущего подхода налагают еще одно ограничение: в

тексте шаблона должны присутствовать только инструкции, влияющие

на представление информации, а вся логика уходит в отдельные классы,

описывающие модель приложения.

4.3.1. Паттерн MVC

Наиболее подходящим для построения веб-приложений оказался пат-

терн объектно-ориентированного программирования под названием MVC

(Model, View, Controller). Кроме того этот паттерн является рекомендо-

ванным Sun паттерном для разработки интерактивных программ. Он

также используется при построении обычных десктопных приложений.

Суть его в том, что приложение организуется в виде трех различ-

ных модулей: один для модели приложения, включающей представление

данных и логику системы, второй для представления данных и ввода

данных от пользователя и третий для контроллера, который обрабаты-

вает запросы и передает управление различным модулям.

Достоинства такого подхода к проектированию системы заключаются

в следующем. MVC разделяет различные аспекты проектирования (хра-

нение данных, поведение системы, представление и управление), дает

возможность повторного использования кода, централизует управление

выполнением программы и упрощает внесение изменений в систему.

Существуют вариации MVC называемые Model 1 и Model 2, также

известные как Page Centric и Servlet Centric соответственно. Их раз-

личие в том, что в первом код контроллеров содержится в JSP-файлах

(см. рис. 1), а во втором он содержится в сервлетах, которые передают

управление JSP-файлам в конце своего выполнения (см. рис. 2). Досто-

инство последнего способа в том, что он позволяет выбрать показывае-

мую пользователю страницу на основе данных, содержащихся в запросе.

Кроме того он улучшает разделение различных аспектов приложения и

увеличивает уровень абстракции классов.

В Java самым известным фреймворком для реализации паттерна

MVC является Jakarta Struts. В его состав входит готовый конфигуриру-

емый сервлет контроллера и базовые классы, расширяя которые можно

писать обработчики запросов пользователя. С использованием этой биб-

лиотеки классов и будет продемонстрирован пример веб-приложения.

5. Пример построения Web-приложения: Интернет-магазин

Программа представляет собой уже ставший классическим пример —

интернет-магазин. Данный пример упрощен — в нем отсутствуют неко-

торые возможности, необходимые для настоящего интернет-магазина,

Рис.1. MVC Model (Page Centric)

MVC DesignPattern

Рис.2. MVC Model 2(Servlet Centric)

Рис. 3. Список товаров

но зато он иллюстрирует основные возможности сервлетов, библиоте-

ки стандартных тегов, библиотеки Struts и пр.:

• Использование тэгов JSTL для вывода одиночных данных и спис-

ков, передаваемых из сервлета в JSP-страницу.

• Разбиение кода на представления (JSP), обработчики запросов,

формы, модель.

• Выборка данных из БД с использованием JDBC.

• Хранение данных, связанных с пользовательской сессией.

• Работа с формами, в т.ч. проверка правильности заполнения.

5.1. Описание приложения

Магазин позволяет пользователю просмотреть список товаров (рис. 3) и

добавить определенное количество товара в свою корзину (рис. 4).

Рис. 4. Корзина

При вводе в форму неправильного значения (например пустого) пользователю выводится соответствующее сообщение об ошибке и предлагает исправить допущенную ошибку (рис. 5).

5.2. База данных

CREATE TABLE ‘items‘ (

‘id‘ int(11) NOT NULL default ’0’,

‘name‘ varchar(255) default NULL,

‘price‘ float default NULL,

‘quantity‘ int(11) default NULL,

PRIMARY KEY (‘id‘)

);

+----+-----------------------------+---------+----------+

| id | name | price | quantity |

+----+-----------------------------+---------+----------+

| 0 | Monitor Samsung 14’’ | 999.95 | 2 |

| 1 | Sound SB Audigy | 2450 | 5 |

| 2 | Processor Intel Pentium III | 1567.01 | 3 |

| 3 | CD-R TEAC | 3000 | 6 |

| 4 | HDD Seagate 80G | 2800 | 1 |

+----+-----------------------------+---------+----------+

5 rows in set (0.00 sec)

Рисунок 5.Ошибка заполнения формы

5.3. Структура

Уровень представления состоит из JSP-страниц list.jsp — список то-

варов, cart.jsp — содержимое корзины и класса OrderForm — форма

заказа товара.

Уровень логики состоит из классов ListItemsAction — считывает из

базы данных список товаров и передает его для отображения в list.jsp,

OrderItemAction — добавляет товар и количество в корзину, которая яв-

ляется списком видимым на уровне сессии, ShowCartAction — считывает товары и количество из корзины и передает для отображения в cart.jsp.

Уровень модели приложения состоит из класса Item, представляющего собой модель товара.

5.4. Конфигурация

Веб-приложения в Java конфигурируются через специальный дескрип-

тор веб-приложений web.xml. Для использования с библиотекой Struts

берется стандартный дескриптор, входящий в поставку Struts.

Конфигурация библиотеки Struts осуществляется через файл struts-

config.xml. В нем указываются: источники данных для выборки из базы

данных, классы форм и классы действий.

Листинг 1. struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<data-sources>

<data-source>

<set-property property="driverClass" value="com.mysql.jdbc.Driver"/>

<set-property property="url" value="jdbc:mysql://localhost/store"/>

<set-property property="user" value="root"/>

</data-source>

</data-sources>

<form-beans>

<form-bean

name="orderForm"

type="com.koliamorev.OrderForm"/>

</form-beans>

<action-mappings>

<action

path="/listItems"

type="com.koliamorev.ListItemsAction"

scope="session"

input="/list.jsp">

<forward name="success" path="/list.jsp"/>

</action>

<action

path="/orderItem"

type="com.koliamorev.OrderItemAction"

name="orderForm"

scope="session"

input="/list.jsp">

<forward name="success" path="/showCart.do"/>

</action>

<action

path="/showCart"

type="com.koliamorev.ShowCartAction"

input="/list.jsp">

<forward name="success" path="/cart.jsp"/>

</action>

</action-mappings>

<message-resources parameter="resources.application"/>

5.5. Текст серветов

Листинг 2. Item.java

package com.koliamorev;

public class Item {

int id;

String name;

float price;

int quantity;

public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public float getPrice() { return price; }

public void setPrice(float price) { this.price = price; }

public int getQuantity() { return quantity; }

public void setQuantity(int quantity) { this.quantity = quantity; }

};

Листинг 3. ListItemsAction.java

package com.koliamorev;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import java.util.List;

import java.util.ArrayList;

import java.sql.*;

import javax.sql.DataSource;

import com.koliamorev.Item;

public class ListItemsAction extends Action {

private List items;

private Connection connection;

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

try {

DataSource dataSource = getDataSource(request);

connection = dataSource.getConnection();

populate();

} catch (Exception e) {

}

request.getSession().setAttribute("goods", items);

return mapping.findForward("success");

}

void populate() throws SQLException {

Statement s = connection.createStatement();

String sql = "SELECT id, name, price, quantity FROM items";

ResultSet rs = s.executeQuery(sql);

items = new ArrayList();

while (rs.next()) {

Item item = new Item();

item.setId(rs.getInt(1));

item.setName(rs.getString(2));

item.setPrice(rs.getFloat(3));

18item.setQuantity(rs.getInt(4));

items.add(item);

}

rs.close();

s.close();

}

}

Листинг 4. OrderForm.java

package com.koliamorev;

import org.apache.struts.action.*;

import javax.servlet.http.*;

public class OrderForm extends ActionForm {

private String id;

private String quantity;

public String getId() {

return id;

}

public void setId(String string) {

id = string;

}

public String getQuantity() {

return quantity;

}

public void setQuantity(String string) {

quantity = string;

}

public void reset(ActionMapping mapping, HttpServletRequest request) {

id = null;

quantity = null;

}

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {

ActionErrors errors = new ActionErrors();

if (quantity==null || quantity.trim().equals("")) {

errors.add("quantity",

new ActionError("orderItem.quantity.problem"));

}

return errors;

}

Листинг 5. OrderItemAction.java

package com.koliamorev;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import java.util.List;

import java.util.ArrayList;

public class OrderItemAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

OrderForm orderForm = (OrderForm) form;

HttpSession session = request.getSession();

List cart = (List)session.getAttribute("cart");

if (cart == null) {

cart = new ArrayList();

}

Item item = new Item();

item.setId(Integer.decode(orderForm.getId()).intValue());

item.setQuantity(Integer.decode(orderForm.getQuantity()).intValue());

cart.add(item);

session.setAttribute("cart", cart);

return mapping.findForward("success");

}

}

Листинг 6. ShowCartAction.java

package com.koliamorev;

import javax.servlet.http.*;

import org.apache.struts.action.*;

import java.util.List;

import java.util.ArrayList;

public class ShowCartAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

HttpSession session = request.getSession();

List cart = (List)session.getAttribute("cart");

if (cart == null) {

cart = new ArrayList();

session.setAttribute("cart", cart);

}

request.setAttribute("cart", cart);

return mapping.findForward("success");

}

}

5.6. Текст JSP-страниц

Листинг 7. list.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<%@ taglib prefix="html" uri="/tags/struts-html" %>

<%@ taglib prefix="bean" uri="/tags/struts-bean" %>

<html>

<head>

<title>Добро пожаловать в магазин.</title>

</head>

<body>

<h1>Список товаров</h1>

<html:errors />

<table>

<thead>

<tr><c:forEach var="column"

items="Наименование товара,Цена,В наличии на складе,Заказать">

<th><c:out value="${column}"/></th>

</c:forEach>

</tr>

</thead>

<tbody>

<c:forEach var="item" items="${goods}">

<tr><td><c:out value="${item.name}"/></td>

<td><c:out value="${item.price}"/></td>

<td><c:out value="${item.quantity}"/></td>

<td><html:form action="orderItem">

<input type="hidden" name="id" value="<c:out value=’${item.id}’/>"/>

<html:text property="quantity"/>

<html:submit />

</html:form></td>

</tr>

</c:forEach>

</tbody>

</table>

<p><html:link page="/showCart.do">Перейти к корзине</html:link>

</p>

</body>

</html>

Листинг 8. cart.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<%@ taglib prefix="html" uri="/tags/struts-html" %>

<%@ taglib prefix="bean" uri="/tags/struts-bean" %>

<html>

<head>

<title>Корзина</title>

</head>

<body>

<h1>Корзина</h1>

<table>

<thead>

<tr><c:forEach var="column"

items="Номер,Заказано">

<th><c:out value="${column}"/></th>

</c:forEach>

</tr>

</thead>

<tbody>

<c:forEach var="item" items="${cart}">

<tr><td><c:out value="${item.id}"/></td>

<td><c:out value="${item.quantity}"/></td>

</tr>

</c:forEach>

</tbody>

</table>

<p><html:link page="/listItems.do">Перейти к списку товаров</html:link>

</p>

</body>

</html>

6. Заключение

В данной работе было проведено исследование средств разработки веб-

приложений и истории их развития, а также приведен пример веб-

приложения на Java, написанного с применением фреймворка Struts,

реализующего паттерн MVC. Хотя рассмотренное приложение не вы-

глядит полностью законченным, оно реализует все основные концепции,

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

7.Библиография

Список литературы

[1] World Wide Web — Wikipedia, the free encyclopedia.

(http://en.wikipedia.org/wiki/Www, 31.10.2004)

[2] Web application — Wikipedia, the free encyclopedia.

(http://en.wikipedia.org/wiki/Web_application, 31.10.2004)

[3] Greg Murray, Mark Johnson. Designing Enterprise Applications

with the J2EE(TM) Platform, Second Edition. The Web Tier.

(http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-

tier/web-tier.html, 2.11.2004)

[4] Neal Ford. Art of Java Web Development: Struts, Tapestry, Commons,

Velocity, JUnit, Axis, Cocoon, InternetBeans, WebWork. Manning,

2004.

[5] Budi Kurniawan. Java for the Web with Servlets, JSP, and EJB: A

Developer’s Guide to J2EE Solutions. New Riders Publishing, 2002.

8.Приложение

Веб-приложения станут Android-подобными

Веб-приложения и JavaScript 2

Создание Web-приложений на платформе "1С:Предприятие 8.0"

ИНСТРУМЕНТАРИЙ

Платформа "1С: Предприятие 8.0" (1СП8) пополнилась еще одним важным технологическим компонентом: в феврале фирма "1С" объявила о выпуске продукта "1С: Предприятие 8.0. Web-расширение 1.0" (1СП8-Web), предназначенного для организации взаимодействия Интернет-пользователей с прикладными решениями на базе 1СП8.

Говоря об 1СП8-Web как о составной части технологической платформы, следует сразу сделать одно замечание. В несколько упрощенном виде платформа 1СП8 состоит из двух основных блоков: среды исполнения ("1С: Предприятие") и инструмента для разработки прикладных решений ("Конфигуратор"). Соответственно, все технологические и функциональные элементы 1СП8 (например, механизмы управления бизнес-процессами, обмена данными, формирования отчетов) реализованы в виде внутренних программных компонентов, входящих в состав первого или второго блока.

Более того, оба эти блока не являются самостоятельными продуктами - они распространяются только в составе тех или иных прикладных, т. е. предназначенных для конечных пользователей, решений. Отличительная же черта 1СП8-Web заключается как раз в том, что он представляет собой автономный продукт, ориентированный на разработчиков прикладных Интернет-решений (рис. 1)*1.

Рис. 1. Положение "1C:Web-расширения" в системе "1С: Предприятие 8.0"

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

Существует и еще один важный момент: выпуск 1СП8-Web, судя по всему, отражает начало этапа активного освоения Интернет-технологий пользователями программ "1С" делового назначения.

Здесь нужно отметить тот известный факт, что "1С" отличается весьма прагматичным подходом к использованию технологических новинок в своем ПО: определяющим моментом является реальная готовность заказчиков к их применению, а не соображения моды. В частности, в то время как конкурирующие ERP-решения (в первую очередь зарубежные) все активнее предлагали заказчикам сначала пользовательский Web-интерфейс, а потом и наборы Web-сервисов, разработчики из "1С" придерживались более консервативной стратегии (как наиболее соответствующей потребностям российского рынка) с ориентацией на "толстого" клиента и эволюционное смещение от файл-серверной архитектуры к клиент-серверной.

Возможность клиентского Web-доступа к приложениям "1С: Предприятие" появилась только весной 2000 г., когда был выпущен компонент "Web-расширение" для платформы версии 7.7. Однако уже тогда можно было сказать, что данное решение скорее напоминало пробный шар для оценки готовности партнеров и заказчиков к использованию Интернет-технологий, нежели продукт, нацеленный на коммерческий успех (см. PC Week/RE, N 46/2000, с. 45).

В нем была использована технология ASP, позволяющая написать код активных страниц на внутреннем языке 1С:V7Script. Однако вся разработка ASP-страниц должна была выполняться исключительно "руками", без применения каких бы то ни было специальных средств. Очевидно, что такие дедовские методы были непригодны для создания сложных Web-приложений и могли применяться лишь в ограниченных масштабах. Тем не менее с помощью этого варианта Web-расширения целый ряд компаний-разработчиков не только получал собственные продукты, но и реализовывал некоторые проекты и тиражные решения.

Вполне очевидно, что с точки зрения архитектуры платформа 1СП8 в целом по-прежнему ориентируется на традиционную модель "толстого" (или, как сейчас говорят, "функционально-насыщенного") клиента. Ключевые прикладные решения, выпускаемые "1С", не предусматривают применения Web-клиентов в стандартном исполнении*1. И в этом плане очень характерно, что сегодня поддержка Интернет-технологий реализована в виде средств разработчика: освоение новых для 1СП8 сфер применения, как обычно, будет пока вестись силами наиболее "продвинутых" партнеров. При этом нынешний вариант Web-расширения - это качественно более мощный (по сравнению с 7.7) инструмент, который позволяет решать довольно широкий круг задач, связанных с использованием Интернет-технологий, - начиная от обеспечения клиентского Web-доступа и заканчивая интеграцией с внешними приложениями.

_____

*1 В начале года "1С" с помощью 1СП8-Web выпустила первое Web-приложение - "Удаленный склад", которое работает совместно с конфигурацией "Управление торговлей".

Архитектура и состав Web-расширения

Предварительная информация о новой версии 1СП8-Web была представлена фирмой "1С" еще на прошлогоднем летнем партнерском семинаре. Учитывая ориентацию экономических программ "1С" на операционную платформу Microsoft, применение технологии ASP. NET для построения Web-приложений не было неожиданным. Интересно было другое: каким образом обеспечивается ее интеграция с 1СП8?

Напомним, что старая ASP-технология, использованная в версии Web-расширения 7.7, позволяла с помощью механизма Active Scripting подключать различные движки исполнения кода на скриптовых языках. В результате разработчики на подмножестве знакомого им языка 1СV7 могли создавать ASP-код, который фактически выполнялся непосредственно в среде "1С:Предприятия", напрямую взаимодействуя со всеми объектами и функциями прикладного решения и платформы.

ASP.NET устроен принципиально иначе: писать код разрешается на разных языках, но скомпилированная программа может исполняться только в операционной среде .NET Framework. Очевидно, что в этих условиях создание специализированного языка типа1CV8.NET просто не имело смысла, так как он все равно не мог бы обращаться к функционалу 1СП8 напрямую.

Соответственно, в основе концепции 1СП8-Web лежит стандартная технология создания ASP.NET-приложений, дополненная программными компонентами 1СП8, которые обеспечивают, с одной стороны, привычный для пользователя 1СП8 клиентский интерфейс, а с другой - взаимодействие с базой данных и с функционалом прикладного

решения (рис. 2).

Рис. 2. Общая схема взаимодействия компонентов "1С:Web-расширения"

Пользовательский интерфейс и бизнес-логика создаются в рамках технологии ASP.NET (приложение типа Web Forms). Для программирования разрешается применять любой .NET-язык, но наиболее востребованными скорее всего будут Visual Basic .NET и C#. Желающие сэкономить деньги на покупке инструментария и "покодировать руками" могут воспользоваться бесплатным набором SDK .NET Framework. Хотя, конечно, гораздо лучше обратиться к более эффективным средствам - MS Visual Studio .NET или инструментам Borland (Delphi, C#Builder).

Сами авторы 1СП8-Web рекомендуют для программирования использовать C# (демонстрационный пример, шаблоны и конструкторы ориентированы на этот язык). Для создания Web-приложений на базе 1СП8-Web вполне достаточно редакции Visual C# Standard Edition стоимостью немногим выше 100 долл. В то же время отметим, что для более широкого применения нового продукта было бы полезно сделать и вариант для Visual Basic .NET, который в нашей стране представлен русскоязычной версией (см. PC Week/RE, N 19/2004, с.1).

В комплект поставки продукта "1С:Предприятие 8.0. Web-расширение 1.0" входят:

2 компоненты для доступа к данным;

- компоненты для создания отчетов;

- элементы управления для создания пользовательского Web-интерфейса;

- конструкторы для создания приложений и отдельных форм;

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

Рекомендованная розничная цена - 750 долл.

Дополнительная информация о продукте - на сайте www.v8.1c.ru/overview/ WEB.htm.

Одна из целей 1СП8-Web - повысить эффективность разработки Web-приложений в среде VS.NET с учетом специфики прикладных решений семейства 1СП8. Большинство компонентов 1СП8-Web, реализованных в виде элементов управления, предназначено именно для решения этой задачи: они позволяют строить пользовательский интерфейс и обрабатывать данные в традиционном стиле "1С: Предприятия" (рис. 3). При этом разработчик может самостоятельно создавать Web-формы или использовать те, которые автоматически генерируются системой на основе структуры прикладного решения 1СП8. Во втором случае обеспечивается простая адаптация Web-решения при внесении изменений в хост-приложение.

Рис. 3. Web-приложение имеет интерфейс в стиле "1С: Предприятия"

С учетом того, что применение Web-расширения чаще всего связано с задачами презентации и анализа данных, в состав 1СП8-Web включен также набор компонентов для создания аналитических отчетов, опирающийся на мощные механизмы 1СП8. В частности, пользователь Web-приложения с помощью инструмента "построитель отчета" может визуально настроить исходный текст запроса и получить оформленный результат его обработки - при этом поддерживается механизм расшифровок для детализации полученных данных.

Но все перечисленные выше средства могут лишь повысить эффективность разработки Web-приложения. Главная же технологическая задача 1СП8-Web - реализовать механизм взаимодействия собственно с информационной базой прикладного решения (см. рис. 2) - метаданными, COM-соединениями и объектами доступа к данным.

Метаданные содержат сведения о структуре прикладного решения и его информационной базы. Они автоматически генерируются при создании Web-приложения и хранятся в подключаемых к проекту файлах (DLL и XML). Кроме того, если конфигурация информационной базы была изменена, утилита генерации метаданных может быть запущена и отдельно.

Для доступа к функционалу прикладного решения (в том числе к информационным базам) используются COM-соединения - универсальный низкоуровневый программный интерфейс для интеграции 1СП8 с внешними приложениями. Это наиболее эффективный инструмент организации взаимодействия программ. В частности, возможность сохранения пула открытых COM-соединений для их повторного использования позволяет экономить ресурсы Web-сервера и уменьшает время отклика системы.

Однако с точки зрения оптимизации процесса разработки к данным 1СП8 лучше всего обращаться через высокоуровневый слой специализированных объектов ADO.NET. Их применение позволяет реализовать эффективное взаимодействие с компонентами бизнес-логики и визуального интерфейса. Кроме того, с помощью таких объектов можно не только получать данные, но и модифицировать их. Получение данных возможно в двух режимах: в режиме таблицы, реализующем технику объектного доступа к информации, и в режиме запроса, который позволяет полностью использовать функции языка запросов 1СП8. Модификация данных (добавление, изменение и удаление) выполняется только в режиме таблицы.

Подводя итог, можно сказать, что в составе 1СП8-Web разработчик получает в свое распоряжение дополнительный набор программных объектов (см. рис. 4):

- провайдер доступа к базам данных 1СП8 через механизм ADO.NET;

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

- элементы управления, применяемые для формирования пользовательского интерфейса и обеспечения работы пользователя с данными;

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

- шаблоны и конструкторы для создания форм объектов и приложений средствами Visual Studio .NET.

Рис. 4. Подключение дополнительных компонентов "1С: Web-расширения" к среде Visual Studio .NET

Кроме построения пользовательского интерфейса 1СП8-Web поддерживает создание Web-сервисов, предназначенных для доступа к функциональности прикладных решений 1СП8. При этом Web-сервисы можно создавать как "вручную", так и с применением специальных шаблонов, которые тоже включены в комплект поставки.

Расширение не только для Web

Все годы своего существования (с начала 90-х) платформа "1С: Предприятие" динамично развивалась, предоставляя разработчикам все больше возможностей для расширения функционала готовых и создания собственных прикладных решений. Можно с уверенность сказать, что абсолютному большинству партнеров и заказчиков "1С" для решения своих задач было вполне достаточно внутренних инструментов платформы.

Не удивительно, что пять лет назад ключевой идеей "1С:Web-расширения" версии 7.7 было как раз максимальное использование традиционных средств "1С". Однако такой подход позволил решить только задачу клиентского Web-доступа к основному функционалу прикладных решений, а отсутствие в Web-расширении современных RAD-инструментов сдерживало применение этой технологии на массовом уровне или для создания более сложных Web-приложений.

В новой версии ставка сделана на использование стандартных индустриальных инструментов, что представляется принципиально верным решением. (Кажется, это первый случай в практике "1С", когда она пошла по пути адаптации под собственную платформу средств разработки третьих фирм.) Такой подход позволяет "1С"-разработчикам выйти за рамки своих традиционных средств и расширяет их функциональные и технологические возможности за счет использования всей мощи платформы .NET.

В нынешнем варианте 1СП8-Web значительная часть инструментария предназначена для программирования Web-интерфейса, но наиболее важным все же видится набор компонентов для работы с данными, который фактически представляет собой интерфейс между платформами 1СП8 и .NET. С его помощью разработчики помимо возможности реализации собственно Web-приложений могут уже сегодня создавать весь спектр программ, реализуемых в среде .NET, включая Web-решения для мобильных клиентских устройств, обычные Windows-приложения, Web-сервисы, .NET-компоненты и пр. Не говоря уже о том, что VS.NET обладает широким спектром средств (в том числе третьих фирм) взаимодействия с различными источниками данных и приложениями. Обратим внимание и на другую особенность данного продукта: он открывает доступ к функционалу прикладных решений 1СП8 и для "не-1С"-программистов.

Таким образом, 1СП8-Web может стать важным технологическим элементом интеграции платформы "1С: Предприятие" с широким спектром внешних ИТ-ресурсов. Представляется вполне вероятным, что развитие будет идти именно в этом направлении и в следующих версиях продукта поддержка работы "1С"-программистов в среде .NET будет усилена.

https://www.itweek.ru/idea/article/detail.php?ID=70030