Цель этой книги — познакомить разработчиков с технологиями использования XML в программах на Java для электронной коммерции. Для того чтобы построить эффективный коммерческий сайт, мало пройти долгий путь обучения программированию на Java — недостающим звеном останется XML, и эта книга содержит подробное описание методики объединения этих тесно связанных технологий. В ней рассматриваются последние версии интерфейсов API сервлетов и JSP и текущий стандарт XML, и подробно описываются все этапы, необходимые для построения хорошо организованного, динамичного и успешного сайта. Авторы предполагают, что читатель на базовом уровне знаком с HTML, Java и web-серверами, и у него имеется доступ к компьютеру, на котором можно установить небольшой web-сервер, стандартный компилятор Java и другие служебные программы. Исходный код всех программ, в большом количестве иллюстрирующих материал книги, можно найти на прилагаемом компакт-диске.
СОДЕРЖАНИЕ
Благодарности
Введение
XML и Java
Сервлеты Java и JSP-страницы
Кому стоит купить эту книгу
Что вам потребуется
Что содержится в этой книге
Что содержится на компакт-диске
Соглашения, используемые в этой книге
Об авторах
От издательства
Глава 1. Описание данных с помощью XML
Введение в XML
XML и электронная коммерция
Области применения XML
XML на стороне клиента
XML на стороне сервера
Использование XML для хранения данных
Правила XML
Определение правильно оформленного документа XML
DTD и допустимость документа XML
Объявления элементов
Спецификация содержимого
Объявления атрибутов
Объявления сущностей
Непроверенные символьные данные
Разделы символьных данных
Комментарии в XML
Инструкции по обработке
Схема XML
Создание таблиц стилей с использованием XSL
Использование XML в приложениях
Модели программирования
Программирование на основе DOM
Программирование на основе SAX
Краткий справочник по правилам XML
Требования к правильно оформленному документу XML
Элементы
Применение
Объявление
Атрибуты
Сущности
Применение
Объявления
Глава 2. Каталог товаров на XML
Назначение web-сайта
Требования
Ограничения
Покупка готового пакета - это быстрее и дешевле
Сборка приложения из стандартных частей - это лучше и дешевле
Разработка сервера web-приложений - это быстрее и лучше
Достоинства XML
Доступность инструментальных средств
SOAP
Гибкость инструментальных средств
Совместимость инструментальных средств
Поддержка Unicode
Каталог товаров и DTD
Организация данных
Написание DTD
Доработка DTD
Создание первого чернового варианта DTD
Уточнение чернового варианта
Элементы catalog, product_line и product
Элементы description, paragraph и general
Элементы price, quantity_in_stock и image
Элементы onsale_date, time, clip и title
Элемент shipping
Финальная версия
Принципы разработки DTD
Репрезентативный образец данных
Избегайте субтрактивного уточнения
Упрощайте DTD
Элементы или атрибуты?
Рассуждайте в терминах реальных процессов
Шаблоны XML
Краткое описание
Задача
Контекст
Причины
Решение
Пример
Обсуждение
Близкие по назначению шаблоны
Известные примеры применения
Стандартизация DTD
Глава 3. Представление XML-каталога в сети
Технологии представления
Взаимодействие по протоколу HTTP
Запрос браузера
Ответ web-сервера
API для сервлетов Java
Классы и интерфейсы для сервлетов Java
Обработка запросов сервлетами
Простой пример сервлета
Инициализация сервлета
Генерирование ответа сервлетом
Роль JavaBeans
API для JSP-страниц
Язык тегов JSP
Пользовательские библиотеки тегов
Обработка запросов JSP
Встроенные переменные в JSP-страницах
Организация каталога
API для объектной модели документа
Создание объектной модели документа для каталога товаров
Интерфейс Node
Интерфейс NodeList
Интерфейс Document
Индексация товаров
Информация для представления каталога в сети
Организация поиска по ключевым словам
Форматирование описаний товаров
Гибкость стилей
Гибкость содержимого
Глава 4. Заполнение корзины покупателя
Проблема корзины покупателя
Использование объектов класса HttpSession
API для класса HttpSession
Интерфейс HttpSessionBindingListener
Корзина покупателя на языке Java
Классы CartItem и ShoppingCart
Класс CatalogServ
Инициализация сервлета
Методы doGet и doPost
Метод doPageEnd
Метод doPageMid
Отображение полной информации о товаре
Использование класса cartListener
Класс CatalogBean
Использование объектов CartItem и ShoppingCart
Класс ProductFormatter
Методы, вызываемые методом doFullItem
Метод doListOutput
Метод addText
Глава 5. Оплата и подтверждение заказа
Процесс оплаты
Безопасность
Доверие клиента
Сбор информации о заказе
Класс CustomerInfo
Класс CreditInfo
Класс Fullfilment
Класс Authorization
Класс Order
Класс TestPaymentAuthorizer
Класс ShippingCalculator
Класс Emailer
Страница CustomerInfo
JSP-страница ShippingInfo
JSP-страница CreditInfo
JSP-страница ConfirmInfo
Сервлет SubmitOrder
JSP-страница Approved
JSP-страница Declined
Обновление информации о доставке
JSP-страница OrderDateSelector
JSP-страница SelectOrder
JSP-страница ShowOrder
JSP-страница UpdateFullfilment
Глава 6. Обслуживание виртуального каталога
Общие принципы редактирования каталога
Объекты данных
Класс Catalog
Класс XMLWriter
Класс ProductLine
Класс Product
Класс Image
Класс Clip
Класс DateTime
Класс Util
Код для представления информации пользователю
Главная HTML-страница
Класс Main сервлета
JSP-страница Delete
JSP-страница Edit
Сервлет UpdateProduct
Глава 7. Поиск своего покупателя с помощью опросов
Обеспечение конфиденциальности
Промышленные стандарты
Общественные организации
Создание системы опросов с помощью XML-сценария
Определение последовательности вопросов
Пример анкеты
Сервлет управления опросом
Код сервлета управления опросом
Класс Interpreter
Отображение вопросов
Отображение введения
Управление ветвлением опроса
Обработка элемента Terminal
Вспомогательные методы класса Interpreter
Класс Recorder
Варианты анализа анкеты
Класс для создания файлов снимков
Класс для создания таблиц
Пример сервлета для просмотра результатов отчета
Служебная библиотека документа XML
Глава 8. Новости на сайте
Разработка системы показа новостей
Гибкость отображения
Элементы текстов сообщений
Расположение сообщений в зависимости от их новизны
Информация для управления сообщениями
Корневой элемент документа
Простота ввода данных
Минимальная нагрузка на сервер
Система показа новостей
Внешний вид web-страницы
Класс NewsFormatter
Использование класса NewsFormatter
Код для сервлета TheNewsServ
Пример JSP-страницы
Добавление свежих новостей
Сервлет CompanyNewsServ
Класс NewsUpKeep
Глава 9. Привлечение постоянных посетителей
Источники новостей и стандарты
Формат RSS
NewsML и планы стандартизации
Формат сообщений Moreover.com
Получение файла XML
Класс NewsModel
Создание DOM
Выбор заголовков
Главный управляющий класс
Классы для отображения заголовков
Сервлет NetNewsServ
Класс NetNewsBean
Возможные усовершенствования
Глава 10. Web-приложения на Java
Спецификации в интерфейсе API сервлетов Java
Развертывание web-приложения
Определение web-приложения
Структура папок
Содержимое папки WEB-INF
Дескриптор развертывания web-приложения
Параметры конфигурации
Архивные файлы web-приложения
Следующее поколение
Следующее поколение XML
Протокол SOAP
Проблемы масштабирования
Сохранность информации о сеансе
J2EE и Enterprise JavaBean
Альтернативное решение - Spaces
Приложение А. Интерфейсы API для сервлетов и JSP-страниц
Параметры приложений
Создание сервлета
Методы класса HttpServlet
Интерфейс ServletContext
Получение информации о запросе
Методы, добавляемые интерфейсом HttpServletRequest
Методы, связанные с безопасностью
Методы, связанные с сеансами и cookie
Другие методы интерфейса ServletRequest
Класс HttpSession и классы, связанные с cookie
Методы класса HttpSession
Методы интерфейса HttpSessionListener
Методы класса Cookie
Специальные объекты, связанные с запросом
Формирование ответа пользователю
Методы интерфейса ServletResponse
Методы, добавляемые интерфейсом HttpServletResponse
Выходные данные JSP-страниц
Ошибки и исключения
Ошибки и исключения JSP-страниц
Коды состояний и ошибок HTTP
Интерфейс API для JSP-страниц
Класс PageContext
Доступ к стандартным переменным
Класс JspWriter
Пакет javax.servlrt.jsp.tagext
Класс BodyContent
Приложение Б. Словарь терминов
Алфавитный указатель
ОТРЫВОК
Глава 8Новости на сайте
Разработка системы показа новостей
Гибкость отображения
Элементы текстов сообщений
Расположение сообщений в зависимости от их новизны
Информация для управления сообщениями
Корневой элемент документа
Простота ввода данных
Минимальная нагрузка на сервер
Система показа новостей
Внешний вид web-страницы
Класс NewsFormatter
Использование класса NewsFormatter
Код для сервлета TheNewsServ
Пример JSP-страницы
Добавление свежих новостей
Сервлет CompanyNewsServ
Класс NewsUpKeep
Публикация новостей фирмы для привлечения посетителей
Критерии дизайна системы показа новостей на XML
Гибкое представление новостей с помощью сервлета
Представление новостей с помощью JSP-страниц
Простая система для добавления новостей
Вы, наверное, встречали web-сайты небольших организаций, в которых самые свежие новости относятся к событиям полугодовой давности. Эти организации теряют прекрасный шанс привлечь внимание случайных посетителей. Может быть, так происходит потому, что люди, находящиеся в курсе происходящих в фирме событий, не общаются с web-мастером своей организации или просто страницы с новостями слишком неудобно редактировать. Мы, естественно, собираемся предложить вам решение, основанное на технологии XML, которое мы подробно обсуждаем в этой главе.
Разработка системы показа новостей
Мы хотим предложить посетителям нашего web-сайта последние новости фирмы в компактном и удобном для чтения формате. Помните, что обычно в вашем распоряжении имеется всего лишь несколько секунд, чтобы привлечь внимание к вашему сайту случайного посетителя, который просто "прогуливается" по сети. Мы хотим, чтобы посетителю было понятно, как найти на сайте подробную информацию, если его что-то заинтересовало, как войти в систему каталога и, будем надеяться, что-нибудь приобрести.
Если вы подумаете, какими характеристиками должна обладать система показа новостей, в ваш список, вероятно, войдут следующие пункты:
гибкий способ отображения;
удобный ввод данных;
минимальная нагрузка на сервер.
Наряду с обеспечением этих свойств при разработке системы вы, в первую очередь, должны будете решить, какие элементы и атрибуты XML использовать для представления данных, затем сделать выбор между моделями DOM и SAX (механизмами отображения данных для пользователя) и, наконец, определить механизм добавления новых сообщений.
Гибкость отображения
Поскольку мы решили остановиться на XML как на исходной среде хранения данных, мы можем обеспечить гибкость отображения посредством хранения данных, необходимых для всех доступных способов представления информации. Мы имеем в виду следующее: вероятно, вы замечали, что на разных коммерческих web-сайтах новости компании представлены обычно одним из трех способов:
заголовки новостей со ссылкой на полный текст;
несколько наиболее интригующих строк со ссылкой на полный текст;
полный текст сообщения.
Существуют и другие форматы сообщений: электронный информационный бюллетень, печатная копия информационного бюллетеня, корпоративные сообщения. Для этих форматов также применимы описанные выше три способа (заголовок, краткое сообщение и полный текст). Первая наша задача при разработке системы отображения новостей - создать такой документ XML, который поддерживал бы все три формата.
Элементы текстов сообщений
Хотя в области искусственного интеллекта и понимания компьютером естественных языков сделаны большие успехи, никто не рассчитывает, что компьютер напишет хороший заголовок, проанализировав текст сообщения. Поэтому приходится согласиться с тем, что нужен человек, который для каждого способа представления новостей создаст отдельный заголовок. В сообщении обычно указывается дата, а иногда рядом еще и место, где произошло то событие, о котором идет речь, например: "Остин, Техас, 1 января 2000". Эта задача тоже должна выполняться человеком.
Некоторые сообщения очень выигрывают, когда сопровождаются графикой, звуковыми клипами или ссылками на другие сайты, поэтому продумайте, как сконструировать документ XML, чтобы его можно было дополнить различными элементами, способствующими увеличению привлекательности страницы новостей. Мы решили, что было бы слишком сложно и неудобно снабжать систему показа новостей в нашем примере всеми возможными "украшениями". Поэтому мы будем хранить тексты сообщений для второго и третьего способов (краткое и полное сообщение), используя тег XML <[[CDATA...]]>.
Поскольку анализаторы XML не пытаются анализировать текст, содержащийся внутри раздела CDATA, в этот раздел вы можете поместить любую разметку HTML, не сбивая с толку анализатор.
Элементы, содержащие дату, заголовок, краткое сообщение и полный текст, показаны в листинге 8.1.
Листинг 8.1. Дата, заголовок, короткое и полное сообщения (thenews.xml)
Austin, TX, Jun 14 2000
Best Seller at a Great Price
Dryer Lint Art
at 50% off the retail price.]]>
monumental
recreation of famous monuments in that most flexible of craft materials, dryer lint. Even though you may never attempt major constructions like the Statue of Liberty project documented in the final chapter, your projects will benefit by a study of this famous creation. Includes UML diagrams.]]>
Другим аспектом гибкости является способность выборочно представлять сообщения в соответствии с темой, интересующей посетителя. Предполагая, что спектр возможных интересов посетителей сайта XMLGifts.com очень широк, мы хотим показать каждому посетителю те новости, которые связаны с его излюбленной темой, и в том месте сайта, куда он с наибольшей вероятностью заглянет. В такой структуре неизбежны перекрывающиеся области; например, книга о музыкальной группе может оказаться интересной как для покупателей книг, так и для покупателей музыкальных компакт-ди
сков. Следовательно, каждое сообщение должно быть снабжено одной или несколькими пометками, которые указывают, к каким тематическим категориям можно его отнести; а формат представления новостей должен допускать переключения между различными темами сообщений.
Для того чтобы пометить сообщение и отнести его тем самым к определенной категории, мы можем использовать элемент или атрибут. Следуя советам, приведенным в разделе "Элементы или атрибуты?" главы 2, можно заключить, что в данном случае лучше использовать атрибуты, так как тема сообщения - это данные о содержимом элемента, и мы предполагаем, что количество тем сообщений будет ограниченным.
Расположение сообщений в зависимости от их новизны
Самые свежие новости должны располагаться первыми. Так как документ XML автоматически сохраняет порядок следования элементов, новые элементы должны добавляться к началу документа. Более того, было бы неплохо предусмотреть возможность отображения только самых свежих новостей. Следовательно, нам нужен способ представления "возраста" сообщений.
После долгих колебаний между многочисленными способами представления даты, которые позволили бы нам отображать только недавние сообщения, мы остановились на использовании простого целочисленного представления количества дней, прошедших с 1 января 1970 года. Для этого значение типа long, возвращаемое методом System.currentTimeMillis(), делится на количество миллисекунд в сутках, и полученное число становится значением атрибута timestamp тега Newsitem. Альтернативные варианты - использование классов Java DateFormat или Calendar - были отвергнуты, так как они подразумевают создание бо
льшого количества объектов, а мы хотим, чтобы показ новостей создавал минимальную нагрузку на сервер.
Информация для управления сообщениями
Поскольку вы или ваши служащие будут обновлять страницу новостей в режиме подключения к сети, было бы полезно отслеживать, кто какое сообщение написал. (Например, чтобы знать, кто должен получать нагоняй за допущенную ошибку.) Для этого используется атрибут элемента . Сервлет обновления сообщений, описанный в разделе "Добавление свежих новостей" этой главы, обладает простым механизмом контроля доступа, в котором используются имя автора и пароль; этот то самое имя автора, которое становится значением атрибута author.
Чтобы создать документ HTML, в котором заголовок содержит ссылку на полную версию текста, нужно использовать уникальный идентификатор. Мы, например, выбрали простейший вариант: при создании каждого сообщения ему присваивается серийный номер, который и становится значением его атрибута id.
Корневой элемент документа
Мы отслеживаем некоторые параметры, используемые во всем файле, с помощью атрибутов, которые задаются в корневом элементе документа, Newsfile. Очередной атрибут id - это просто nextid. Присваивание нового значения каждому следующему атрибуту nextid является обязанностью программы, добавляющей новые сообщения или, в случае редактирования в автономном режиме, автора элемента Newsitem.
Корневой элемент также является подходящим местом для хранения атрибутов, связанных с различными заданными по умолчанию параметрами отображения. В приведенном ниже примере имеется только один такой атрибут, longtemplate, который идентифицирует заданный по умолчанию файл - шаблон HTML, используемый для форматирования сообщений.
В листинге 8.2 показано, как используются все перечисленные теги.
Листинг 8.2. Элемент с одним элементом (thenews.xml)
Your Favorite Music Now Available
Austin, Feb 1, 2000
It's Dot Com Enough for Me.]]>
It's Dot Com Enough For Me.
now in stock!
All those great songs created during breaks in all-night coding sessions - now recorded by top Silicon Valley garage bands on our private label. It's Dot Com Enough for Me will have you singing along - or maybe laughing till the Jolt cola spurts out your nose. Seventeen songs from geeks at Sun, Microsoft, Apple, Cisco, and other top tech outfits. ]]>
Простота ввода данных
Поскольку мы выбрали простой формат новостей, показанный в листинге 8.2, ввод данных осуществляется тоже достаточно просто. Система, основанная на формах HTML и сервлетах, описанная в разделе "Добавление свежих новостей" этой главы, позволяет добавлять новые сообщения через Интернет.
Тем не менее легкость ввода данных никак не связана с контролем за качеством самого текста. Для достижения лучших результатов следует убедиться, что темы, согласно которым классифицируются сообщения, и стиль текста всегда согласуются между собой. Также необходимо составить список требований и рекомендаций по составлению текстов сообщений и убедиться в том, что эти списки доступны всем служащим фирмы, уполномоченным размещать сообщения на сайте.
Минимальная нагрузка на сервер
Поскольку мы надеемся, что посещаемость нашего сайта будет достаточно велика, мы хотим, чтобы отображение главной страницы выполнялось по возможности просто, то есть чтобы страница быстро загружалась, а ее генерирование не требовало больших затрат ресурсов со стороны сервера. Рассмотрим следующие альтернативные варианты отображения новостей.
Статические страницы новостей (Static News Pages). Статические страницы быстро загружаются, и главная страница благодаря XML может формироваться заново при появлении нового сообщения. Однако использование статических страниц исключает возможность их индивидуальной настройки для постоянных посетителей.
Страницы новостей, генерируемые сервлетами (Servlet-Generated News Pages). Сервлеты Java могут генерировать все, что потребуется; при этом предполагается, что они используют файлы с шаблонами HTML для регулировки многочисленных атрибутов внешнего вида сайта.
JSP-страницы (JavaServer Pages). Преимущество JSP-страниц перед сервлетами заключается в том, что для изменения внешнего вида страницы web-дизайнеру не нужно уметь программировать на Java.
При выборе методов обработки следует сделать выбор между моделями SAX и DOM, а также между анализаторами XML, проверяющими либо не проверяющими допустимость документа. Модель SAX подразумевает работу анализатора для доступа к каждой странице. При использовании модели DOM доступ к страницам осуществляется быстрее, но зато все приходится хранить в памяти. Предполагая, что количество новостей будет не больше нескольких сотен, затраты ресурсов на хранение всей модели DOM в памяти не окажутся слишком значительными, поэтому мы считаем, что в данном случае модель D
OM является безусловно оптимальным вариантом.
Мы не видим никаких причин в использовании анализатора, проверяющего допустимость документа. Так как новые сообщения будут создаваться автоматически, вероятность ошибки форматирования весьма невелика. Кроме того, вряд ли ошибки, связанные с недопустимостью документа, могут смутить пользователя.
Система показа новостей
Окончательный вариант устройства системы показа новостей изображается блок-схемой, приведенной на рис. 8.1. Обработка информации, происходящая на сервере, представлена в правой части блок-схемы, а обработка в автономном режиме - в левой части. Исходный файл XML может редактироваться как в режиме подключения к сети, так и автономно, но предпочтительным является режим подключения, так как он позволяет автоматически задавать атрибуты id и timestamp.
Электронный магазин на Java и XML. Библиотека программиста (+CD). / Б. Брогден, К. Минник - СПб: Питер, 2002. - 400 с.
|