Введение
В конце 1995 г. Марти Холл предложил новый курс для студентов, изучающих компьютерные науки в университете Johns Hopkins. В нем он рассмотрел основные вопросы, имеющие отношение к поддержке Web, с точки зрения Java-технологии. Предполагалось, что слушатели курса будут изучать HTML, Java, HTTP, CGI-программирование и JavaScript и участвовать в выполнении простых учебных проектов. Вряд ли Марти представлял себе, какая судьба ожидает его курс. Появление первой части курса летом 1996 г. совпало со всплеском популярности Java. Аудитория была переполнена, а число желающих, записавшихся в очередь, намного превышало количество мест в аудитории. Марти не успевал отвечать на телефонные звонки студентов, пытавшихся доказать, что именно они непременно должны быть слушателями нового курса. От предприятий приходили заявки на материалы курса. Успех был абсолютный.
В дальнейшем, когда Марти занимался поисками материала для продолжения курса, он обнаружил, что, несмотря на обилие печатных изданий по каждому из рассматриваемых вопросов, для того, чтобы полностью охватить материал курса, понадобится четыре или даже пять книг. В своей повседневной деятельности Марти постоянно приходилось обращаться к огромному количеству собранных им публикаций. Напрашивалось решение объединить основной материал, необходимый профессиональным программистам, в одной книге.
Такова была предыстория первого издания книги Программирование для Web. Как и следовало ожидать, она была очень популярна, но соответствующие технологии развивалось чрезвычайно быстро. Вместо HTML 3.2 в броузерах была реализована поддержка HTML 4.0, была создана платформа Java 2, где появились средства, позволяющие повышать эффективность программ, и новые графические библиотеки. Это давало возможность создавать профессиональные коммерческие приложения. Разработка JSP 1.0 стимулировала интерес и к сервлетам, и к JSP, как альтернативе не только традиционным CGI-программам, но также ASP и ASP и ColdFusion. Появился язык XML. Постепенно область применения Java переместилась с персональных компьютеров на серверы.
По мере развития технологии стало ясно, что необходимо новое издание книги, однако объем работы, требуемый для этого, был не по силам одному Марти. В процесс подготовки нового издания включился Лэрри Браун, обладающий огромным опытом разработки и преподавания в области Java-пограмм и Web-технологий. Его знания по вопросам Java Foundation Classes и созданию многопотоковых программ, RMI и XML пришлись очень кстати. Вместе Марти и Лэрри переработали существующий материал, написали главы, посвященные HTML 4, CSS/1, HTTP 1.1 и платформе Java, заменили главы по CGI вопросами создания сервлетов и JSP, а также включили новые разделы, в которых описали средства Swing и Java 2D. Кроме того, они уделили внимание обработке XML-документов с помощью JAXP, DOM Level 2, SAX 2.0 и XSLT. Работы было так много, что не хватало времени на сон.
Марти и Лэрри искренне надеются, что результаты их работы окажутся полезными для вас.
Реальный код для настоящих программистов
Данная книга предназначена для профессиональных разработчиков. Если вы хотите узнать, как запустить броузер и получить список популярных Web-узлов, вы обратились не по адресу. Если же вы программист и вас интересуют языки HTML и XML, Java-аплеты и сервлеты, JavaServer Pages и JavaScript, вы быстро найдете нужный вам материал. Здесь описаны подходы к решению часто встречающихся задач и опасности, подстерегающие программиста на этом пути. В книгу включены примеры, иллюстрирующие материал, в частности в ней содержатся коды более 250 Java-классов. Мы постарались очень подробно описать часто используемые средства, кратко обсудить вопросы, которые возникают реже, а получить "слишком специальные" сведения читатель может в документации по API (доступной в электронном виде).
Приступая к работе, имейте в виду, что еще никто не стал великим программистом лишь от того, что читал книги. Вам надо писать программы, и чем больше вы это будете делать, тем лучше. В каждой главе мы сначала предлагаем простой пример, а затем подробно рассматриваем необходимые вопросы на более сложных примерах. Пропускайте разделы и целые главы, содержащие материал, для которого вы не видите применения, а затем возвращайтесь к ним по мере надобности.
Поступая так, как мы советуем, вы вскоре расширите свой кругозор и начнете уверенно ориентироваться в решении проблем, возникающих перед программистами. Вы сможете находить компромисс между требованием включать в Web-страницы новые средства и необходимостью обеспечивать переносимость документов. Вы сможете работать с фреймами, листами стилей и прочими возможностями, предоставляемыми HTML 4.0. Вы научитесь создавать независимые переносимые графические приложения. Вас не будет пугать задача создания Web-интерфейса к корпоративной базе данных с помощью JDBC. Вы сможете обеспечить взаимодействие по сети с удаленными приложениями. Вам станет ясно, как выполняется распараллеливание вычислений, как можно реализовать решение подзадачи в отдельном потоке или даже на другом компьютере с использованием RMI. Вы научитесь оценивать, для решения каких задач лучше подходят сервлеты, а для каких - JSP. Вы разберетесь в особенностях протокола HTTP 1.1 так, что сможете использовать его для повышения эффективности работы ваших программ. Вы сможете реализовывать сложные программы на стороне сервера, используя для этого компоненты JavaBeans и библиотеки дескрипторов JSP. Вы научитесь использовать JavaScript-сценарии для проверки содержимого HTML-форм или для поддержки движущихся изображений. Ваш профессиональный уровень повысится и, надеемся, существенно.
Структура книги
Данная книга разделена на четыре части, посвященные HTML, программированию на языке Java, написанию программ, выполняющихся на стороне сервера и JavaScript.
Часть I. Язык HTML
Для создания Web-страниц используется HTML (HyperText Markup Language). HTML-документ включает обычный текст, предназначенный для отображения, и дескрипторы, описывающие содержимое Web-страницы. Дескрипторы интерпретируются Web-броузерами, например Netscape Navigator и Microsoft Internet Explorer, при форматировании Web-страниц. В данной части рассматриваются следующие вопросы.
- HTML 4.01. Элементы, определяемые последним из официальных HTML-стандартов. Гипертекстовые ссылки, шрифты, изображения, таблицы, карты изображений на стороне клиента и др.
- Основные расширения Netscape и Internet Explorer. Перенаправление страниц, использование цветов и шрифтов, встроенные аудио-, видео- и ActiveX-компоненты.
- Фреймы. Разбиение окна на прямоугольные области и связывание этих областей с HTML-документами. Фреймы без обрамления. Плавающие фреймы. Указание фреймов в гипертекстовых ссылках.
- Каскадные листы стилей. Листы стилей первого уровня для поддержки шрифтов, цветов, изображений, форматирования текста, организации отступов и др.
Часть II. Программирование на языке Java
Java - это язык программирования общего назначения, который может быть использован для создания независимых программ, а также программ, встроенных в Web-страницы. Во второй части книги рассматриваются следующие вопросы.
- Средства Java. Что отличает Java от других языков программирования? Мифы о Java, и как обстоят дела в реальности.
- Объектно-ориентированное программирование на языке Java. Переменные, методы, конструкторы, интерфейсы. Объявление класса и модификаторы. Пакеты, переменная окружения CLASSPATH и JAR-файлы.
- Синтаксис Java. Простые типы, операторы, строки, векторы, массивы, ввод-вывод и класс Math.
- Графика. Аплеты. Приложения. Поддержка цвета и шрифтов. Область отсечения. Загрузка и вывод изображений. Java Plug-In.
- Java 2D. Создание профессиональной высококачественной 2D-графики. Создание форм, повторение изображений, использование локальных шрифтов, создание прозрачных форм и преобразование координат.
- События, связанные с мышью и клавиатурой. Обработка событий. Типы событий. Высокоуровневые и низкоуровневые обработчики событий. Внутренние классы. Анонимные классы.
- Диспетчеры компоновки. FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout и BoxLayout. Размещение компонентов вручную. Эффективное использование диспетчеров компоновки.
- Компоненты AWT. Canvas, Panel, Applet, ScrollPane, Frame, Dialog, FileDialog и Window. Компоненты и контейнеры. Кнопки, флажки опций, переключатели опций, списки, поля редактирования. текстовые области, статический текст, полосы прокрутки и раскрывающиеся меню. Загрузка и сохранение окон с использованием сериализации объектов.
- Основные компоненты Swing. Создание аплетов и приложений с использованием Swing. Изменение стиля интерфейса. Добавление обрамления к компонентам. Использование HTML при формировании статического текста и надписей на кнопках. Окна с сообщениями. Создание дочерних окон в приложении. Реализация Web-броузера средствами Swing.
- Расширенные средства Swing. JList, JTree и JTable. Использование произвольных моделей данных и средств визуализации. Вывод компонентов Swing на печать. Обновление компонентов Swing в многопотоковых программах.
- Создание многопотоковых программ. Создание потоков в отдельных или существующих объектах. Синхронизация доступа к разделяемым ресурсам. Группировка потоков. Вывод графики в многопотоковых программах и двойная буферизация. Анимационные изображения. Управление таймерами.
- Сетевое программирование. Использование гнезд клиентами и серверами. Класс URL. Универсальный сервер. Создание простого HTTP-сервера. Вызов удаленных объектов средствами RMI.
Часть III. Программы, выполняющиеся на стороне сервера
Программы, выполняющиеся на Web-сервере, могут генерировать динамические документы на основе данных, передаваемых клиентами. Сервлеты можно рассматривать как Java-альтернативу CGI-программам, а JSP - как альтернативу Active Server Pages и ColdFusion. В данной части рассматриваются следующие вопросы.
- HTML-формы. Передача данных, введенных посредством HTML-форм. Элементы, предназначенные для ввода текста. Кнопки. Флажки и кнопки выбора опций. Карты изображений на стороне сервера. Скрытые поля. Порядок передачи фокуса.
- Java-сервлеты. Преимущества сервлетов перед другими технологиями. Жизненный цикл сервлета. Инициализированные параметры сервлетов. Получение данных формы. Использование полей заголовка запроса и ответа, а также кодов состояния HTTP 1.1. Обработка записей cookie сервлетами. Поддержка сеанса взаимодействия.
- JavaServer Pages (JSP). Преимущества JSP. Выражения. скриптлеты и декларации. Использование компонентов JavaBeans в JSP. Создание библиотек дескрипторов JSP. Сервлеты и JSP.
- Использование аплетов в качестве интерфейса при взаимодействии с сервлетами. Передача данных GET и POST. HTTP-туннелирование. Использование сериализации объектов для передачи сложных структур данных между аплетом и сервлетом. Отказ от использования HTTP-сервера.
- Java Database Connectivity (JDBC). Семь основных этапов соединения с базой данных. Вспомогательные средства, облегчающие работу с JDBC. Представление результатов обращения к базе данных в текстовом виде и HTML-формате. Средство просмотра запросов. Предварительно скомпилированные запросы.
- Обработка XML-документов средствами Java. Представление XML-документа с помощью Document Object Model (DOM) Level 2. Обработка событий, связанных с разбором XML-документа, посредством Simple API for XML Parsing (SAX) 2.0. Преобразование XML с помощью XSLT. Зависимость Java API for XML Processing (JAXP) от производителя.
Часть IV. JavaScript
JavaScript - это язык, предназначенный для написания сценариев, встраиваемых в Web-страницы. Сценарий интерпретируется при загрузке страницы. В последней части данной книги рассматриваются следующие вопросы.
- Синтаксис JavaScript. Поля, методы, функции, строки, объекты, массивы и регулярные выражения.
- Настраиваемые Web-страницы. Адаптация под различные броузеры, реализации JavaScript и размеры экрана.
- Создание динамических Web-страниц. Анимационные изображения. Действия со слоями. Обработка пользовательских событий.
- Проверка HTML-форм. Проверка изменяющихся компонентов формы. Тестирование данных, передаваемых на сервер.
- Поддержка cookie. Чтение и установка значений. Объект Cookie.
- Управление фреймами. Передача результатов заданному фрейму. Запрет использования фреймов при отображении документов. Обновление нескольких фреймов. Передача фокуса фрейму.
- Интеграция Java и JavaScript. Классы LiveConnect и JSObject.
- Справочные материалы по JavaScript. Основные классы, определенные в JavaScript 1.2. Поля, методы и обработчики событий. Document, Window, Form, Element, String, Math, RegExp и прочие объекты.
Web-узел
Материалы, имеющие отношение к данной книге, хранятся на Web-узле http://www.corewebprogramming.com/
По этому адресу вы найдете следующую информацию.
- Документированные исходные коды всех примеров, приведенных в книге. Эти коды можно копировать и использовать без ограничений.
- Интерактивные версии всех HTML-страниц, Java-аплетов и сценариев JavaScript.
- Ссылки на все URL, упомянутые в книге.
- Информация об условиях приобретения данной книги.
- Сообщения о курсах по Java.
- Дополнительная информация по данной книге.
- Инструментальные средства Ronco.
Об авторах
Марти Холл работает старшим научным сотрудником лаборатории прикладной физики исследовательского центра при университете Johns Hopkins и ведет курсы по распределенным вычислениям и Web-технологии. Иногда он также проводит курсы на предприятиях по использованию сервлетов, JavaServer Pages, а также по другим темам, связанным с Web-технологиями. Он автор книг Core Servlets and JavaServer Pages, а также первого издания книги Программирование для Web. С Марти можно связаться по адресу
Research and Technology Development Center
The Johns Hopkins University Applied Physics Laboratory
11100 Johns Hopkins Road
Laurel, MD 20723
[email protected]
Лэрри Браун работает старшим инженером в военно-морском исследовательском центре и занимается разработкой Web-технологий для предприятий. Он также является сотрудником факультета компьютерных наук университета Johns Hopkins, где читает лекции по созданию программ, работающих на стороне сервера, распределенному Web-программированию и разработке интерфейсов на базе Java. С Лэрри можно связаться по следующему адресу:
Naval Surface Warfare Center, Carderock Division
9500 MacArthur Boulevard
West Bethesda, MD 20817
[email protected]
Благодарности
В подготовке книги к печати принимали участие очень многие. Без их помощи мы вряд ли смогли бы выпустить даже первую часть. Дон Олдридж, (Don Aldridge), Крис Беннет (Chris Bennett), Камил Белл (Camille Bell), Пит Кларк (Pete Clark), Мария Димеленте (Maria Dimalanta), Нгуен-Хоа Дай (Nguyen-Khoa Duy), Дениз Еванс (Denise Evans), Эми Карлсон (Amy Karlson), Пол МакНеми (Paul McNamee), Тодди Норам (Toddi Norum), Уолтер Паскуинни (Walter Pasquinni), Рич Слайвзек (Rich Slywczak), Боб Тинкер (Bob Tinker) и Ким Топли (Kim Topley) указали нам на наши ошибки и помогли советами. Без их участия данная книга вряд ли могла бы иметь успех. Мэри Лоу Нор (Mary Lou Nohr) затратила много времени на расстановку недостающих запятых и поис других ошибок. Благодаря ей текст книги стал таким, каким вы его видите. Ванесса Мур (Vanessa Moore) руководила подготовкой последней версии. Ее работа осложнялась тем, чтоб некоторые изменения приходилось вносить буквально в последний момент. Благодаря усилиям Ральфа Семмела (Ralph Semmel) и Джулии Вессел (Julie Wessel) был обеспечен гибкий график работы. Грег Донч (Greg Doench) из Prentice Hall всячески поощрял нашу работу над вторым изданием. Всем перечисленным выше мы выражаем искреннюю благодарность.
Я, Марти, в особенности благодарен B.J., Линдси и Натану за их понимание и поддержку. Я, Лэрри, благодарю Ли за поддержку и терпение в те долгие дни, которые я проводил за компьютером.
Господь наградил нас обоих прекрасными семьями.