Grails:下一代Java Web开发框架
-
Upload
foxgem -
Category
Technology
-
view
4.772 -
download
6
Transcript of Grails:下一代Java Web开发框架
开发低效:
配置文件多、语法繁琐
(XML)
常见功能仍需大量手工操作
安全、国际化、Layout、过滤
器/拦截器、验证、URL映射、声明性事务、基本CRUD、ORM、Ajax……
Java作为开发语言的低表现力
严重地影响开发速度
缺乏对项目构建过程的直接支持 借助外部工具:
Ant/Maven/Gradle 从头手工编写构建脚本
没有统一标准的构建任务框架 编译、预处理、打包、测试、部署……
外部构建脚本难以直接切入项目构建的生命周期,如: 编译前/后
对于外部依赖缺乏好的管理
平滑的学习曲线
语言:Groovy,最接近Java的动态语言,高表现力,致
力于消除Java语言带来的噪音
建立于广泛采用的Java工具基础之上:
Spring、Hibernate、Sitemesh、Quartz、Spring Security、Shiro、Lucene/Solr……
高生产率 Groovy的高表现力 CoC消除了80%的配置工作量
Scaffolding消除了大量的手工劳动
结合自动化脚本可进一步提高工作效率
大量企业应用中常见功能的DSL GORM、Job、Action、
Validation、i18n、Filter、Interception、Layout、Template、TagLib、GSP……
大量可用的Plugin
TDD不再是梦
直接支持DDD
Web 2.0/REST
保护遗留资产
其他 商业友好的开源许可证:Apache License, 2.0
商业公司的支持:VMWare
活跃的社区
社区快报:This Week in Grails(中文版:Grails每周观察)
安装:下载、解压、设置GRAILS_HOME
5分钟的例子:简单的用户CRUD grails create-app user
cd user
grails create-domain-class user
添加User对象的属性:name、address
grails generate-all user
grails run-app
http://localhost:8080/user
M:Domain Class 基于Hibernate
POGO 易于测试
运行时动态注入持久化
方法:save/list/delete
ORM DSL
约束:简化验证
查询:动态查找器、
Criteria DSL、HQL
事件&自动时戳
锁机制
乐观锁(缺省)
悲观锁,手工调用lock
编程性事务:
withTransaction
C:Controller Action
Interceptor before和after
设置拦截条件
数据绑定
Command Object
XML & JSON响应
典型方法:render、redirect、chain
可限制允许访问的
HTTP方法
内置REST支持
内容协商
内置对Web Flow的支持
其他重要组件
Service 封装涉及多个Domain Class的业务逻辑
事务:声明性(缺省)和编程性
Filter 跨Controller拦截请求
3种类型: before、after和afterView
URL Mapping 自定义URL映射规则
国际化
惯例简化i18n: default.null.message
消息保存于Message Bundle: messages(_Locale).properties
支持自动切换Locale: Request Header:Accept-
Language
支持手动切换Locale用于测
试:
/book/list?lang=es
标签库:<g:message>
Plugin
Grails的主要扩展点
可以动态地给类MixIn。
Plugin工程 = Grails普通工程 + 描述文件
零配置
简化功能在不同应用间的共享
现有Grails社区的插件(> 600): http://www.grails.org/plugin/category/all
配置 Groovy DSL,语法简洁
conf目录
环境
隔离不同运行环境的配置
在不同环境下执行命令:
grails [environment] [command name]
缺省3个环境:dev、prod和test
自动化脚本
解决Web应用常见安全问题
SQL注入:通过Domain Class存取数据
DoS:返回少量数据
跨站脚本/HTML/URL注入: 缺省对页面进行HTML转义
内置的链接标签(link、form、createLink、createLinkTo等)为防止代码注入会自动转义。
提供了codec,允许在呈现HTML、JavaScript和URL等数据时进行细粒度的转义。
浅尝辄止,典型表现:
不读文档
不去了解Grails的底层支撑技术:
JSP/Servlet、Spring、Hibernate……
过于复杂的领域模型
错误的开发实践:
无版本控制、CI、测试……
按照静态语言的思路编写程序
支持多数据源 支持多数据源的两阶段提交
静态资源管理
测试完全支持Spock AST Transformation应用到插件开发中
数据迁移 OSGi jQuery成为缺省的js库 采用Gradle作为构建系统
……
https://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&hl=en&output=html