其他分享
首页 > 其他分享> > Spring-Boot-与-Grails-3相结合可以完成什么?

Spring-Boot-与-Grails-3相结合可以完成什么?

作者:互联网

**Grails一直都是构建于Spring、Groovy、Hibernate和其他巨人肩膀之上的高阶框架。**到了Grails 3,Grails已经基于Spring Boot,带来了令人愉悦的开发体验。Grails开发者和Spring Boot开发者都能驾轻就熟。

要使用Grails 3,首先要进行安装。在Mac OS X和大部分Unix系统上,最简单的安装方法是在命令行里使用SDKMAN:

$ sdk install grails

如果你用的是Windows,或者无法使用SDKMAN,就需要下载二进制发布包。解压后要将bin 目录添加到系统路径里去。

无论用哪种安装方式,你都可以在命令行中查看Grails的版本,验证安装是否成功:

$ grails -version

如果安装成功,现在就可以创建Grails项目了。

一、创建新的 Grails 项目

在Grails项目中,你会使用grails命令行工具执行很多任务,包括创建项目。要创建阅读列表项目,可以这样使用grails命令:

$ grails create-app readinglist

正如这个命令的名字所示,create-app创建了新的应用程序项目。这个例子里的项目名为 readinglist。

等grails工具创建完应用程序,cd到了readinglist目录里,看看所创建的内容吧。下图应该就是你看到的项目结构的概览。

在这个项目目录结构里,你应该认出了一些熟悉的东西。这里有一个Gradle的构建说明文件和配置(build.gradle和gradle.properties)。src目录里还有一个标准的Gradle项目结构,但是grails-app应该是里面最有趣的目录。如果用过老版本的Grails,你就会知道这个目录的作用。这里面放的是你写的控制器、领域类和其他构成Grails项目的代码。

Grails 3项目的目录结构

如果再深挖一下,打开build.gradle文件,会发现一些更熟悉的东西。首先,构建说明文件里使用了Spring Boot的Gradle插件:

apply plugin: "spring-boot"

这意味着你能像使用其他Spring Boot应用程序那样构建并运行这个Grails应用程序。

你还应该注意到,依赖里有不少有用的Spring Boot库:

dependencies { 
 compile 'org.springframework.boot:spring-boot-starter-logging' 
 compile("org.springframework.boot:spring-boot-starter-actuator") 
 compile "org.springframework.boot:spring-boot-autoconfigure" 
 compile "org.springframework.boot:spring-boot-starter-tomcat" 
 ... 
}

这些库为Grails应用程序提供了Spring Boot的自动配置、日志,还有Actuator及嵌入式Tomcat。 把应用当作可执行JAR运行时,这个Tomcat可以提供服务。

实际上,这是一个Spring Boot项目,同时也是Grails项目,因为Grails 3就是构建在Spring Boot 的基础上的。

运行应用程序

运行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工具创建出控制器就很容易了。关于控制器,有几个命令可供选择。

脚手架控制器很好用,也是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模板来做视图。

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

<!DOCTYPE html> 
<html> 
 <head> 
 <meta name="layout" content="main"/>
 <title>Reading List</title> 
 <link rel="stylesheet" 
 href="/assets/main.css?compile=false" /> 
 <link rel="stylesheet" 
 href="/assets/mobile.css?compile=false" /> 
 <link rel="stylesheet" 
 href="/assets/application.css?compile=false" /> 
 </head> 
<body>
 <h2>Your Reading List</h2> 
 <g:if test="${bookList && !bookList.isEmpty()}"> 
 <g:each in="${bookList}" var="book"> 
 <dl> 
 <dt class="bookHeadline"> 
 ${book.title}</span> by ${book.author} 
 (ISBN: ${book.isbn}") 
 </dt> 
 <dd class="bookDescription"> 
 <g:if test="${book.description}"> 
 ${book.description} 
 </g:if> 
 <g:else> 
 No description available 
 </g:else> 
 </dd> 
 </dl> 
 </g:each> 
 </g:if> 
 <g:else> 
 <p>You have no books in your book list</p> 
 </g:else> 
 <hr/> 
 <h3>Add a book</h3> 
 <g:form action="save">
 <fieldset class="form"> 
 <label for="title">Title:</label> 
 <g:field type="text" name="title" value="${book?.title}"/><br/> 
 <label for="author">Author:</label> 
 <g:field type="text" name="author" 
 value="${book?.author}"/><br/> 
 <label for="isbn">ISBN:</label> 
 <g:field type="text" name="isbn" value="${book?.isbn}"/><br/> 
 <label for="description">Description:</label><br/> 
 <g:textArea name="description" value="${book?.description}" 
 rows="5" cols="80"/> 
 </fieldset> 
 <fieldset class="buttons"> 
 <g:submitButton name="create" class="save" 
 value="${message(code: 'default.button.create.label', 
 default: 'Create')}" /> 
 </fieldset> 
 </g:form> 
 </body> 
</html>

在元素里移除了引用样式表的标签。这里放了一个标签,引入了Grails 应用程序的main布局。这样一来,应用程序就能用上Grails的外观了,运行效果如下图所示。

应用通用Grails风格的阅读列表应用程序

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
另外本人整理收藏了多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,
下方只是部分截图 想要资料的话可以戳这里即可免费领取

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
另外本人整理收藏了多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,
下方只是部分截图 想要资料的话可以戳这里即可免费领取

在这里插入图片描述

标签:Grails,控制器,Spring,grails,应用程序,Book,Boot
来源: https://blog.csdn.net/fanzhang_vip0723/article/details/117884564