SlideShare a Scribd company logo
1 of 38
                                                                    胡键 Grails:下一代Java Web开发框架
Java Web开发者之惑 选择太多 Struts、WebWork、Struts2、Tapestry、GWT、Wicket、Spring、My Face……
Java Web开发者之惑 开发低效: 配置文件多、语法繁琐(XML) 常见功能仍需大量手工操作 安全、国际化、Layout、过滤器/拦截器、验证、URL映射、声明性事务、基本CRUD、ORM、Ajax…… Java作为开发语言的低表现力严重地影响开发速度
Java Web开发者之惑 缺乏对项目构建过程的直接支持 借助外部工具:Ant/Maven/Gradle 从头手工编写构建脚本 没有统一标准的构建任务框架 编译、预处理、打包、测试、部署…… 外部构建脚本难以直接切入项目构建的生命周期,如: 编译前/后 对于外部依赖缺乏好的管理
测试困难,TDD成本太高 Spring在这方面有相当大的改进 Java Web开发者之惑
对于Rails的开发者:羡慕、嫉妒、恨!
Grails将终结这一切!
Java领域的Rails 一句话介绍Grails
一站式的开发框架 开发、测试、部署,全程命令驱动 Grails的优势
平滑的学习曲线 语言:Groovy,最接近Java的动态语言,高表现力,致力于消除Java语言带来的噪音 建立于广泛采用的Java工具基础之上: Spring、Hibernate、Sitemesh、Quartz、Spring Security、Shiro、Lucene/Solr…… Grails的优势
Grails的优势 高生产率 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的优势
Grails的整体架构 摘自《 TheDefinitiveGuidetoGrails 》
安装:下载、解压、设置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 Grails快速上手
GrailsApp典型目录
Grails剖析 M:Domain Class 基于Hibernate POGO 易于测试 运行时动态注入持久化方法:save/list/delete ORM DSL 约束:简化验证 查询:动态查找器、Criteria DSL、HQL 事件&自动时戳 锁机制 乐观锁(缺省) 悲观锁,手工调用lock 编程性事务:withTransaction
V:GSP 类JSP语法,可直接使用JSP标签 GSP标签库 内置表现力强大的标签库 自定义标签库简单、方便 Template Layout Ajax:<g:remote>标签库 Grails剖析
Grails剖析 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映射规则 Grails剖析
Grails剖析 测试 支持 单元测试 集成测试 功能测试 create-*命令会自动创建测试类 运行测试:grails test-app 测试完毕将产生测试报告
Grails剖析 国际化 惯例简化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 Grails剖析
配置 Groovy DSL,语法简洁 conf目录 环境 隔离不同运行环境的配置 在不同环境下执行命令:  grails [environment] [command name] 缺省3个环境:dev、prod和test 自动化脚本 Grails剖析
解决Web应用常见安全问题 SQL注入:通过Domain Class存取数据 DoS:返回少量数据 跨站脚本/HTML/URL注入: 缺省对页面进行HTML转义 内置的链接标签(link、form、createLink、createLinkTo等)为防止代码注入会自动转义。 提供了codec,允许在呈现HTML、JavaScript和URL等数据时进行细粒度的转义。 Grails应用实践
按插件组织应用 Grails应用实践
敏捷开发环境:Git  + Jenkins + Artifactory Grails应用实践
测试 & 代码覆盖: Spock Geb Coverage Grails应用实践
代码质量:CodeNarc Grails应用实践
数据迁移:Db Migarition Grails应用实践
浅尝辄止,典型表现: 不读文档 不去了解Grails的底层支撑技术: JSP/Servlet、Spring、Hibernate…… 过于复杂的领域模型 错误的开发实践: 无版本控制、CI、测试…… 按照静态语言的思路编写程序 典型误区
Sky.com Wired.com LinkedIn 更多的案例: http://www.grails.org/Success+Stories 典型成功案例
Grails的工作趋势
未来路线图 支持多数据源 支持多数据源的两阶段提交 静态资源管理 测试完全支持Spock AST Transformation应用到插件开发中 数据迁移 OSGi jQuery成为缺省的js库 采用Gradle作为构建系统 ……
Groovy的生态系统 除了这些,几乎主流Java开源框架都支持Groovy。 其余请参考:http://groovy.codehaus.org/Modules
值得一提的两个框架
Matt Raible's JVM Web Framework Matrix https://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&hl=en&output=html
参考书目
Grails官方站点:http://grails.org Groovy Blogs:http://groovyblogs.org GroovyQ:http://www.groovyq.net 参考站点

More Related Content

What's hot

持續整合與單元測試
持續整合與單元測試持續整合與單元測試
持續整合與單元測試昱劭 劉
 
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10twMVC
 
Telligem 1_xss
Telligem  1_xssTelligem  1_xss
Telligem 1_xsspaitoubing
 
領域驅動設計
領域驅動設計領域驅動設計
領域驅動設計Clark
 
Ext Js开发指导
Ext Js开发指导Ext Js开发指导
Ext Js开发指导clong365
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎Gelis Wu
 
前端工程化与工具链实践
前端工程化与工具链实践前端工程化与工具链实践
前端工程化与工具链实践ucarticle
 
可扩展的架构设计
可扩展的架构设计可扩展的架构设计
可扩展的架构设计Bruce Dou
 
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪奕孝 陳
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)Jeff Chu
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4twMVC
 
第1章 软件测试概述
第1章 软件测试概述第1章 软件测试概述
第1章 软件测试概述Kerry Zhu
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16twMVC
 
哈佛公開課程_E-75 建構動態網站 第4講_SQL
哈佛公開課程_E-75 建構動態網站 第4講_SQL哈佛公開課程_E-75 建構動態網站 第4講_SQL
哈佛公開課程_E-75 建構動態網站 第4講_SQL奕孝 陳
 
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDDClark
 

What's hot (17)

持續整合與單元測試
持續整合與單元測試持續整合與單元測試
持續整合與單元測試
 
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10
 
Telligem 1_xss
Telligem  1_xssTelligem  1_xss
Telligem 1_xss
 
領域驅動設計
領域驅動設計領域驅動設計
領域驅動設計
 
Ext Js开发指导
Ext Js开发指导Ext Js开发指导
Ext Js开发指导
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎
 
前端工程化与工具链实践
前端工程化与工具链实践前端工程化与工具链实践
前端工程化与工具链实践
 
可扩展的架构设计
可扩展的架构设计可扩展的架构设计
可扩展的架构设计
 
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
打造完全免費的,JAVA專案持續整合環境_ 2013 java developer_day_by 李書豪
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
 
第1章 软件测试概述
第1章 软件测试概述第1章 软件测试概述
第1章 软件测试概述
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16
 
哈佛公開課程_E-75 建構動態網站 第4講_SQL
哈佛公開課程_E-75 建構動態網站 第4講_SQL哈佛公開課程_E-75 建構動態網站 第4講_SQL
哈佛公開課程_E-75 建構動態網站 第4講_SQL
 
[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD[DDD] 快快樂樂學DDD
[DDD] 快快樂樂學DDD
 

Viewers also liked

OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?foxgem
 
移动开发的性能优化
移动开发的性能优化移动开发的性能优化
移动开发的性能优化foxgem
 
Groovy:Candy for Java Developers
Groovy:Candy for Java DevelopersGroovy:Candy for Java Developers
Groovy:Candy for Java Developersfoxgem
 
OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?foxgem
 
持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术foxgem
 
DiscoverE Leading Kids Through A Successful Engineering Experience
DiscoverE Leading Kids Through A Successful Engineering ExperienceDiscoverE Leading Kids Through A Successful Engineering Experience
DiscoverE Leading Kids Through A Successful Engineering ExperienceDiscoverE
 

Viewers also liked (7)

OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?
 
移动开发的性能优化
移动开发的性能优化移动开发的性能优化
移动开发的性能优化
 
Groovy:Candy for Java Developers
Groovy:Candy for Java DevelopersGroovy:Candy for Java Developers
Groovy:Candy for Java Developers
 
OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?
 
持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术
 
Portafolio etp
Portafolio etpPortafolio etp
Portafolio etp
 
DiscoverE Leading Kids Through A Successful Engineering Experience
DiscoverE Leading Kids Through A Successful Engineering ExperienceDiscoverE Leading Kids Through A Successful Engineering Experience
DiscoverE Leading Kids Through A Successful Engineering Experience
 

Similar to Grails:下一代Java Web开发框架

Kiss开发平台简介
Kiss开发平台简介Kiss开发平台简介
Kiss开发平台简介cecepig
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍Jim Jiang
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)xzdbd
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)Duran Hsieh
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby建興 王
 
初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdfgdscnycu
 
zhuwenlongChinese
zhuwenlongChinesezhuwenlongChinese
zhuwenlongChineseWenlong Zhu
 
6.web 安全架构浅谈
6.web 安全架构浅谈6.web 安全架构浅谈
6.web 安全架构浅谈Hsiao Tim
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
前端开发的那些事儿
前端开发的那些事儿前端开发的那些事儿
前端开发的那些事儿jndream
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超drewz lin
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版Simen Li
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型裕波 周
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web FrameworkFred Chien
 
Rust Web之旅:新時代的後端開發.pdf
Rust Web之旅:新時代的後端開發.pdfRust Web之旅:新時代的後端開發.pdf
Rust Web之旅:新時代的後端開發.pdfBuckyChu
 

Similar to Grails:下一代Java Web开发框架 (20)

Kiss开发平台简介
Kiss开发平台简介Kiss开发平台简介
Kiss开发平台简介
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
 
初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf
 
zhuwenlongChinese
zhuwenlongChinesezhuwenlongChinese
zhuwenlongChinese
 
6.web 安全架构浅谈
6.web 安全架构浅谈6.web 安全架构浅谈
6.web 安全架构浅谈
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
前端开发的那些事儿
前端开发的那些事儿前端开发的那些事儿
前端开发的那些事儿
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超
 
全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版全端物聯網探索之旅 - 重點整理版
全端物聯網探索之旅 - 重點整理版
 
Android工作坊
Android工作坊Android工作坊
Android工作坊
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
 
Rust Web之旅:新時代的後端開發.pdf
Rust Web之旅:新時代的後端開發.pdfRust Web之旅:新時代的後端開發.pdf
Rust Web之旅:新時代的後端開發.pdf
 

Grails:下一代Java Web开发框架