СОДЕРЖАНИЕ
Предисловие 3
Введение 5
Почему язык Ява? 8
Версии языка Ява 9
Среда выполнения программ на языке Ява 10
Области применения языка Ява 11

ЧАСТЬ 1. ОСНОВЫ ЯЗЫКА ЯВА ……………………13

ГЛАВА 1. КАК СОЗДАТЬ И ВЫПОЛНИТЬ ПРОСТЕЙШУЮ ПРОГРАММУ НА ЯЗЫКЕ ЯВА 13
1.1. Средства программирования на языке Ява 13
1.2. Первая программа 14
1.3. Простейший аплет 15

ГЛАВА 2. ПРОСТЕЙШИЕ ТИПЫ ДАННЫХ 17
2.1. Простейшие типы данных 17
2.2. Целые величины 18
2.3. Вещественные числа 19
2.4. Символы 19
2.5. Логические значения 20
2.6. Преобразования типов 20

ГЛАВА 3. ПЕРЕМЕННЫЕ И ВЫРАЖЕНИЯ 20
3.1. Переменные 20
3.2. Массивы 22
3.3. Операции над простыми типами 23

ГЛАВА 4. ОПЕРАТОРЫ 27
4.1. Оператор присваивания и операторы-выражения 27
4.2. Условные операторы 28
4.3. Операторы цикла 30
4.4. Операторы перехода 31

ГЛАВА 5. ОБЪЕКТЫ 33

ГЛАВА 6. ПОНЯТИЕ КЛАССА И НАСЛЕДОВАНИЯ 35
6.1. Наследование классов 37
6.2. Полиморфизм 38
6.3. Использование наследования и полиморфизма 39

ГЛАВА 7. ОБЪЕКТЫ И КЛАССЫ В ЯЗЫКЕ ЯВА 42
7.1. Права доступа к атрибутам и методам класса 43
7.2. Методы 45
7.3. Наследование классов 46
7.4. Пример 48

ГЛАВА 8. СОЗДАНИЕ И УДАЛЕНИЕ ОБЪЕКТОВ 50
8.1. Запуск программы 50
8.2. Ссылка на объект 50
8.2.1. Передача аргументов 52
8.3. Удаление объектов 53
8.3.1. Метод finalize 55

ГЛАВА 9. ПАКЕТЫ ЯЗЫКА ЯВА 55

ГЛАВА 10. КЛАССЫ В ЯЗЫКЕ ЯВА. ПРОДОЛЖЕНИЕ 58
10.1. Абстрактные классы 58
10.2. Конструкторы 59
10.3. Статические атрибуты и методы классов 63
10.4. Объявление final 67
10.4.1. Блоки инициализации 69
10.5. Интерфейсы 69

ГЛАВА 11. ОБРАБОТКА ОШИБОК. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ 71
11.1. Обработка ошибок 71
11.1.1. Возвращаемое значение как признак ошибки 73
11.2. Исключительные ситуации 76
11.2.1. Типы исключительных ситуаций 77
11.2.2. Операторы try, catch и finally 79
11.2.3. Объявление исключительных ситуаций в описании методов 81

ГЛАВА 12. ПОСТРОЕНИЕ КОЛЛЕКЦИЙ 83
12.1. Простые коллекции языка Ява 83
12.1.1. Вектор 84
12.1.2. Хешированная таблица 85
12.1.3. Нумератор 88
12.2. Система коллекций языка Ява 88
12.2.1. Иерархия интерфейсов 89
12.2.2. Итераторы 91
12.2.3. Интерфейс Map 92

ГЛАВА 13. СПИСКИ, НАБОРЫ И АЛГОРИТМЫ В ЯЗЫКЕ ЯВА 94
13.1. Наборы 94
13.1.1. Реализации наборов 96
13.2. Списки 97
13.2.1. Реализация интерфейса List 99
13.3. Алгоритмы 99

ГЛАВА 14. ПОТОКИ ДЛЯ ОРГАНИЗАЦИИ
ВВОДА-ВЫВОДА 100
14.1. Символьные и байтовые потоки ввода-вывода 100
14.2. Потоки данных и обрабатывающие потоки 104
14.3. Ввод информации 104
14.4. Вывод информации 106
14.5. Различные виды потоков 107

ГЛАВА 15. ПОТОКИ ДЛЯ РАБОТЫ С ФАЙЛАМИ 108
15.1. Класс File 108
15.2. Использование потоков FileReader и FileWriter 109
15.3. Каталоги 110

ГЛАВА 16. СЕРИАЛИЗАЦИЯ ОБЪЕКТОВ 111
16.1. Сериализация объектов 111
16.2. Интерфейс Serializable 113
16.3. Интерфейс Externalizable 114

ГЛАВА 17. ПОДПРОЦЕССЫ 116
17.1. Класс Thread 117
17.2. Интерфейс Runnable 119

ГЛАВА 18. СИНХРОНИЗАЦИЯ 120
18.1. Синхронизованные методы 120
18.2. Методы wait и notify 123

ГЛАВА 19. МЕХАНИЗМ РЕФЛЕКСИИ 125
19.1. Определение свойств типа 126
19.2. Манипулирование объектами 128
19.2.1. Создание объектов 129
19.2.2. Получение и изменение значений атрибутов 129
19.2.3. Вызов методов 130

ГЛАВА 20. СОЗДАНИЕ КОМПОНЕНТ BEANS 131
20.1. Простейшая компонента 133
20.2. События 135
20.3. Анализ и изменение свойств компонент 138
20.3.1. Виды свойств компонент 139
20.3.1.1. Простые свойства 139
20.3.1.2. Булевы свойства 139
20.3.1.3. Индексируемые свойства 139
20.3.2. Оповещение об изменениях в компоненте 140
20.3.3. Разрешение или запрещение изменений 141
20.4. Образцы проектирования компонент 141
20.4.1. Образцы программирования для свойств компонент 142
20.4.2. Образцы программирования для событий 142
20.4.3. Образцы программирования для методов 143
20.5. Задание свойств компоненты с помощью интерфейса BeanInfo 143
20.6. Распространение компонент 144

Часть 2. ПРОГРАММИРОВАНИЕ АПЛЕТОВ……...145

ГЛАВА 21. АПЛЕТЫ 145
21.1. Ограничения на использование аплетов 147
21.2. Иерархия наследования классов аплетов 148
21.3. Жизненный цикл аплетов 149

ГЛАВА 22. ПРИНЦИПЫ ПОСТРОЕНИЯ АПЛЕТОВ 152
22.1. Построение аплетов из стандартных компонент 152
22.2. Построение аплета из стандартных компонент
в интегрированной среде программирования 155
22.3. Программирование событий 156
22.4. События в языке Ява 157

ГЛАВА 23. ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА С ПОМОЩЬЮ ПАКЕТА AWT 159

ГЛАВА 24. СТАНДАРТНЫЕ КОМПОНЕНТЫ
ПАКЕТА AWT 167
24.1. Общие свойства компонент пакета AWT 168
24.2. Использование конкретных компонент 170
24.2.1. Кнопка 170
24.2.2. Метка 171
24.2.3. Текстовое поле 171
24.2.4. Кнопка-флажок 173
24.2.5. Списки 174
24.2.6. Линейки прокрутки 177
24.2.7. Список альтернативных значений 179
24.2.8. Другие компоненты 180

ГЛАВА 25. УПРАВЛЕНИЕ РАСПОЛОЖЕНИЕМ КОМПОНЕНТ 181
25.1. Общие принципы работы с менеджерами размещения 182
25.2. BorderLayout 185
25.3. FlowLayout 185
25.4. GridLayout 186
25.5. GridBagLayout 186

ГЛАВА 26. СОБЫТИЯ В ПАКЕТЕ AWT 189
26.1. События, генерируемые компонентами пакета AWT 190
26.2. Обработка событий 192
26.2.1. Обработка событий ActionEvent 192
26.2.2. Обработка событий MouseEvent 193
26.2.3. Обработка событий TextEvent 195
26.2.4. Обработка событий KeyEvent 196
26.2.5. Обработка событий FocusEvent 197

ГЛАВА 27. ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ
В ПАКЕТЕ AWT 198
27.1. Система координат 199
27.2. Графический контекст 199
27.2.1. Изображение простейших графических фигур 199
27.2.2. Изображение образов 204
27.2.3. Вывод текста 205

ГЛАВА 28. СОЗДАНИЕ АПЛЕТОВ С ПОМОЩЬЮ
JFC/SWING 206
28.1. Пакет JFC/Swing 206
28.2. Структура JFC-аплета или программы 206
28.3. Структура JFC/Swing-классов 208
28.4. Обработка событий и управление расположением компонент 209

ГЛАВА 29. ПОСТРОЕНИЕ СТАНДАРТНЫХ КОМПОНЕНТ В ПАКЕТЕ JFC/SWING 209
29.1. Класс JComponent 209
29.2. Контейнеры 211
29.2.1. Контейнеры верхнего уровня 211
29.2.2. Промежуточные контейнеры 212

ГЛАВА 30. ПРОСТЫЕ КОМПОНЕНТЫ ПАКЕТА
JFC/SWING 213
30.1. Кнопки 213
30.2. Меню 215
30.3. Метки 219

ГЛАВА 31. СЛОЖНЫЕ КОМПОНЕНТЫ ПАКЕТА
JFC/SWING 219
31.1. Разделение данных и их изображения в пакете Swing 220
31.2. Списки 221
31.2.1. Отображение элементов списка на экране 222
31.3. Текстовые компоненты 222
31.3.1. Документы 223
31.4. Таблицы 225
31.4.1. Модель данных таблицы 226
31.4.2. Отображение ячеек таблицы на экране 227
31.5. Дополнительные компоненты 227
31.5.1. JOptionPane 227
31.5.2. JTree 228
31.5.3. JTabbedPane 229

ГЛАВА 32. ВЗАИМОДЕЙСТВИЕ АПЛЕТОВ И БРАУЗЕРА 229
32.1. Передача параметров из HTML в аплет 229
32.2. Управление браузером из аплета 230
32.3. Получение доступа к другим аплетам на странице 231

Часть 3. РАЗРАБОТКА ИНТЕРНЕТ-ПРИЛОЖЕНИЙ……………………………………..…..232

ГЛАВА 33. ЧТО ТАКОЕ ИНТЕРНЕТ И КАК ОН РАБОТАЕТ 232
33.1. Протоколы Интернета 234

ГЛАВА 34. АРХИТЕКТУРА ИНТЕРНЕТ-ПРИЛОЖЕНИЙ В СРЕДЕ ЯЗЫКА ЯВА 237
34.1. Клиентские программы 238
34.2. Уровень бизнес-логики 239
34.3. Уровень взаимодействия с большими информационными системами 239
34.4. Архитектура J2EE 240

ГЛАВА 35. ОСНОВНЫЕ СВЕДЕНИЯ ОБ HTML 241
35.1. Структура страницы HTML 242
35.1.1. Директивы форматирования 244
35.1.2. Таблицы 249
35.1.3. Ссылки 253
35.1.4. Графика 255
35.1.5. Заголовок документа 256
35.1.6. Директива 256
35.2. Фреймы HTML 256
35.2.1. Директива 257
35.2.2. Директива 258
35.2.3. Имена фреймов 258

ГЛАВА 36. СОЗДАНИЕ ДИНАМИЧЕСКИХ СТРАНИЦ С ПОМОЩЬЮ МЕХАНИЗМА CGI 259
36.1. Формы языка HTML 260
36.1.1. Директива 262
36.1.2. Передача значений на сервер 264
36.1.2.1. Текстовые поля 265
36.1.2.2. Поле для ввода пароля 265
36.1.2.3. Поле для ввода имени файла 266
36.1.2.4. Кнопка-флажок 266
36.1.2.5. Радиокнопка 266
36.1.2.6. Кнопка "Послать" 267
36.1.2.7. Кнопка "Очистить" 267
36.1.2.8. Кнопка, определенная пользователем 267
36.1.2.9. Скрытые поля 267
36.1.3. Директива 268
36.1.4. Директива 268
36.2. Методы GET и POST 270

ГЛАВА 37. ВЫПОЛНЕНИЕ ПРОГРАММ НА СЕРВЕРЕ 271
37.1. Запуск программ 271
37.2. Передача данных из браузера 273
37.2.1. Метод GET 274
37.2.2. Метод POST 275
37.3. Генерация ответов 275
37.3.1. Коды ответов протокола HTTP 276

ГЛАВА 38. ОСНОВНЫЕ ВОЗМОЖНОСТИ ДОСТУПА К БАЗАМ ДАННЫХ С ПОМОЩЬЮ JDBC 281
38.1. Соединение с базой данных 282
38.2. Выполнение операторов SQL 283
38.3. Получение результатов выполнения операторов SQL 285
38.4. Дополнительные возможности наборов в JDBC 2.0 289
38.5. Обработка ошибок при выполнении операций с базой данных 292

ГЛАВА 39. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ JDBC 294
39.1. Транзакции 294
39.2. Операторы с параметрами 295
39.3. Процедуры 297

ГЛАВА 40. ВЫЗОВ МЕТОДОВ В РАСПРЕДЕЛЕННЫХ ОБЪЕКТАХ (RMI) 298
40.1. Создание интерфейсов, которые можно вызывать удаленно 300
40.2. Реализация интерфейсов 301
40.2.1. Передача аргументов 302
40.3. Создание клиентов, использующих удаленные объекты 303
40.4. Компиляция, распространение и установка 304
ГЛАВА 41. ИСПОЛЬЗОВАНИЕ ИНТЕРФЕЙСОВ CORBA 306
41.1. Краткая характеристика стандарта CORBA 306
41.2. Определение и реализация интерфейсов CORBA на языке Ява 313
41.3. Пример 314
41.3.1. Клиентская программа 315
41.3.2. Сервер 316
41.3.3. Компиляция и запуск программы 317

ГЛАВА 42. СЕРВЛЕТЫ 318
42.1. Интерфейс Servlet 319
42.2. Запросы к сервлету и ответы от сервлета 321
ГЛАВА 43. КОМПОНЕНТЫ ENTERPRISE JAVA BEANS 322
43.1. Создание компонент Enterprise Java Beans 323
43.2. Сессионные компоненты 324
43.3. Модульные компоненты 325
Литература……...…..…………………………………..………...…………326

Предисловие

Эта книга написана на основе лекций, которые автор читал на различных курсах повышения квалификации. Эти курсы (и соответственно данная книга) предполагали наличие у слушателей определенных знаний в области программирования.
Во-первых, предполагается знание основ использования компьютера – понятия файла, оперативной памяти, программы. Большая часть примеров использует те или иные элементы графического оконного интерфейса. Хотя в основном примеры ориентированны на среду Microsoft Windows, достаточно знакомства с любой современной оконной системой на уровне пользователя (MS Windows, X-Window и пр.).
Во-вторых, предполагается, что читателям знакомы базовые понятия программирования – программа, компиляция, интерпретация, переменная, функция или подпрограмма, оператор языка, выражение, отладка программ и т.п. Идеальным вариантом было бы, если бы читатели уже знали какой-либо язык программирования – предпочтительно процедурный, например Си, Бейсик, Паскаль, Кобол или какой-нибудь иной. Однако изложение не опирается на какой-либо конкретный язык программирования.
В разделах, посвященных работе с базами данных, предполагается знание основ языка SQL и принципов построения реляционных баз данных.
Книга состоит из введения и трех частей. Во введении дается краткий обзор тех технологий создания Интернет-приложений, которые описы¬ваются в дан¬ной работе, и рассматривается их место в ряду других широко применяемых технологий. Три последующие части рассматривают основы языка Ява, средства построения аплетов языка Ява и использование языка Ява для построения сложных Интернет-приложений.
Часть 1 данной книги не ставит перед собой задачи полного описания всех возможностей языка Ява. Скорее ее цель – дать необходимый запас знаний и навыков для того, чтобы можно было начать практическую работу по разработке Интернет-приложений с помощью языка Ява.
Базовый язык Ява рассматривается достаточно полно.
Богатство языка Ява во многом объясняется наличием большого количества пакетов (библиотек классов), расширяющих и дополняющих его возможности. Описать все пакеты в одной книге – задача нереальная. Поэтому мы рассматривали только те, которые необходимы для разработки Интернет-приложений.
Часть 2 посвящена аплетам – особого вида программам на языке Ява, которые встраиваются в страницы Интернета. Хотя аплеты и относятся к средствам разработки клиентской части Интернет-приложений, существенная часть рассматриваемых в этой части книги возможностей применима и к стандартным программам на языке Ява.
Часть 3 посвящена описанию основ Интернета – как тех, которые необходимы для понимания принципов его работы, так и тех, которые нужны для построения простейших приложений в Интернете. Достаточно внимания уделяется вопросам построения Интернета, структуре языка HTML, способам передачи информации в Сети. Рассматривает несколько широко используемых технологий построения серверной части Интернет-приложений.
При описании языка Ява, естественно, необходимо описывать многочисленные пакеты классов и отдельные классы, входящие в стандартный набор классов JDK. В отличие от базовых свойств языка, которые описываются достаточно детально, мы не стремились к такому же уровню деталей при описании имеющихся стандартных классов. Мы считали, что не имеет практического смысла повторять все сведения, имеющиеся в описании стандартных пакетов языка Ява, например в документации, входящей в состав JDK. Эта документация легко доступна, а, кроме того, если бы мы попытались повторить в этой книге все сведения из стандартной документации, ее объем увеличился бы в два-три раза. Вместо этого мы предпочли сосредоточиться на тех сведениях, которых нет в стандартной документации, а именно: как связаны разные классы между собой, в каких случаях их необходимо использовать и методы решения практических задач с применением этих классов.