This article contains promotional content. (October 2010) |
Разработчик(и) | Грэм Роше |
---|---|
Первоначальный выпуск | Октябрь 2005 г. |
Стабильный релиз | 6.2.2 [1] / 2024-11-20 |
Репозиторий | Репозиторий Grails |
Написано в | Круто |
Операционная система | Кроссплатформенный |
Платформа | Кроссплатформенность ( JVM ) |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | grails.org |
Grails — это фреймворк веб-приложений с открытым исходным кодом , использующий язык программирования Apache Groovy [2] : 757, §18 (который, в свою очередь, основан на платформе Java ). Он призван стать высокопроизводительным фреймворком, следуя парадигме « кодирования по соглашению », предоставляя автономную среду разработки и скрывая большую часть деталей конфигурации от разработчика. [ необходима цитата ]
Grails ранее был известен как «Groovy on Rails»; в марте 2006 года это название было отменено в ответ на просьбу Дэвида Хайнемайера Ханссона , основателя фреймворка Ruby on Rails . [3] Работа началась в июле 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 использует контроллеры для реализации поведения веб-страниц. Ниже приведен пример контроллера:
класс BookController { def list () { [ книги: Книга . список () ] } }
Контроллер выше имеет list
действие, которое возвращает модель, содержащую все книги в базе данных. Для создания этого контроллера grails
используется команда, как показано ниже:
Книга создания-контроллера Grails
Эта команда создает класс в grails-app/controller
каталоге проекта Grails. Создание класса контроллера достаточно для того, чтобы Grails распознал его. list
Действие отображается http://localhost:8080/book/list
в режиме разработки.
Grails поддерживает JSP и GSP. В примере ниже показано представление, написанное на GSP, в котором перечислены книги в модели, подготовленной контроллером выше:
<html> <head> <title> Наши книги </title> </head> <body> <ul> <g:each in= "${books}" > <li> ${it.title} (${it.author.name}) </li> </g:each> </ul> </body> </html>
Это представление должно быть сохранено как grails-app/views/book/list.gsp
проект Grails. Это местоположение соответствует действию BookController
и list
. Поместить файл в это местоположение достаточно, чтобы Grails распознал его.
Также доступна ссылка на тег GSP.
Grails предоставляет большое количество библиотек тегов «из коробки». [2] : 758-763, §18-2 Однако вы также можете легко создавать и повторно использовать свои собственные библиотеки тегов [2] : 792, §18-13 : [4]
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
библиотеку тегов:
<g:formatDate format="yyyyMMdd" date="${myDate}"/>
Для использования динамической библиотеки тегов в GSP не нужно использовать импортные теги. Динамические библиотеки тегов также можно использовать в файлах JSP, хотя это требует немного больше работы. [1] Архивировано 2010-10-17 на Wayback Machine
Модель домена в Grails сохраняется в базе данных с помощью GORM (Grails Object Relational Mapping). Классы домена сохраняются в каталоге grails-app/domain
и могут быть созданы с помощью grails
команды, как показано ниже:
Grails создать-домен-класс Книга
Book
Эта команда запрашивает имя класса домена и создает соответствующий файл. Ниже показан код класса :
класс Книга { Строка название Человек автор }
Создание этого класса — все, что требуется для управления им для сохранения с помощью Grails. В Grails 0.3 GORM был улучшен и, например, добавляет свойства id и version к классу домена, если они отсутствуют. Свойство id используется как первичный ключ соответствующей таблицы. Свойство version используется для оптимистической блокировки.
Когда класс определен как класс домена, то есть класс, управляемый GORM, методы динамически добавляются для помощи в сохранении экземпляров класса. [2] Архивировано 19 октября 2010 г. на Wayback Machine
Метод save()
сохраняет объект в базе данных:
def book = new Book ( title: "The Da Vinci Code" , author: Author . findByName ( "Dan Brown" )) book . save ()
Метод delete()
удаляет объект из базы данных:
def book = Book.findByTitle ( " Код да Винчи " ) book.delete ( )
Метод refresh()
обновляет состояние объекта из базы данных:
def book = Book.findByTitle ( " Код да Винчи " ) book.refresh ( )
Метод ident()
извлекает идентификатор объекта, назначенный из базы данных:
def book = Book.findByTitle ( " Код да Винчи " ) def id = book.ident ( )
Метод count()
возвращает количество записей в базе данных для заданного класса:
def bookCount = Книга . count ()
Метод exists()
возвращает значение true, если в базе данных существует объект с указанным идентификатором:
def bookExists = Книга . существует ( 1 )
Метод find()
возвращает первый объект из базы данных на основе оператора запроса объекта:
def book = Book . find ( "из Книги b, где b.title = ?" , [ 'Код да Винчи' ])
Обратите внимание, что синтаксис запроса — Hibernate HQL .
Метод findAll()
возвращает все объекты, существующие в базе данных:
def books = Книга . findAll ()
Метод findAll()
также может принимать оператор запроса объекта для возврата списка объектов:
def books = Книга . findAll ( "из Книги" )
Методы findBy*()
возвращают первый объект из базы данных, соответствующий определенному шаблону:
def book = Book . findByTitle ( "Код да Винчи" )
Также:
def book = Book . findByTitleLike ( "%Да Винчи%" )
Методы findAllBy*()
возвращают список объектов из базы данных, соответствующих определенному шаблону:
def books = Book . findAllByTitleLike ( "The%" )
Методы findWhere*()
возвращают первый объект из базы данных, который соответствует набору именованных параметров:
def book = Book . findWhere ( title: "Код да Винчи" )
Grails поддерживает скаффолдинг для поддержки операций CRUD (создание, чтение, обновление, удаление). Любой класс домена может быть скаффолдирован путем создания контроллера скаффолдинга, как показано ниже:
класс BookController { static scaffold = true }
Создав этот класс, вы можете выполнять операции CRUD на http://localhost:8080/book
. Это работает, поскольку BookController следует тому же соглашению об именовании, что и класс домена Book. Чтобы создать каркас определенного класса домена, мы могли бы ссылаться на класс непосредственно в свойстве каркаса:
класс SomeController { static scaffold = Книга }
В настоящее время Grails не предоставляет поддержку ассоциациям.
Механизм сохранения в GORM реализован через Hibernate . Таким образом, устаревшие базы данных могут быть сопоставлены с классами GORM с использованием стандартных файлов сопоставления Hibernate.
Целевая аудитория Grails:
Grails построен на платформе Java и является ее частью, что делает его очень простым для интеграции с библиотеками Java, фреймворками и существующими кодовыми базами. Grails предлагает прозрачную интеграцию классов, которые сопоставлены с фреймворком Hibernate ORM . Это означает, что существующие приложения, использующие Hibernate, могут использовать Grails без перекомпиляции кода или перенастройки классов Hibernate, используя при этом методы динамического сохранения, описанные выше. [3] Архивировано 2011-07-16 в Wayback Machine
Одним из следствий этого является то, что scaffolding может быть настроен для классов Java, сопоставленных с Hibernate. Другим следствием является то, что возможности веб-фреймворка Grails полностью доступны для этих классов и приложений, которые их используют.
Grails также использует Spring Inversion of Control Framework; Grails на самом деле является приложением Spring MVC под капотом. [5] Фреймворк Spring может использоваться для предоставления дополнительных бинов Spring и введения их в контекст приложения. Фреймворк SiteMesh используется для управления уровнем представления, упрощая разработку страниц с помощью надежной системы шаблонов. [6]
Приложения Grails упакованы как военные артефакты, которые могут быть развернуты в любом контейнере сервлетов или серверах приложений Java EE . [2] : 763, §18-2
This article includes a list of general references, but it lacks sufficient corresponding inline citations. (October 2012) |