Секреты программирования для Internet на Java
.pdfГлава 17
Взаимодействие с CGI: Java-магазин
Контракт
Свойства
Конструкция
Реализация HTTP-запросы
Размещение информации о товарах Класс FIFO
Получение изображений и описаний Обработка действий пользователя
Считывание данных о конфигурации и инициализация Объединяем все вместе
Передача выбора пользователя на Web-сервер Обработка принятых данных при помощи CGI-программы
Возможные улучшения
Что вы узнаете из этой главы
В этой главе мы создадим апплет "Java-магазин" - программу "тележки для покупок", которая позволит посетителям виртуального магазина просматривать и выбирать товары. Вот некоторые вопросы, которые мы будем обсуждать:
•Использование HTTP для получения данных для апплета.
•Связь с программами CGI, выполняющимися на Web-сервере.
•Проектирование удобного интерфейса пользователя.
•Динамическое порождение интерфейса пользователя.
•Создание компонентов многократного использования.
Полный исходный текст для классов, обсуждаемых в этой главе, помещен на диск CD-ROM, прилагаемый к книге. Этим диском могут пользоваться те из читателей, кто работает с Windows 95/NT или Macintosh; пользователи UNIX должны обращаться к Web-странице Online Companion, на которой собраны сопроводительные материалы к этой книге (адрес http://www.vmedia.com/ java.html).
Контракт
Представьте, что ваш заказчик хочет улучшить интерактивный книжный магазин. В реализации этого магазина используется притягательная графика, последние приемы HTML и система "тележки для покупок", в которую покупатели могут отбирать приобретаемые книги. Система тележки для покупок следит за тем, что пользователь выбрал при просмотре интерактивного каталога магазина. Просматривая каталог, пользователь может нажать кнопку, чтобы добавить товар к своему списку приобретаемых товаров. Существующая система тележки для покупок выполнена в виде ряда сценариев CGI, которые производят HTML-бланки из интерактивного каталога и обрабатывают выбор товаров для приобретения. Однако штат, обслуживающий этот магазин, жалуется на следующие ограничения HTML-бланков:
www.books-shop.com
Рис. 17.1.
Мы используем прямое взаимодействие между Web-сервером и апплетом на Java. Как вы знаете, Java-апплеты могут открывать соединения с портами, отличными от порта HTTP Webсервера. Однако мы хотим добраться и до пользователей, которые должны пройти через firewall, чтобы обратиться к ресурсам Web. Мы используем встроенный HTTP Web-броузера, гарантирующий, что любой обратившийся к Web-странице, из которой вызывается наш Javaмагазин, может также обращаться к информации, сгенерированной в Java-магазине (например, к изображению товара и его описанию). Кроме того, мы должны использовать стандартное HTTPсоединение для вызова существующей CGI-программы, используемой сейчас интерактивным магазином. Эту задачу можно решить с помощью двух классов Java API - URL и URLConnection. Мы делаем запросы непосредственно к Web-серверу, чтобы отыскать все данные, которые мы должны сформировать в Java-магазине.
Файлы данных, по которым мы будем формировать интерфейс пользователя, должны быть организованы так, чтобы штат магазина мог легко вносить изменения. Пусть основные пункты меню будут содержаться в файле Store.idx. Этот файл будет включать имена каталогов, сопровождаемые именем меню. В нашей программе этот файл будет выглядеть так:
Internet/
Книги по Интернет
Windows/
Книги по Windows Programming/
Книги по программированию
Каталоги будут отделами магазина. Внутри каталога будет файл имя каталога.idx, который будет содержать имена файлов изображений и описаний и уникальное имя, добавляемое в корзину для покупок, когда пользователь выбирает этот товар. Если имя заканчивается на "/", это означает вложенное меню и соответствующий подотдел магазина. Отделы по-прежнему физически представлены как каталоги; в каждом из них будет находиться свой idx-файл. Вот как выглядит типовой idx-файл для отдела "Интернет":
Webserver.gif
Webserver.txt,
Книга о Web Сервере
Java.gif
Java.txt
Программирование на Java для Интернет
Используя эту структуру каталогов, мы устанавливаем жесткую организацию, которая достаточно проста для того, чтобы ей следовать. Чтобы сделать точные изменения, вам нужно будет только определить, товар из какого отдела должен быть добавлен или удален, перейти в соответствующий каталог и изменить в нем idx-файл. Групповые изменения будут более трудоемкими, но мы идем на этот компромисс, так как малые изменения будут происходить намного более часто, чем удаление всех отделов магазина. Поиск всех idx-файлов выполнен в основном классе Store, a составление интерфейса пользователя из данных, найденных в классе Store, будет генерироваться в классе StoreWindow.
Мы выполним Java-магазин в двух основных классах. Первый называется просто Store (магазин). Этот модуль выбирает данные для формирования интерфейса пользователя. Он также
www.books-shop.com
Рис. 17.3.
Реализация
Давайте начнем нашу реализацию классов с классов-помощников. Когда мы будем обсуждать высокоуровневый класс StoreWindow, вы увидите, что эти классы легко приспособить для совместной работы.
Мы сформируем и проверим каждый класс-помощник прежде, чем начинать работу над классом StoreWindow. Дополнительное время, которое мы будем тратить на строгую проверку каждого модуля, позволит нам быстро и без неожиданностей собрать компоненты воедино. На рис. 17-4 показан Java-магазин, каким его будут видеть покупатели.
Рис. 17.4.
СОВЕТ В следующем разделе мы предполагаем, что читатель имеет некоторое представление о HTTP, POST, GET и роли CGI-программ. Если вы еще не владеете этими понятиями, проконсультируйтесь по книге "The Web Server Book" (издательство Ventana Press) или странице Online Companion, чтобы получить больше информации по этой теме.
HTTP-запросы
www.books-shop.com