Grails——下一代web开发框架
一、 Grails
(一)Why is grails
Problem we suffer(在web开发的过程中我们遇到的问题):
So much time editing configuration files, customizing web.xml files, writing injection definitions, tweaking build scripts, modifying page layouts, restarting apps on each change .
(在web开发中,我们需要编辑配置文件,配置web.xml文件,写依赖注入,重建脚本,修改页面布局,当修改代码时要重启服务。)
Grails is a next-generation Java web development framework that generates great developer productivity gains through theconfluence of a dynamic language, a Convention over Configuration philosophy, powerfully pragmatic supporting tools, and an agile perspective drawn from the best emerging web development paradigms.
(Grails 是下一代java web 开发框架,通过融合动态语言(Groovy),使用约定优于配置的方法,广泛结合务实的支撑工具(插件)。从敏捷的角度看,Grials 是最好的新兴的web 开发框架)
(二)what is Grails
Grails是一个full-stack框架,它借助于核心技术与相关的插件(plug-in)来解决Web开发中方方面面的问题,其中包括:
•易于使用的基于Hibernate的对象-关系映射(ORM)层
•称为Groovy Server Pages (GSP)的表现层技术
•基于Spring MVC的控制器层
•构建于Gant 上的命令行脚本运行环境
•内置Tomcat,grails2.0版内置为tomcat7.0
•利用内置的Spring 容器实现依赖注入
•基于Spring的MessageSource核心概念,提供了对国际化(i18n)的支持
•基于Spring事务抽象概念,实现事务服务层
借助于功能强大的Groovy动态语言和领域特定语言(Domain Specific Language,DSL),以上那些特性变得非常易用。
(二)grails feature
(1)convention over configuration 约定优于配置
(2)Scaffolding 手脚架
(3)Unit Testing 单元测试
(4)Grails Object Relational Mapping (GORM)
(5)Plug-ins (700多)
二、 Grails环境搭建
安装STS(SpringSource Tools Suite)插件, 再安装grails 和grails support。
安装完后在,STS插件的打开Dashboard窗口,选择Extension窗口,可以在find grails。进行安装grials和grails support
三、 GORM
1.1一对一:
单向: class Face { Nose nose} class Nose{}
双向: class Face{Nose nose} class Nose{Face face}
单向级联:class Face{ Nose nose} class Nose {static belogsTo=[face:Face]}
1.2一对多
class Author {static hasMany = [ books : Book ] String name }
class Book { String title }
如果你有两个相同类型的属性,他们都是一对多关系的多方,你必须用mappedBy来指定他们分别映射的是哪个集合:
class Airport {
static hasMany = [flights:Flight]
static mappedBy = [flights:"departureAirport"]
}
class Flight {
Airport departureAirport
Airport destinationAirport
}
如果你有多个映射到不同属性的集合,也需要这样:
class Airport {
static hasMany = [outboundFlights:Flight, inboundFlights:Flight]
static mappedBy = [outboundFlights:"departureAirport",inboundFlights:"destinationAirport"]
}
class Flight {
Airport departureAirport
Airport destinationAirport
}
1.3、多对多,只有一方可以管理关联关系。(本例为author)
class Book {
static belongsTo = Author
static hasMany = [authors:Author]
String title
}
class Author {
static hasMany = [books:Book]
String name
}
四、MVC
(0)groovy 语言简介
先简单介绍一下groovy 语言:
Groovy 是 一种JVM 语言,可以无缝隙的使用java的对象和类库 ,直接编译成java字节码。Groovy是运行时编译。
1、无需用“ ; ”做为语句的结尾。
2、无需setter 和getter。
3、Groovy will compile to bytecode at runtime 。
4、无需引入一些特殊的包。例如:Java.util.*,java.lang.*, java.net.*, java.io.*, groovy.lang.*, and groovy.util.*.
5、数组list,set,array,不存在越界,是一种循环数组,
6、数组声明:def list =[] ; def set = [] as Set ; def string = new String[3]
7、数组可以用 .add “要加入的数据” ,加入如数组; 也可以用左进符号,加入 << “要加入的数据”;
8、循环输出: list.each( println it) (默认it 为 iterator)
9、Map 定义 def map =[:];例子:def map =[‘a’:’adc’,’b’:’bbb’];取值 map.a,map.”a”或者,map.get(“a”)
10、用 ${name} 输出变量 name的值
11、def list = 0..9 可以循环输出
(1) M:领域类
static constraints ={
name(maxLength:50,black:false)
dateOfBirth(nullable:false)
gender(inList:[“M”,”F”])
email(maxLength:50,email:true)
}
常见约束类型
(2)C:控制器,默认下,以领域类的名称+controller命名
(1)Scope
•servletContext - Also known as application scope, this scope lets you share state across the entire web application. The servletContext is an instance of ServletContext
•session - The session allows associating state with a given user and typically uses cookies to associate a session with a client. The session object is an instance of HttpSession
•request - The request object allows the storage of objects for the current request only. The request object is an instance of HttpServletRequest
•params - Mutable map of incoming request query string or POST parameters
•flash - Grails supports the concept of flash scope as a temporary store to make attributes available for this request and the next request only. Afterwards the attributes are cleared. This is useful for setting a message directly before redirecting
(2)scoped Controllers
A、prototype(default) B、session C、singleton
在controller中用下面的句子即可定义范围
Static scope =”singleton”
(3)V:展示。默认下,在view包下的以领域类命名的包下面的gsp文件。
1、标签库
使用丰富的GSP标签库,也可以再GSP页面嵌套JSP语言。
跟JSP一样,GSP也支持自定义标签。
2、页面布局
可以创建页面布局Layout文件,丢到views/layouts中即可,后缀还是.gsp。
3、页面模板
创建页面Templates,命名规则views/领域类名称/_领域类名称Template.gsp
页面调用:
<g:render template="bookTemplate" model="[book: myBook]" />
五、Service
(1)事务管理
Grails中可以对service进行事务划分,它声明service中所有方法都是事务型的。缺省所有的service都进行了事务划分。要禁用这个配置,只需要设置transactional 属性为false即可
你需要更细粒度的交易控制或需要指定另类传播级别的时候,Grails也支持Spring的 Transactional注释。
(2)依赖注入:只需在需要注入的domain,controller,service中使用def
class AuthorService {
def bookService
}
六、过滤器
1、要创建一个过滤器,只需要在grails-app/conf目录下创建一个符合规约以Filters结尾的类即可。在此类中,定义一个名为filters的代码块,用以包含过滤器的定义 class ExampleFilters {
def filters = {
// your filters here
}
}
filters代码块内的每一个过滤器有一个名称和作用域。名称就是其方法名,作用域是通过命名参数定义的
sampleFilter(controller:'*', action:'*') {
// interceptor definitions
}
2、过滤器类型:
•before - 在操作之前执行。返回值false表示响应已经被符合条件的过滤器处理过,并且其操作不被执行
•after - 在操作之后执行。其第一个参数为视图模型(view model),并且允许在渲染视图之前修改此模型
•afterView - 在渲染视图之后执行。如果有异常发生,其第一个参数为一个非null的异常。注意:此闭包在应用布局以前被调用。
class SecurityFilters {
def filters = {
loginCheck(controller: '*', action: '*') {
before = {
if (!session.user && !actionName.equals('login')) {
redirect(action: 'login')
return false
}
}
}
}
}
- 大小: 42.7 KB
分享到:
相关推荐
Grails 是一个基于 Java 平台的开源Web开发框架,它旨在简化Web应用程序的构建过程。Grails 采用了敏捷开发的思想,遵循“约定优于配置”(Convention Over Configuration)和“不要重复自己”(Don’t Repeat ...
自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。
自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。...我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。
《Grails技术精解与Web开发实践11-20章》是一本专注于Grails框架的深度解析书籍,尤其适合初学者和希望提升Grails开发技能的IT从业者。Grails是一种基于Groovy语言的开源Web应用框架,它以其高效、灵活和强大的特性...
《Grails技术精解与Web开发实践2-10章》是针对Grails框架的一份珍贵资源,适合初学者及有经验的开发者深入理解并掌握Grails技术。这本书的章节涵盖了从基础到进阶的多个方面,旨在帮助读者全面了解和运用Grails进行...
Grails是一个基于Groovy语言的全栈Web应用开发框架,它遵循敏捷开发的理念,并且简化了基于Java的Web开发。Grails的核心是基于约定优于配置的原则,它提供了一套自动化的方式来处理项目的结构、数据持久化和Web层的...
自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。
grails1.0开发框架4 类似于ruby on rails的框架。
Grails是一个基于Groovy语言构建的开源MVC(Model-View-Controller)Web开发框架,以其高效的开发速度和简洁的代码著称。其核心优势在于: 1. **快速开发**:得益于Groovy的动态特性和“一栈式”设计,Grails能显著...
Grails 是一种基于 Groovy 的开源应用框架,用于简化 Web 应用程序的开发过程。它采用约定优于配置的原则,这使得开发者可以更快地创建功能丰富的 Web 应用程序。Grails 的设计灵感来源于 Ruby on Rails,它不仅继承...
总之,Grails作为一款强大的企业Web开发框架,提供了高效、简洁的开发体验。通过熟练掌握其开发环境配置、开发实践及部署策略,开发者可以快速构建出高质量的企业级Web应用。在实际工作中,结合最佳实践,能够进一步...
Grails企业web应用开发与部署.pdf 很好的资源
grails1.0开发框架3 类似于ruby on rails的框架。
Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。 Grails这个独特的框架被视为是提升工程师生产效率的动态工具,因为其...
### Grails快速开发Web应用程序知识点解析 #### 一、Grails框架...通过上述内容,我们可以看到Grails不仅是一个高效的Web开发框架,而且还拥有丰富的特性和强大的社区支持,非常适合希望提高Web开发效率的开发者们。
grails1.0开发框架1 类似于ruby on rails的框架。
Grails,一个基于Groovy动态语言的开源MVC框架,为Web开发提供了高效且简洁的解决方案。自2007年发布以来,Grails以其快速开发能力,降低了Web应用的复杂性,吸引了众多开发者。本文将引导读者深入理解Grails的基本...
新型的idea、比Eclipse和MyEclipse更实用,只是现在还没有发展起来,也是一种编译的工具,为了以后的发展可以学习一下!
grails1.0开发框架5 类似于ruby on rails的框架。