Разработчик (и) | |
---|---|
Первоначальный выпуск | Октябрь 2005 г. |
Стабильная версия | 4.0.2 / 21 февраля 2020 г.; 8 месяцев назад (21.02.2020) |
Репозиторий | Репозиторий Grails |
Написано на | Groovy |
Операционная система | Кросс-платформенность |
Платформа | Кросс-платформенность (JVM ) |
Тип | Платформа веб-приложений |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | grails.org |
Grails представляет собой среду веб-приложений с открытым исходным кодом , которая использует язык программирования Apache Groovy (который, в свою очередь, основан на платформе Java ). Он задуман как высокопроизводительный фреймворк, следуя парадигме «кодирование по соглашению », обеспечивая автономную среду разработки и скрывая большую часть деталей конфигурации от разработчика.
Ранее Grails назывался "Groovy on Rails"; в марте 2006 г. это название было отказано в ответ на запрос Дэвида Хайнемайера Ханссона, основателя фреймворка Ruby on Rails. Работа началась в июле 2005 г., с выпуском 0.1 29 марта 2006 г. и выпуском 1.0, анонсированным в феврале 18 января 2008 г.
Grails был разработан для решения ряда задач:
Grails имеет три свойства, которые отличают его от традиционных веб-фреймворков Java:
Создание веб-приложений на Java традиционно включает настройка окружений и фреймворков в начале и во время разработки. Эта конфигурация очень часто передается в XML-файлы, чтобы упростить настройку и избежать встраивания конфигурации в код приложения.
Первоначально XML приветствовался, поскольку он обеспечивал большую согласованность при настройке приложений. Однако в последние годы стало очевидно, что, хотя XML отлично подходит для настройки, настройка среды может быть утомительной. Это может снизить продуктивность, поскольку разработчики тратят время на понимание и поддержку конфигурации инфраструктуры по мере роста приложения. Добавление или изменение функциональности в приложениях, использующих конфигурацию XML, добавляет дополнительный шаг к процессу изменения, что снижает производительность и может снизить гибкость всего процесса.
Grails избавляет от необходимости добавлять конфигурацию в файлы XML. Вместо этого структура использует набор правил или соглашений при проверке кода приложений на основе Grails. Например, имя класса, которое заканчивается на Controller
(например, BookController
), считается веб-контроллером.
При использовании традиционных наборов веб-инструментов Java разработчики должны собирать единицы разработки, что может быть утомительным. Grails предоставляет среду разработки, которая включает веб-сервер, чтобы разработчики могли сразу начать работу. Все необходимые библиотеки являются частью дистрибутива Grails, и Grails автоматически подготавливает веб-среду Java к развертыванию.
Grails предоставляет динамические методы для нескольких классов через миксины. Примесь - это метод, который динамически добавляется к классу, как если бы функциональность была скомпилирована в программу.
Эти динамические методы позволяют разработчикам выполнять операции без необходимости реализации интерфейсов или расширения базовых классов. Grails предоставляет динамические методы в зависимости от типа класса. Например, в доменных классах есть методы для автоматизации операций сохранения, таких как сохранение, удаление и поиск
Веб-инфраструктура Grails была разработана в соответствии с парадигмой MVC.
Grails использует контроллеры для реализации поведения веб-страниц. Ниже приведен пример контроллера:
class BookController {def list () {[books: Book.list ()]}}
Контроллер выше имеет действие list
, которое возвращает модель, содержащая все книги в базе данных. Для создания этого контроллера используется команда grails
, как показано ниже:
grails create-controller Book
Эта команда создает класс в приложении grails-app / controller
каталог проекта Grails. Создание класса контроллера достаточно, чтобы Grails распознал его. Действие list
соответствует http: // localhost: 8080 / book / list
в режиме разработки.
Grails поддерживает JSP и GSP. В приведенном ниже примере показано представление, написанное на GSP, в котором перечислены книги в модели, подготовленной указанным выше контроллером:
Наши книги
Это view следует сохранить как grails-app / views / book / list.gsp
проекта Grails. Это расположение соответствует действию BookController
и list
. Размещение файла в этом месте достаточно, чтобы Grails распознал его.
Также доступна ссылка на тег GSP .
Grails предоставляет большое количество готовых решений. Однако вы также можете легко создавать и повторно использовать свои собственные библиотеки тегов:
class ApplicationTagLib {def formatDate = {attrs, body ->out << new java.text.SimpleDateFormat(attrs.format).format(attrs.date) } }
Библиотека тегов formatDate
выше форматирует java.util.Date
объект в String
. Эта библиотека тегов должна быть добавлена в файл grails-app / taglib / ApplicationTagLib.groovy
или файл, заканчивающийся на TagLib.groovy
в grails-app / taglib
каталог.
Ниже приведен фрагмент из файла GSP, в котором используется библиотека тегов formatDate
:
Для использования библиотеки динамических тегов в GSP не требуется использовать теги импорта. Библиотеки динамических тегов также можно использовать в файлах JSP, хотя для этого потребуется немного больше работы. [1]
Модель предметной области в Grails сохраняется в базе данных с помощью GORM (реляционное сопоставление объектов Grails). Классы домена сохраняются в каталоге grails-app / domain
и могут быть созданы с помощью команды grails
, как показано ниже:
grails create-domain-class Book
Эта команда запрашивает имя класса домена и создает соответствующий файл. Ниже показан код класса Book
:
class Book {String title Person author}
Создание этого класса - это все, что требуется для управления им для сохранения с помощью Grails. В Grails 0.3 GORM был улучшен и, например, добавляет идентификатор свойств и саму версию в класс домена, если они отсутствуют. Свойство id используется как первичный ключ соответствующей таблицы. Свойство версии используется для оптимистической блокировки.
Когда класс определен как класс предметной области, то есть управляемый GORM, методы динамически добавляются для помощи в сохранении экземпляров класса. [2]
Метод save ()
сохраняет объект в базе данных:
def book = new Book (название: "The Da Код Винчи », автор: Author.findByName (« Дэн Браун »)) book.save ()
Метод delete ()
удаляет объект из базы данных:
def book = Book. findByTitle ("Код да Винчи") book.delete ()
Метод refresh ()
обновляет состояние объекта из базы данных:
def book = Book.findByTitle ("The Код да Винчи ") book.refresh ()
Метод identity ()
извлекает идентификатор объекта, присвоенный из базы данных:
def book = Book.findByTitle (« Код да Винчи ») def id = book.ident ()
Метод count ()
возвращает количество записей в базе данных для данного класса:
def bookCount = Book.count ()
Метод exists ()
возвращает true, если в базе данных существует объект с заданным идентификатором:
def bookExists = Book.exists (1)
fi Метод nd ()
возвращает первый объект из базы данных на основе оператора запроса объекта:
def book = Book.find ("из Книги b, где b.title =?", ['Код да Винчи' ])
Обратите внимание, что синтаксис запроса - Hibernate HQL.
Метод findAll ()
возвращает все объекты, существующие в базе данных:
def books = Book.findAll ()
Метод findAll ()
также может принимать оператор запроса объекта для возврата списка объектов:
def books = Book.findAll ("from Book")
findBy * ()
методы возвращают первый объект из базы данных, который соответствует определенному шаблону:
def book = Book.findByTitle ("Код да Винчи")
Также:
def book = Book. findByTitleLike ("% Da Vinci%")
Методы findAllBy * ()
возвращают список объектов из базы данных, соответствующих определенному шаблону:
def books = Book.findAllByTitleLike ("The % ")
Методы findWhere * ()
возвращают первый объект из базы данных, который соответствует набору именованных параметров. :
def book = Book.findWhere (заголовок: «Код да Винчи»)
Grails поддерживает скаффолдинг для поддержки операций CRUD ( Создать, прочитать, обновить, удалить). Любой доменный класс может быть сформирован путем создания контроллера строительных лесов, как показано ниже:
class BookController {static scaffold = true}
Создав этот класс, вы можете выполнять операции CRUD на http: // localhost: 8080 / книга
. Это работает, потому что BookController следует тому же соглашению об именах, что и класс домена Book. Чтобы сформировать определенный класс домена, мы могли бы ссылаться на класс непосредственно в свойстве scaffold:
class SomeController {static scaffold = Book}
В настоящее время Grails не предоставляет каркаса для ассоциаций.
Механизм сохранения в GORM реализован через Hibernate. Таким образом, унаследованные базы данных могут быть сопоставлены с классами GORM с помощью стандартных файлов сопоставления Hibernate.
Целевая аудитория Grails:
Grails построен на платформе Java и является ее частью, что означает, что это очень просто для интеграции с библиотеками, фреймворками и существующими кодовыми базами Java. Grails предлагает прозрачную интеграцию классов, отображаемых с помощью структуры Hibernate ORM. Это означает, что существующие приложения, использующие Hibernate, могут использовать Grails без перекомпиляции кода или перенастройки классов Hibernate при использовании методов динамического сохранения, описанных выше. [3]
Одним из следствий этого является то, что каркас может быть настроен для классов Java, отображаемых с помощью Hibernate. Другим следствием является то, что возможности веб-фреймворка Grails полностью доступны для этих классов и приложений, которые их используют.
Grails также использует структуру Spring Inversion of Control Framework; На самом деле Grails - это скрытое приложение Spring MVC. Инфраструктуру Spring можно использовать для предоставления дополнительных компонентов Spring и внедрения их в контекст приложения. Платформа SiteMesh используется для управления уровнем представления, упрощая разработку страниц с помощью надежной системы шаблонов.
Приложения Grails упакованы как военные артефакты, которые можно развернуть в любом контейнере сервлетов или Серверы приложений Java EE.