Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 595396)
Консорциум Контекстум Информационная технология сбора цифрового контента
Уважаемые СТУДЕНТЫ и СОТРУДНИКИ ВУЗов, использующие нашу ЭБС. Рекомендуем использовать новую версию сайта.

Groovy и Grails. Практические советы (2000,00 руб.)

0   0
Первый авторАбдул-Джавад
ИздательствоМ.: ДМК Пресс
Страниц409
ID794536
АннотацияСоздание успешных корпоративных приложений на Java — сложная и трудоёмкая задача. Эта книга познакомит вас с технологиями Groovy и Grails, которые существенно упрощают разработку приложений. Материал преподносится в виде вопросов и ответов, что позволяет использовать книгу в качестве настольного руководства. Первая часть книги посвящена языку Groovy, а вторая — Web-фреймворку Grails. В издании затронуты разнообразные темы: от уровня данных до тестирования приложений. В действительности нет ни одной причины для Java-разработчиков не использовать Groovy с целью увеличения эффективности. После нескольких лет борьбы с повторным проектированием и повторной разработкой Web-фреймворков на Java (Struts, например) Java-разработчики высоко оценят простоту и эффективность Grails. В первую очередь книга необходима Java-разработчикам, а также будет полезна всем программистам, желающим изучить новый язык Groovy и Web-фреймворк Grails.
ISBN978-5-94074-618-8
УДК4.4
ББК32.973.26-018.2
Абдул-Джавад, Б. Groovy и Grails. Практические советы / Б. Абдул-Джавад .— Москва : ДМК Пресс .— 409 с. — ISBN 978-5-94074-618-8 .— URL: https://rucont.ru/efd/794536 (дата обращения: 27.09.2022)

Предпросмотр (выдержки из произведения)

Groovy_и_Grails._Практические_советы.pdf
Стр.3
Стр.6
Стр.8
Стр.9
Стр.10
Стр.11
Стр.12
Стр.13
Стр.14
Стр.15
Groovy_и_Grails._Практические_советы.pdf
УДК 004.4 ББК 32.973.26-018.2 Б33 Б33 Башар Абдул-Джавад Groovy и Grails. Практические советы: Пер. с англ. Манаева А. В. – М.: ДМК Пресс, 2010. – 408 с.: ил. ISBN 978-5-94074-618-8 Создание успешных корпоративных приложений на Java – сложная и трудоёмкая задача. Эта книга познакомит вас с технологиями Groovy и Grails, которые существенно упрощают разработку приложений. Материал преподносится в виде вопросов и ответов, что позволяет использовать книгу в качестве настольного руководства. Первая часть книги посвящена языку Groovy, а вторая – Webфреймворку Grails. В издании затронуты разнообразные темы: от уровня данных до тестирования приложений. В действительности нет ни одной причины для Java-разработчиков не использовать Groovy с целью увеличения эффективности. После нескольких лет борьбы с повторным проектированием и повторной разработкой Web-фреймворков на Java (Struts, например) Java-разработчики высоко оценят простоту и эффективность Grails. В первую очередь книга необходима Java-разработчикам, а также будет полезна всем программистам, желающим изучить новый язык Groovy и Web-фреймворк Grails. УДК 004.4 ББК 32.973.26-018.2 Original English language edition published by Apress, Inc. USA. Copyright © 2009 by Apress, Inc. Russian-language edition copyright © 2009 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-4302-1600-1 (англ.) Copyright © 2009 by Apress, Inc ISBN 978-5-94074-618-8 (рус.) © Оформление, издание, ДМК Пресс, 2010 .
Стр.3
Краткое содержание Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv О техническом обозревателе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi ЧАСТЬ 1 ■ ■ ■ Groovy в примерах ГЛАВА 1 Начало работы с Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ГЛАВА 2 От Java к Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ГЛАВА 3 Типы данных Groovy и управляющие структуры . . . . . . . . . . . . . . . . . . . . 45 ГЛАВА 4 ГЛАВА 5 ГЛАВА 6 ГЛАВА 7 Работа с базами данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 ГЛАВА 8 Тестирование с Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 ГЛАВА 9 Разнообразные советы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 ЧАСТЬ 2 ■ ■ ■ Grails в примерах ГЛАВА 10 Начало работы с Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 ГЛАВА 11 ГЛАВА 12 ГЛАВА 13 ГЛАВА 14 ГЛАВА 15 ГЛАВА 16 Web-óðîâåíü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Уровень данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Скафолдинг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Безопасность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Разнообразные советы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Объектно-ориентированный Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Билдеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 v
Стр.6
Содержание Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv О техническом обозревателе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi ЧАСТЬ 1 ■ ■ ■ Groovy в примерах ГЛАВА 1 Начало работы с Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1-1. Что такое Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1-2. Что не так с Java? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1-3. Как Groovy устраняет недостатки Java? . . . . . . . . . . . . . . . . . . . . . . . . . 5 1-4. Как загрузить и установить Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1-5. Какие инструменты поставляются вместе с Groovy? . . . . . . . . . . . . . 10 1-6. Как использовать Groovy-îáîëî÷êó? . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1-7. Как использовать Groovy-êîíñîëü? . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 1-8. Как использовать groovyc и groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . .12 1-9. Есть ли поддержка Groovy в IDE? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1-10. Как добавить поддержку Groovy в Eclipse? . . . . . . . . . . . . . . . . . . . . . 13 1-11. Как добавить поддержку Groovy в IntelliJ IDEA?. . . . . . . . . . . . . . . . . 14 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 ГЛАВА 2 От Java к Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2-1. Чем схожи Java и Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2-2. Чем отличаются Java и Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Необязательные синтаксические элементы . . . . . . . . . . . . . . . . . . . . 19 Новые и усовершенствованные синтаксические элементы, структуры и конструкции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 vii
Стр.8
viii ■ СОДЕРЖАНИЕ Новые õåëïåðû, библиотеки и APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Другие отличия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2-3. Как интегрировать Groovy с Java? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Компиляция в байткод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Использование GroovyShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Использование GroovyScriptEngine . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Использование GroovyClassLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Использование JSR 223 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 ГЛАВА 3 Типы данных Groovy и управляющие структуры . . . . . . 45 3-1. Какие виды строк есть в Groovy и как их использовать? . . . . . . . . . . 45 3-2. Как использовать регулярные выражения в Groovy? . . . . . . . . . . . . . . 51 3-3. Чем отличаются числа в Groovy и Java? . . . . . . . . . . . . . . . . . . . . . . . . 54 3-4. Как использовать списки в Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3-5. Как реализовать сортировку слиянием в Groovy? . . . . . . . . . . . . . . . . 62 3-6. Как использовать карты в Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3-7. Что такое диапазоны и как их использовать в Groovy? . . . . . . . . . . . . 66 3-8. Что является истинностным значением в Groovy? . . . . . . . . . . . . . . . 67 3-9. Чем отличается оператор switch в Groovy и Java? . . . . . . . . . . . . . . . . 68 3-10. Как организовать циклы в Groovy? . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 ГЛАВА 4 Объектно-ориентированный Groovy . . . . . . . . . . . . . . . . . . . . 73 4-1. Чем отличаются классы и ñêðèïòû? . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Один общедоступный класс на файл . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Несколько классов на файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Только скриптовый код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Классы и скриптовый код в одном файле . . . . . . . . . . . . . . . . . . . . . . 75 Выбор стратегии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4-2. Как использовать ïàêåòû? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4-3. Что такое синонимия типов и как å¸ использовать? . . . . . . . . . . . . . . 77 4-4. Как использовать наследование в Groovy? . . . . . . . . . . . . . . . . . . . . . . 78 4-5. Как использовать интерфейсы в Groovy? . . . . . . . . . . . . . . . . . . . . . . . 79
Стр.9
■ СОДЕРЖАНИЕ 4-6. Что такое мультиметоды и как их использовать? . . . . . . . . . . . . . . . . 82 4-7. Что такое категории и как их использовать? . . . . . . . . . . . . . . . . . . . . 85 4-8. Чем отличаются поля и локальные переменные в Groovy и Java? . . 85 4-9. Чем отличаются методы в Groovy и Java? . . . . . . . . . . . . . . . . . . . . . . . 87 Использование позиционных параметров . . . . . . . . . . . . . . . . . . . . . . 88 Использование списка в качестве единственного аргумента . . . . . 89 Использование массива для необязательных параметров . . . . . . . . 89 Использование параметров в виде карты . . . . . . . . . . . . . . . . . . . . . . 90 4-10. Чем отличаются конструкторы в Groovy и Java? . . . . . . . . . . . . . . . . 90 4-11. Что такое GroovyBeans? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4-12. Что такое GPaths? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4-13. Как использовать класс Expando? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4-14. Что такое Metaclass и как его использовать? . . . . . . . . . . . . . . . . . . . 96 4-15. Как перехватить все вызовы методов îáúåêòà?. . . . . . . . . . . . . . . . . 97 4-16. Как перехватить ìåòîäû, которые отсутствуют в êëàññå? . . . . . . . . 98 4-17. Как привнести в класс дополнительное поведение с помощью ExpandoMetaClass? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 ГЛАВА 5 Замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5-1. Что такое замыкание? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5-2. Зачем нужны замыкания? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5-3. Можно ли сравнить замыкания с анонимными внутренними êëàññàìè? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5-4. Как создать замыкание? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5-5. Как вызвать замыкание? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5-6. Как вернуть значение из замыкания? . . . . . . . . . . . . . . . . . . . . . . . . . 105 5-7. Как повторно использовать метод в качестве замыкания? . . . . . . . 105 5-8. Как передать замыкание в качестве аргумента ìåòîäà? . . . . . . . . . 106 5-9. Какова область видимости замыкания? . . . . . . . . . . . . . . . . . . . . . . . 107 5-10. Что означают зарезервированные слова this, owner и delegate внутри замыкания? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5-11. Как из замыкания вернуть результат? . . . . . . . . . . . . . . . . . . . . . . . 110 ix
Стр.10
x ■ СОДЕРЖАНИЕ 5-12. Что означает каррирование замыканий? . . . . . . . . . . . . . . . . . . . . .111 5-13. Как использовать замыкание внутри оператора switch? . . . . . . . . 113 5-14. Как получить дополнительную информацию о параметрах, переданных в замыкание? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5-15. Как использовать замыкания внутри êàðò? . . . . . . . . . . . . . . . . . . . 114 5-16. Как использовать замыкания с ôàéëàìè? . . . . . . . . . . . . . . . . . . . . 114 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ГЛАВА 6 Билдеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6-1. Что такое áèëäåðû? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6-2. Зачем нужны áèëäåðû? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 6-3. Как использовать MarkupBuilder для генерации XML? . . . . . . . . . . . 121 6-4. Как использовать MarkupBuilder для генерации HTML? . . . . . . . . . . 125 6-5. Как с помощью NodeBuilder создать дерево îáúåêòîâ? . . . . . . . . . . 127 6-6. Как использовать ObjectGraphBuilder для генерации дерева îáúåêòîâ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 6-7. Как использовать AntBuilder для генерации Ant-çàäàíèé? . . . . . . . . 130 6-8. Как с помощью SwingBuilder создать Swing-âèäæåòû? . . . . . . . . . . . 131 6-9. Как использовать менеджеры ðàçì¸òêè вместе со SwingBuilder? . 135 6-10. Как добавить экшен к Swing-âèäæåòó? . . . . . . . . . . . . . . . . . . . . . . . 137 6-11. Как совместно использовать экшены из âèäæåòîâ? . . . . . . . . . . . . 139 6-12. Как использовать Swing-ìîäåëè? . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 6-13. Как создать свой собственный áèëäåð? . . . . . . . . . . . . . . . . . . . . . . 142 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 ГЛАВА 7 Работа с базами данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7-1. Как установить соединение с базой äàííûõ?. . . . . . . . . . . . . . . . . . . 147 7-2. Как использовать пул соединений? . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 7-3. Как создать новую òàáëèöó? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 7-4. Как äîáàâèòü, обновить и удалить äàííûå? . . . . . . . . . . . . . . . . . . . . 151 7-5. Как извлечь данные из òàáëèö? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 7-6. Как получить метаданные òàáëèöû? . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7-7. Как использовать DataSet? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7-8. Как использовать DataSet с объединением òàáëèö? . . . . . . . . . . . . . 158 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Стр.11
■ СОДЕРЖАНИЕ ГЛАВА 8 Тестирование с Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 8-1. Как в Groovy создать встраиваемый òåñò? . . . . . . . . . . . . . . . . . . . . . 163 8-2. Как в Groovy создать тестовый êëàññ? . . . . . . . . . . . . . . . . . . . . . . . . 164 8-3. Как использовать Groovy для тестирования Java-êîäà? . . . . . . . . . . 168 8-4. Как объединить и выполнить тесты из IDE? . . . . . . . . . . . . . . . . . . . . 169 8-5. Как использовать Ant для выполнения òåñòîâ? . . . . . . . . . . . . . . . . . 172 8-6. Как использовать Maven для выполнения òåñòîâ? . . . . . . . . . . . . . . 173 8-7. Какие передовые методики тестирования предоставляет Groovy? .175 8-8. Как использовать карты для тестирования êîäà? . . . . . . . . . . . . . . . 175 8-9. Как использовать объект Expando для тестирования êîäà? . . . . . . . 177 8-10. Как использовать заглушки и макеты в Groovy? . . . . . . . . . . . . . . . 178 8-11. Как использовать GroovyLogTestCase? . . . . . . . . . . . . . . . . . . . . . . . 182 8-12. Как измерить покрытие кода с помощью Cobertura? . . . . . . . . . . . 184 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 ГЛАВА 9 Разнообразные советы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 9-1. Как использовать шаблоны Groovy для генерации динамического повторно используемого содержимого? . . . . . . . . . . 191 9-2. Как использовать грувлеты для генерации динамического Web-ñîäåðæèìîãî? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 9-3. Как загрузить и обработать XML с помощью XmlParser? . . . . . . . . . 197 9-4. Как загрузить и обработать XML с помощью XmlSlurper?. . . . . . . . . 201 9-5. Как использовать XPath? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 9-6. Как загрузить XML-ñîäåðæèìîå RSS-ëåíòû? . . . . . . . . . . . . . . . . . . . 204 9-7. Как использовать Groovy из командной ñòðîêè? . . . . . . . . . . . . . . . . 205 9-8. Как использовать ConfigSlurper для создания конфигурационных ôàéëîâ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 9-9. Как с помощью Groovy запустить внешний ïðîöåññ? . . . . . . . . . . . . 209 9-10. Как в Groovy загрузить ôàéë? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 9-11. Как обработать все файлы в êàòàëîãå? . . . . . . . . . . . . . . . . . . . . . . . 210 9-12. Как подсчитать все вхождения слова в ñòðîêå? . . . . . . . . . . . . . . . 211 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 xi
Стр.12
xii ■ СОДЕРЖАНИЕ ЧАСТЬ 2 ■ ■ ■ Grails в примерах ГЛАВА 10 Начало работы с Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 10-1. Что такое Grails? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 10-2. Зачем нужен åù¸ один фреймворк? . . . . . . . . . . . . . . . . . . . . . . . . . 216 10-3. Как загрузить и установить Grails?. . . . . . . . . . . . . . . . . . . . . . . . . . . 217 10-4. Как в Grails создать первое приложение? . . . . . . . . . . . . . . . . . . . . . 218 10-5. Как использовать Grails в Eclipse? . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 10-6. Как использовать Grails в IntelliJ IDEA? . . . . . . . . . . . . . . . . . . . . . . . 222 10-7. Какие основные команды есть в Grails? . . . . . . . . . . . . . . . . . . . . . . 224 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 ГЛАВА 11 Web-óðîâåíü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 11-1. Как создать контроллер? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 11-2. Что такое серверные страницы Groovy? . . . . . . . . . . . . . . . . . . . . . . 229 11-3. Как связаны контроллеры и GSPs? . . . . . . . . . . . . . . . . . . . . . . . . . . 231 11-4. Как передать переменные из контроллера в GSP? . . . . . . . . . . . . . 232 11-5. Как использовать теги в качестве вызовов ìåòîäîâ? . . . . . . . . . . . 233 11-6. Как в контроллере создать несколько ýêøåíîâ? . . . . . . . . . . . . . . . 234 11-7. Какие неявные объекты доступны внутри контроллера и GSP? . . 235 11-8. Как для пользователя создать несколько представлений? . . . . . . 242 11-9. Как последовательно вызвать ýêøåíû? . . . . . . . . . . . . . . . . . . . . . . 244 11-10. Как перехватить экшены контроллера? . . . . . . . . . . . . . . . . . . . . . 245 11-11. Как выполнить привязку входных параметров? . . . . . . . . . . . . . . 247 11-12. Как вернуть в качестве результата JSON? . . . . . . . . . . . . . . . . . . . 248 11-13. Как сохранить доменные классы в виде XML или JSON (ñåðèàëèçîâàòü)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 11-14. Как выгрузить и загрузить ôàéëû? . . . . . . . . . . . . . . . . . . . . . . . . . 250 11-15. Что такое шаблоны и как их использовать? . . . . . . . . . . . . . . . . . . 251 11-16. Как изменить ðàçì¸òêó и внешний вид приложения? . . . . . . . . . 252 11-17. Как создать собственные пользовательские òåãè? . . . . . . . . . . . . 257 11-18. Как использовать ôèëüòðû? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 11-19. Как использовать Ajax? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Стр.13
■ СОДЕРЖАНИЕ ГЛАВА 12 Уровень данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12-1. Как настроить использование базы äàííûõ? . . . . . . . . . . . . . . . . . . 263 12-2. Как создать доменный êëàññ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 12-3. Как установить отношения? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 12-4. Как использовать композицию? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 12-5. Как выполнять CRUD-îïåðàöèè доменных êëàññîâ? . . . . . . . . . . . 279 12-6. Как выполнять запросы с использованием GORM? . . . . . . . . . . . . 282 12-7. Как использовать динамические ôàéíäåðû? . . . . . . . . . . . . . . . . . . 283 12-8. Как использовать êðèòåðèè? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 12-9. Как использовать HQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 12-10. Как использовать наследование? . . . . . . . . . . . . . . . . . . . . . . . . . . 289 12-11. Что такое оптимистическое и пессимистическое блокирование? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 12-12. Как использовать ñîáûòèÿ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 12-13. Как использовать метки âðåìåíè? . . . . . . . . . . . . . . . . . . . . . . . . . 293 12-14. Как использовать кэширование? . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 12-15. Как использовать пользовательский идентификатор базы äàííûõ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 12-16. Как использовать составной первичный êëþ÷? . . . . . . . . . . . . . . . 296 12-17. Как добавить индекс к ïîëþ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 ГЛАВА 13 Скафолдинг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 13-1. Как использовать динамический скафолдинг? . . . . . . . . . . . . . . . . 300 13-2. Как динамически выполнить скафолдинг отношений? . . . . . . . . . . 303 13-3. Как настроить созданные представления? . . . . . . . . . . . . . . . . . . . . 306 13-4. Какие в Grails есть встроенные ограничения? . . . . . . . . . . . . . . . . . 310 13-5. Как переопределить в рамках скафолдинга экшены и представления? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 13-6. Как использовать статический скафолдинг? . . . . . . . . . . . . . . . . . . 317 13-7. Как изменить шаблоны скафолдинга? . . . . . . . . . . . . . . . . . . . . . . . 321 13-8. Как добавить собственный редактор ñâîéñòâ? . . . . . . . . . . . . . . . . 322 13-9. Как использовать скафолдинг с классами, отображ¸нными с помощью Hibernate? . . . . . . . . . . . . . . . . . . . . . . . . . 326 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 xiii
Стр.14
xiv ■ СОДЕРЖАНИЕ ГЛАВА 14 Безопасность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 14-1. Как защитить приложение от атак на основе SQL-èíúåêöèé? . . . . .329 14-2. Как защитить приложение от межсайтового скриптинга (XSS)? . . 330 14-3. Как использовать êîäåêè? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 14-4. Как ограничить методы HTTP-çàïðîñà, которые могут вызвать ýêøåí? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 14-5. Как в приложении реализовать аутентификацию? . . . . . . . . . . . . . 333 14-6. Как использовать плагин AcegiSecurity? . . . . . . . . . . . . . . . . . . . . . . 335 14-7. Как использовать OpenID? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 ГЛАВА 15 Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 15-1. Как выполнить модульное тестирование приложения? . . . . . . . . . 346 15-2. Как создать интеграционные òåñòû? . . . . . . . . . . . . . . . . . . . . . . . . . 350 15-3. Как выполнить тестирование методов render и redirect? . . . . . . . . 351 15-4. Как выполнить тестирование библиотек òåãîâ? . . . . . . . . . . . . . . . 353 15-5. Как выполнить тестирование доменных êëàññîâ? . . . . . . . . . . . . . . 354 15-6. Как создать функциональный тест с помощью Canoo WebTest? . . 356 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 ГЛАВА 16 Разнообразные советы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 16-1. Для чего нужен сервисный óðîâåíü? . . . . . . . . . . . . . . . . . . . . . . . . 359 16-2. Как в Grails можно использовать некоторые передовые возможности Spring? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 16-3. Как настроить приложение с помощью внешних ôàéëîâ? . . . . . . 366 16-4. Как в приложении настроить журналирование? . . . . . . . . . . . . . . . 369 16-5. Как использовать Grails вместе с Maven 2? . . . . . . . . . . . . . . . . . . . 370 16-6. Как использовать Grails вместе с REST? . . . . . . . . . . . . . . . . . . . . . . 372 16-7. Как в Grails создать Web-ñåðâèñû SOAP с помощью CXF? . . . . . . . 375 Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Стр.15

Облако ключевых слов *


* - вычисляется автоматически