Spring-Boot-与-Grails-3相结合可以完成什么?,你会的还只有初级工程师的技术吗

运行应用程序

运行Grails应用程序最直接的方式是在命令行里使用grails工具的run-app命令:

$ grails run-app

就算一行代码都还没写,我们也能运行应用程序,在浏览器里进行访问。一旦应用程序启动,就可以在浏览器里访问http://localhost:8080。你应该能看到类似下图的页面。

全新的Grails应用程序

在Grails里运行应用程序要使用run-app命令,这种方式已经用了很多年,上个版本的Grails也是这样。Grails 3项目的Gradle说明里使用了Spring Boot的Gradle插件,你还可以用各种运行Spring Boot项目的方式来运行这个应用程序。此处通过Gradle引入了bootRun任务:

$ gradle bootRun

你还可以构建项目,运行生成的可执行JAR文件:

$ gradle build

$ java -jar build/lib/readingList-0.1.jar

当然,构建产生的WAR文件可以部署到你喜欢的各种Servlet 3.0容器里。

在开发早期就能运行应用程序,这一点十分方便,能帮你确认应用程序已正确初始化。但是这时应用程序还没做什么有意思的事情,在初始化后的项目上做什么完全取决于我们。接下来,开始定义领域模型吧。

二、定义领域模型

阅读列表应用程序里的核心领域模型是Book类。虽然我们可以手工创建Book.groovy文件,但通常还是用grails工具来创建领域模型类比较好。因为它知道该把文件放到哪里,并且能在同一时间生成各种相关内容。

要创建Book类,我们会使用grails工具的create-domain-class命令:

$ grails create-domain-class Book

这条命令会生成两个源文件:一个Book.groovy文件和一个BookSpec.groovy文件。后者是一个Spock说明,用来测试Book类。一开始这个文件是空的,你可以填入各种测试内容来验证Book的各种功能。

Book.groovy文件里定义了Book类,你可以在 grails-app/domain/readingList里找到这个文件。它一开始基本没什么内容:

package readinglist
class Book {
static constraints = {
}
}

我们需要添加一些字段来定义一本书,比如书名、作者和ISBN。在添加了这些字段后,Book.groovy看起来是这样的:

package readinglist
class Book {
static constraints = {
}
String reader
String isbn
String title
String author
String description
}

静态的constraints变量里可以定义各种附加在Book实例上的验证约束。本章中,我们主要 关注阅读列表应用程序的构建,看看如何基于Spring Boot构建应用程序,不会太关注验证的问题。 因此,这里的constraints内容为空。当然,如果有需要的话,你可以随意添加约束。可以参考 一下Grails in ActionSecond Edition,作者是Glen Smith和Peter Ledbrook。

为了使用Grails,我们要保持阅读列表应用程序的简洁,要和之前写的程序一致。因此,接下来我们要创建Reader领域模型,还有控制器。

三、开发 Grails 控制器

有了领域模型,通过grails工具创建出控制器就很容易了。关于控制器,有几个命令可供选择。

  • create-controller:创建空控制器,让开发者来编写控制器的功能。
  • generate-controller:生成一个控制器,其中包含特定领域模型类的基本CRUD操作。
  • generate-all:生成针对特定领域模型类的基本CRUD控制器,及其视图。

脚手架控制器很好用,也是Grails中比较知名的特性,但我们仍然会保持简洁,写一个仅包含必要功能的控制器,能匹配之前写的应用程序功能就好。因此,我们用create-controller命令来创建原始的控制器,然后填入所需的方法。

$ grails create-controller ReadingList

这个命令会在 grails-app/controllers/readingList里创建一个名为ReadingListController的控制器:

package readinglist
class ReadingListController {
def index() { }
}

一行代码都不用改,这个控制器就能运行了,虽然它干不成什么事。此时,它能处理发往 /readingList的请求,将请求转给 grails-app/views/readingList/index.gsp里定义的视图(现在还没有,我们稍后会创建的)。

我们需要控制器来显示图书列表,还有添加新书的表单。我们还需要提交表单,将新书保存到数据库里的功能。下面的代码就是我们所需要的ReadingListController。

package readinglist
import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional
class ReadingListController {
def index() {
respond Book.list(params), model:[book: new Book()]
}
@Transactional
def save(Book book) {
book.reader = ‘Craig’
book.save flush:true
redirect(action: “index”)
}
}

虽然相比等效的Java控制器,代码长度大幅缩短,但这个版本的ReadingListController功能已经基本完整。它可以处理发往/readingList的GET请求,获取并展示图书列表。在表单提交后,它还会处理POST请求,保存图书,随后重定向回index动作(由index()方法来处理)。

太不可思议了,我们已经基本完成了Grails版本的阅读列表应用程序。剩下的就是创建一个视图,显示图书列表和表单。

四、创建视图

Grails应用程序通常都用GSP模板来

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

开源分享完整内容戳这里

做视图。

我们要做的是,利用Grails提供的布局设施,将公共的设计风格运用到整个应用程序里。

Reading List

Your Reading List

${book.title} by ${book.author} (ISBN: ${book.isbn}")
${book.description} No description available

You have no books in your book list


Add a book





value="${book?.isbn}"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值