Java se сервлеты и jsp паттерны Gof junit Log4j ant



Pdf көрінісі
бет1/22
Дата11.12.2019
өлшемі8.99 Mb.
  1   2   3   4   5   6   7   8   9   ...   22

Java SE
Сервлеты и JSP
Паттерны GoF
JUnit
Log4J
Ant
UML
SQL
JPA
Hibernate
Методы 
программирования 
Java
Java
И.Н.БЛИНОВ 
В.С.РОМАНЧИК 
МЕТОДЫ
ПРОГРАММИРОВАНИЯ 
Игорь Блинов 
Доцент Белорусского государственного университета, кандидат 
физико-математических наук, Sun Certified Java Programmer & Web 
Component Developer. Разработал курсы «Методы программирования»
на Java и «Технолгии JEE». Двадцать лет преподает проектирование
и программирование на объектно-ориентированных языках.
Валерий Романчик 
Доцент Белорусского государственного университета, кандидат 
физико-математических наук, заведующий кафедрой  веб-технологий
и компьютерного моделирования БГУ. Около сорока лет преподает на 
механико-математическом факультете университета курс «Методы 
программирования», а в последние годы – курс 
«Веб-программирование». Автор более 100 статей и книг.
О компании EPAM Systems
Дата основания: 1993 год.
Направления деятельности: 
        разработка, тестирование, сопровождение и поддержка заказного 
программного обеспечения и бизнес-приложений; 
•         интеграция и миграция приложений, данных и бизнес-процессов; 
•         создание выделенных центров разработки, поддержки, 
тестирования и контроля качества программного обеспечения;
•         ИТ-консалтинг с учетом отраслевой специфики бизнеса.
География: подразделения в Беларуси, России, Украине, Казахстане, 
США, Канаде, Венгрии, Польше, Великобритании, Германии, Швеции, 
Швейцарии.
Рейтинг: Международная ассоциация профессионалов в области 
аутсорсинга (IAOP) неоднократно включала EPAM в число ведущих 
компаний в ежегодном исследовании The 2012 Global Outsourcing 100. В 
международном рейтинге аутсорсинговых компаний The 2012 Global 
Services 100 на протяжении нескольких лет EPAM входит в число лучших 
мировых поставщиков услуг по разработке программных продуктов. 
Компания также отмечена в числе 10 компаний-лидеров в списке 
«Глобальные поставщики R&D-услуг 2012», составленном консалтинговой 
компанией Zinnov.
МЕТОДЫ
ПРОГРАММИРОВАНИЯ 
И.Н.БЛИНОВ 
В.С.РОМАНЧИК 

И. Н. Блинов
В. С. Романчик
Java
Методы  
программирования
Учебно-методическое пособие
МИНСК
ИЗДАТЕЛЬСТВО «ЧЕТЫРЕ ЧЕТВЕРТИ»
2013

УДК 004.434
ББК  32.973.26-018.2 
Б69
Рецензенты:
кандидат физико-математических наук 
С. В. Сахоненко,  
кандидат физико-математических наук, доцент 
П. В. Гляков
Рекомендовано  
Учебно-методическим объединением по естественнонаучному образованию  
в качестве пособия для студентов высших учебных заведений,  
обучающихся по специальности 1-31 03 01 «Математика (по направлениям)»,  
направление специальности 1-31 03 01-05 «Математика (информационные технологии)»
Блинов, И.Н., Романчик, В. С.
Java
. Методы программирования : уч.-мет. пособие / И. Н. Блинов, В. С. Романчик. — 
Минск : издательство «Четыре четверти», 2013. — 896 с. 
ISBN
 978-985-7058-30-3.
Пособие предназначено для программистов, начинающих и продолжающих изучение технологий 
Java SE, JEE и других. В его первой части рассматриваются основы языка Java и концепции объектно-
ориентированного  программирования.  Во  второй  части  изложены  аспекты  применения  библиотек 
классов языка Java, включая файлы, коллекции, сетевые и многопоточные приложения, а также взаи-
модействие с ХМL. В третьей части приведены основы программирования распределенных информа-
ционных систем с применением сервлетов, JSP и собственных тегов разработчика. В четвертой части 
даны основы практического применения шаблонов проектирования.
В конце каждой главы даются тестовые вопросы по материалу главы и задания для выполнения. 
В приложениях приведены дополнительные материалы, относящиеся к использованию UML, SQL, 
Ant
, XML, а также краткое описание популярных технологий Log4J, JUnit, JPA и Hibernate.
УДК 004.434
ББК 32.973.26-018.2
ISBN
 978-985-7058-30-3 
© Блинов И. Н., Романчик В. С., 2013 
©  Оформление. ОДО «Издательство  
“Четыре четверти”», 2013
Б69

3
ОГЛАВЛЕНИЕ
Часть 1. Основы Java
Глава 1. 
ВВЕДЕНИЕ В ООП И КЛАССЫ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
Глава 2. 
ТИПЫ ДАННЫХ И ОПЕРАТОРЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Глава 3. 
КЛАССЫ И ОБЪЕКТЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
Глава 4. 
НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
Глава 5. 
ВНУТРЕННИЕ КЛАССЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Глава 6. 
ИНТЕРФЕЙСЫ И АННОТАЦИИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
Часть 2. Использование классов и библиотек
Глава 7. 
СТРОКИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
Глава 8. 
ИСКЛЮЧЕНИЯ И ОШИБКИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Глава 9. 
ПОТОКИ ВВОДА/ВЫВОДА . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Глава 10.  КОЛЛЕКЦИИ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Глава 11.  ПОТОКИ ВЫПОЛНЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
Глава 12.  JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342
Глава 13.  СЕТЕВЫЕ ПРОГРАММЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376
Глава 14.  XML & JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395
Часть 3. Технологии разработки web–приложений
Глава 15.  СЕРВЛЕТЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456
Глава 16.  JAVA SERVER PAGE  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .485
Глава 17.  CЕССИИ, СОБЫТИЯ И ФИЛЬТРЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .522
Глава 18.  JSP STANDARD TAG LIBRARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .544
Глава 19.  ПОЛЬЗОВАТЕЛЬСКИЕ ТЕГИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .573
Часть 4. Шаблоны проектирования
Глава 20.  ШАБЛОНЫ И АНТИШАБЛОНЫ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .592
Глава 21.  ПОРОЖДАЮЩИЕ ШАБЛОНЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .605
Глава 22.  ШАБЛОНЫ ПОВЕДЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .629
Глава 23.  СТРУКТУРНЫЕ ШАБЛОНЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .695
Приложение 1. JUNIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .751
Приложение 2. LOG4J  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .766
Приложение 3. UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .780
Приложение 4. БАЗЫ ДАННЫХ И ЯЗЫК SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .793
Приложение 5. APACHE ANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .813
Приложение 6. JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .827
Приложение 7. HIBERNATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .853
Приложение 8. IDE ECLIPSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .868

4
СОДЕРЖАНИЕ
ПРЕДИСЛОВИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Часть 1. Основы Java
Глава 1.  ВВЕДЕНИЕ В ООП И КЛАССЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
Основные понятия ООП. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Язык Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Простое приложение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Основы классов и объектов Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Объектные ссылки  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Консоль  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Base code conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Глава 2.  ТИПЫ ДАННЫХ И ОПЕРАТОРЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Базовые типы данных и литералы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Документирование кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Классы–оболочки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Операторы управления. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Массивы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Глава 3.  КЛАССЫ И ОБЪЕКТЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
Переменные класса, экземпляра и константы . . . . . . . . . . . . . . . . . . . . . . . . 55
Ограничение доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Конструкторы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Методы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Статические методы и поля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Модификатор final. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Абстрактные методы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Модификатор native  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Модификатор synchronized. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Логические блоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Перегрузка методов  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Параметризованные классы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Параметризованные методы  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Методы с переменным числом параметров . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Перечисления  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Immutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Декомпозиция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Рекомендации при проектировании классов . . . . . . . . . . . . . . . . . . . . . . . . . 87

СОДЕРЖАНИЕ
5
Глава 4.  НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
Наследование. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Классы и методы final. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Использование super и this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Переопределение методов и полиморфизм  . . . . . . . . . . . . . . . . . . . . . . . . . 103
Методы подставки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
«Переопределение» статических методов . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Абстракция и абстрактные классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Расширение функциональности системы. . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Класс Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Клонирование объектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
«Сборка мусора» и освобождение ресурсов  . . . . . . . . . . . . . . . . . . . . . . . . 118
Пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Статический импорт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Рекомендации при проектировании иерархии . . . . . . . . . . . . . . . . . . . . . . . 123
Глава 5.  ВНУТРЕННИЕ КЛАССЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Внутренние (inner) классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Вложенные (nested) классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Анонимные (anonymous) классы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Глава 6.  ИНТЕРФЕЙСЫ И АННОТАЦИИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
Интерфейсы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Параметризация интерфейсов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Аннотации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Часть 2. Использование классов и библиотек
Глава 7.  СТРОКИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
Класс String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Классы StringBuilder и StringBuffer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Регулярные выражения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Интернационализация приложения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Интернационализация чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Интернационализация дат . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Форматирование строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Глава 8.  ИСКЛЮЧЕНИЯ И ОШИБКИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Иерархия исключений и ошибок. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Способы обработки исключений. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Обработка нескольких исключений  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Оператор throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Блок finally. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Собственные исключения  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Наследование и исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Рекомендации по обработке исключений. . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Отладочный механизм assertion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

ИСПОЛЬЗОВАНИЕ КЛАССОВ И БИБЛИОТЕК
6
Глава 9.  ПОТОКИ ВВОДА/ВЫВОДА . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Байтовые и символьные потоки ввода/вывода. . . . . . . . . . . . . . . . . . . . . . . 225
Класс File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Предопределенные потоки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Сериализация объектов  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Класс Scanner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Архивация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Глава 10.  КОЛЛЕКЦИИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Общие определения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Метасимвол в коллекциях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Интерфейс ListIterator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Интерфейс Comparator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Класс LinkedList и интерфейс Queue  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Интерфейс Deque и класс ArrayDeque  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Множества . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Карты отображений  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Унаследованные коллекции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Алгоритмы класса Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Глава 11.  ПОТОКИ ВЫПОЛНЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
Класс Thread и интерфейс Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Жизненный цикл потока. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Управление приоритетами и группы потоков  . . . . . . . . . . . . . . . . . . . . . . . 293
Управление потоками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Потоки–демоны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Потоки и исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Атомарные типы и модификатор volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Методы synchronized. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Инструкция synchronized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Монитор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Методы wait(), notify() и notifyAll(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Новые способы управления потоками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Перечисление TimeUnit  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Блокирующие очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Семафоры  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Барьеры  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
«Щеколда» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Обмен блокировками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Альтернатива synchronized. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
ExecutorService и Callable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Phaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Глава 12.  JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342
Драйверы, соединения и запросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
СУБД MySQL  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Простое соединение и простой запрос . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

СОДЕРЖАНИЕ
7
Метаданные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Подготовленные запросы и хранимые процедуры  . . . . . . . . . . . . . . . . . . . 350
Транзакции. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Точки сохранения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Data Access Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
DAO. Уровень метода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
DAO. Уровень класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
DAO. Уровень логики. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Глава 13.  СЕТЕВЫЕ ПРОГРАММЫ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376
Поддержка Интернета  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Сокетные соединения по протоколу TCP/IP. . . . . . . . . . . . . . . . . . . . . . . . . 382
Многопоточность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Датаграммы и протокол UDP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Глава 14.  XML & JAVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395
Инструкции по обработке  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Указатели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Корректность. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
DTD  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Схема XSD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Простые типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Сложные типы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
JAXB. Маршаллизация и демаршаллизация . . . . . . . . . . . . . . . . . . . . . . . . 412
JAXB. Генерация классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
JAXP
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Валидирующие и невалидирующие анализаторы . . . . . . . . . . . . . . . . . . . . 424
Древовидная и псевдособытийная модели. . . . . . . . . . . . . . . . . . . . . . . . . . 425
Псевдособытийная модель. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
SAX–
анализаторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Древовидная модель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
DOM JAXP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Создание XML–документа. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
StAX
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
XSL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
XSLT
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Элементы таблицы стилей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Часть 3. Технологии разработки web–приложений
Глава 15.  СЕРВЛЕТЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456
Запуск контейнера сервлетов и размещение проекта . . . . . . . . . . . . . . . . . 462
Простая JSP–страница. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Взаимодействие сервлета и JSP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Интерфейс ServletContext. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Интерфейс ServletConfig  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Интерфейс HttpServletRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

ИСПОЛЬЗОВАНИЕ КЛАССОВ И БИБЛИОТЕК
8
Интерфейс HttpServletResponse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Атрибуты и параметры. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Многопоточность в сервлете . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Многопоточность и электронная почта  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Глава 16.  JAVA SERVER PAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .485
Жизненный цикл. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Неявные объекты в expression language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Стандартные элементы action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
JSP–
документ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Expression Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Типы EL операторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Обработка ошибок  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Взаимодействие JSP — сервлет — JSP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Пул соединений. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Глава 17.  CЕССИИ, СОБЫТИЯ И ФИЛЬТРЫ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .522
Сеанс (сессия) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Файлы Cookie  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Обработка событий. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Фильтры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Глава 18.  JSP STANDARD TAG LIBRARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .544
JSTL core  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Автоматическое приведение типов и перехват исключений  . . . . . . . . . . . 548
Исключающие условия  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Итераторы и  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Включение ресурсов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Динамические адреса и перенаправление . . . . . . . . . . . . . . . . . . . . . . . . . . 557
JSTL formatting  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
JSTL sql  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
JSTL xml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
JSTL functions  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
Глава 19.  ПОЛЬЗОВАТЕЛЬСКИЕ ТЕГИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .573
Первый тег. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Тег с атрибутами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Тег с телом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Обработка тела тега  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
Функции–теги. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Элементы action для тегов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Часть 4. Шаблоны проектирования
Глава 20.  ШАБЛОНЫ И АНТИШАБЛОНЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .592
Шаблоны GRASP  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Шаблон Expert. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Шаблон Creator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
Шаблон Low Coupling  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596

СОДЕРЖАНИЕ
Шаблон High Cohesion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Шаблон Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Антишаблоны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Глава 21.  ПОРОЖДАЮЩИЕ ШАБЛОНЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .605
Шаблон Factory Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
Шаблон Abstract Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
Шаблон Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
Шаблон Singleton  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
Шаблон Prototype  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
Глава 22.  ШАБЛОНЫ ПОВЕДЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .629
Шаблон Chain of Responsibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
Шаблон Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
Шаблон Iterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Шаблон Mediator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
Шаблон Memento  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Шаблон Observer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Шаблон State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Шаблон Strategy  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Шаблон Template Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Шаблон Visitor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
Шаблон Interpreter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Глава 23.  СТРУКТУРНЫЕ ШАБЛОНЫ  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .695
Шаблон Bridge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Шаблон Decorator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
Шаблон Façade  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Шаблон Composite  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Шаблон Adapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Шаблон Flyweight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
Шаблон Proxy  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
УКАЗАНИЯ И ОТВЕТЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .735
Приложение 1. JUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .751
Приложение 2. Log4J  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .766
Приложение 3. UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .780
Приложение 4. БАЗЫ ДАННЫХ И ЯЗЫК SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .793
Приложение 5. Apache Ant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .813
Приложение 6. JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .827
Приложение 7. Hibernate  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .853
Приложение 8. IDE Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .868
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .895

ПРЕДИСЛОВИЕ
Пособие «Java. Методы программирования» расширяет и включает перерабо-
танную и обновленную версию предыдущих книг авторов «Java 2. Практическое 
руководство» 2005 года и «Java. Промышленное программирование» 2007 года. 
Книга возникла в процессе обучения языку Java и технологиям студентов ме-
ханико-математического факультета и факультета прикладной математики и ин-
форматики  Белорусского  государственного  университета,  а  также  слушателей 
курсов повышения квалификации и преподавательских тренингов и семинарах 
EPAM Systems, Oracle и других образовательных программ по ряду направлений 
технологий Java. При изучении Java знание других языков необязательно, книгу 
можно использовать для обучения программированию на языке Java «с нуля».
Интересы авторов, направленные на обучение, определили структуру этой 
книги. Книга предназначена как для начинающих изучение Java-технологий, 
так и для студентов и программистов, переходящих на Java с другого языка 
программирования. Авторы считают, что «профессионала под ключ» обучить 
нельзя, им становятся только после участия в разработке нескольких серьез-
ных  Java-проектов.  В  то  же  время  данный  курс  может  служить  ступенькой 
к мастерству. Прошедшие обучение по этому курсу успешно сдают различные 
экзамены, получают международные сертификаты и в состоянии участвовать 
в командной разработке промышленных программных проектов.
Книга разбита на четыре логические части. В первой части даны фундамен-
тальные основы языка Java и концепции объектно-ориентированного програм-
мирования. Во второй части изложены наиболее важные аспекты применения 
языка, в частности коллекции и базы данных, многопоточность и взаимодейст-
вие с XML. В третьей части приведены основы программировании распреде-
ленных информационных систем с применением сервлетов, JSP. В четвертой 
даны основы применения шаблонов проектирования.
В конце каждой главы даются тестовые вопросы по материалам данной гла-
вы  и  задания  для  выполнения  по  рассмотренной  теме.  Ответы  и  пояснения 
к тестовым вопросам сгруппированы в отдельный блок.
В приложениях приведены дополнительные материалы, относящиеся к ис-
пользованию в информационных системах, основанных на применении Java-
технологий, популярных технологий Log4J и JUnit, Apache Ant для сборки при-
ложений, а также основы языков UML и SQL.
Авторы выражают благодарность компании EPAM Systems и ее сотрудни-
кам, принимавшим участие в подготовке материалов этой книги и в ее издании.

Часть 1
Основы Java
В первой части книги излагаются вопросы,  
относящиеся к основам языка Java и практике 
объектно-ориентированного программирования.

12


Достарыңызбен бөлісу:
  1   2   3   4   5   6   7   8   9   ...   22




©engime.org 2020
әкімшілігінің қараңыз

    Басты бет