资讯专栏INFORMATION COLUMN

Day 6:在 Java 虚拟机上使用 Grails 进行快速 Web 开发

hoohack / 1285人阅读

摘要:要安装,输入更新到最新版本,执行如果需要阅读额外的安装命令行工具时的帮助文件,可以浏览使用命令设置好账户,这个命令会为你创建一个命名空间,然后上传你的到服务器上。也有一个插件,但这篇文章中,我会使用命令行工具。

在“30天学习30种新技术”的第六天,我决定去学习一个 web 开发框架 : Grails。

Grails 是一个基于 Groovy 和 Java 的开源 Web 框架。它是 Java 虚拟机(JVM)上顺应 Rails、Django 等流行 Web 框架而生的,伴随着标准的 Jetty/Tomcat 服务器,Grails 能帮助开发者进行快速的应用开发。在这篇文章中,我们会描述如何用 Grails 的 Eclipse 插件开发一个简单的 Web 应用。

为什么我们选择 Grails?
这是考虑到两个原因:
1. 快速的 Web 开发:它在 Java 虚拟机和掌握的 Java 知识下,也能达到像 Rails 或 Django 那样的快速开发的目标。
2. 成熟的技术:Grails 是基于 Spring 和 Hibernate 打造的。它可以看作是在这些技术上加了语法糖(Syntactic Sugar)。

前期准备

一些基本的 Java 知识是需要的。
2.在你的操作系统上安装最新版本的 JDK,你可以安装 OpenJDK 或者 Oracle JDK 7。OpenShift 支持 OpenJDK 6 和 7.

从 Eclipse 官网下载和你操作系统对应的最新版 Eclipse 安装包。在这篇文章写的时候,最新版的 Eclipse 包叫 Kepler.

安装 Eclipse 非常容易。只需要解压你下载的安装包就可以了。在 linux 或者 Mac 系统上,打开终端,然后输入:

  

$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz

在 Wdinows 系统上,你可以用 winzip 或者 7-zip 或者其它解压软件来解压。解压之后,在文件夹里面应该能能看到一个名为 eclipse 的文件夹。你可以按自己意愿为运行程序文件创建一个快捷方式。

安装 Grails:
请参阅 Grails 的开始使用指引.

现在这篇文章使用的 Grails 版本为 2.3.1。 在命令行下运行 grails -version 能查看你当前的 Grails 版本:

  

$ grails -version
Grails version: 2.3.1

当我第一次运行查看版本的命令时,我得到是以下的报错:

  

$ grails -version
Exception in thread "main" java.lang.NoClassDefFoundError:
org/codehaus/groovy/grails/cli/support/GrailsStarter

这个错误的原因是我这个机子上 Grails 的版本太老了。如果用的是 mac,转到 /usr/local/bin 目录下,你或者找到另一个安装文件。我以前可能不记得我安装过 grails 了,所以我先把旧版卸载了:

  

brew uninstall grails

第一步:安装 Eclipse Grails 插件

当你解压了和 Java EE 对应的 Eclipse Kepler IDE 之后,打开 Eclipse,然后从导航转到 项目的工作空间(Project Workspace)。打开菜单的 Help > Eclipse Marketplace,然后搜索 Grails。安装"Eclipse Kepler(4.3)的 Groovy/Grails 工具套件"。插件安装之后重启 Eclipse。

第二步:创建一个新的 Grails 项目

在这篇文章中,我们的目标是编写一个简单的链接分享应用。用户可以首先注册应用,然后自己提交链接。

创建一个新项目:文件 > 新建 > Grails 项目,然后完善项目信息。这个应用的名字是 Linkbin。

当我们第一次创建 Grails 项目时,我们必须配置 Grails 的安装环境。点开"Grails 安装配置(Configure Grails Installations)",然后增加一个新的 Grails 安装。

像在下图那样,我们可以自己为项目设置一个不同的存放路径。然后完成后,点击"完成(Finish)"按钮。

Eclipse 会问我们是否需要打开"Grails 视角(Grails perspective)",选择"是"。项目就会被创建,然后被导入到 Eclipse 里面。

第三步:创建一个领域模块(Domain model)

应用的领域模块非常简单,我们需要两个条目:User 和 Story。
User 条目有两个属性:emailfullName。我们会为 email 属性增加 not blankemailunique 限制。email 限制能把这个属性的内容检测限定为 email 格式。fullName 属性有 not blanksize两个限制。其中,size 的量使用 groovy 的 range 来限定长度集合、数字或者内容长度等的大小。为了创建一个新的 domain 类,右击 domain,然后选择 New > Domain Class.

这会创建一个 User 领域类(domain class)。用下面的代码代替 User 领域类的代码:

package linkbin

class User {
    String email
    String fullName
    static constraints = {
        email unique:true , blank : false , email:true
        fullName size:5..100  , blank : false
    }
}

Story 条目也有三个属性:link,description,submittedOn. link 属性对应用户所提交的网址,description 和 submittedOn 是所提交网址的额外文字内容和提交日期。我们会为 link 和 description 属性加上 not blank(非空)限制。同样的,link 属性也会被加上 unique 和 url 限制。

package linkbin

class Story {
    String link
    String description
    Date submittedOn

    static constraints = {
        link url : true , blank : false ,unique : true 
        description size : 10..1000 , blank : false 
    }
}

现在,我们连接 User 和 Story 起来。 一个用户可以提交多个故事,每个故事都都有所属的用户。它们的关系如下所示:

package linkbin
class User {
    String email
    String fullName
    static hasMany = [stories : Story]
    static constraints = {
        email unique:true , blank : false , email:true
        fullName size:5..100  , blank : false
    }
    static mapping = {
        table "users"
    }
}

一个故事属于一个用户:

package linkbin
class Story {
    String link
    String description
    Date submittedOn  
    static belongsTo = [user : User]
    static constraints = {
        link url : true , blank : false ,unique : true 
        description size : 10..1000 , blank : false 
    }
    static mapping = {
        table "stories"
    }
}
第四步:从领域模块搭建控制器和视图

在 Grails 上,要为领域模块产生控制器(controller)和视图(view)非常简单。为了为 User 的领域类产生控制器和视图,打开"Grails Command Wizard".

它会在能看见所有 Grails 命令的地方打开命令向导(wizard)。我们会使用 generate-all 命令去产生控制器和视图。

下一步它会询问领域类的名字。输入 linkbin.User 然后,点击"完成"。

类似的,为 Story 领域类产生控制器和视图。

那个 Generate-all 命令会为这两个条目生成 CRUD 控制器和视图。

第五步:运行程序

每个 Grails 项目都自带连接了一个 tomcat 服务器。为了在本地上运行程序,右击项目,然后选择"运行 grails 应用"(Run as Grails app)。

这会启动内嵌的 tomcat 程序容器,然后我们能在控制台看到以下的日志:

  

| Loading Grails 2.3.1
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application.....
| Running Grails application
| Server running. Browse to http://localhost:8080/linkbin

配置到云上

Grails 应用会被打包成 war 格式的文件。OpenShift 是一个开源的,公开的,可扩展的服务平台。如果你是一个 Java,Python,Node.js, Ruby 或者 php 开发者,你应该留意下 OpenShift 。在 OpenShift,你可以免费把你的程序部署字在上面。

在我们部署应用到 OpenShift 之前,我们要做先做这些事情:
1. 注册一个 OpenShift 账户。这是完全免费的,而且红帽(Red Hat)会给每个用户三个免费的 Gears,在 Gears 上你可以运行你的程序。在这篇文章写的时候,OpenShift 会为每个用户分配 1.5GB 的内存和 3GB 的硬盘空间。

2.在本机上,安装 rhc 客户端工具。rhc 是一个 ruby gem,所以你需要机子上安装好 ruby 1.8.7 及以上的 ruby。要安装 rhc,输入:

  

sudo gem install rhc

更新 rhc 到最新版本,执行:

  

sudo gem updatge rhc

如果需要阅读额外的安装 rhc 命令行工具时的帮助文件,可以浏览:https://openshift.redhat.com/community/developers/rhc-client-tools-install

3.使用 rhc setup 命令设置好 OpenShift 账户,这个命令会为你创建一个命名空间,然后上传你的 ssh keys 到 OpenShift 服务器上。

OpenShift 也有一个 Eclipse 插件,但这篇文章中,我会使用 rhc 命令行工具。

在设置好之后,运行下面命令创建 OpenShift 应用:

  

$ rhc create-app linkbin tomcat-7 postgresql-9.2

它会为我们创建一个应用容器,叫做 Gear,会自动设置好需要的 SELinux/cgroup 配置。OpenShift 也会为我们建立一个私密的 git 仓库,然后可克隆这个仓库到本地系统上。最后,OpenShift 还会部署一个连接外面的 DNS。部署的应用可以通过链接: http://linkbin-domain-name.rhcloud.com/ 来访问。把领域换成自己的 OpenShit 领域(有时候叫 命令空间)

由于我们要部署 war 文件,我们必须删除由 OpenShift 默认产生的资源文件。

  

$ git rm -rf src/ pom.xml
$ git commit -am "deleted default source code"

打开 Eclipse,用 postgresql 改变数据来源的配置。Grails 在 conf/Datasource.groovy 文件中维护所有的数据库配置。更新生产环境的配置以使用 PostgreSQL.

production {
    dataSource {
        dbCreate = "update"
        driverClassName = "org.postgresql.Driver"
        dialect = org.hibernate.dialect.PostgreSQLDialect   
    uri = new URI(System.env.OPENSHIFT_POSTGRESQL_DB_URL)
    url = "jdbc:postgresql://"+uri.host+uri.path+"/"+System.env.OPENSHIFT_APP_NAME
        username = System.env.OPENSHIFT_POSTGRESQL_DB_USERNAME
        password = System.env.OPENSHIFT_POSTGRESQL_DB_PASSWORD
    }
}

现在我们需要把 grails 应用打包成 war 文件。我们会使用 grails 的 war 命令来完成这个。打开 "Grails Command Wizard", 使用 war 命令。它会询问一个名字作为 war 文件的名字,我们把文件设成:target/ROOT.war。 她会在目标文件中生出 ROOT.war 文件。复制 ROOT.war 到 OpenShift linkbin 应用的 webapps 文件夹中。

现在,把 war 文件也加入到你的 git 仓库中,然后 push 改变的内容。

$ git add .
$ git commit -am "linkbin app deployed to cloud"
$ git push

当代码成功推送(push),而 war 也成功部署之后,我们可以访问:http://linkbin-{domain-name}.rhcloud.com 来看看程序运行的情况。

作为一个教训性质的 demo,项目的最终效果你可以在这里看到:http://linkbin-shekhargulati.rhcloud.com .

这就是今天的内容了。我希望这篇文章能帮到阅读这个系列的开发者们。随时欢迎反馈信息、

接下来

在线登录 OpenShift 帐号

通过评估 OpenShift 企业版获得自己的私有 PaaS(Platform As a Service)。

需要帮助? 去 OpenShift Community 论坛问问题。

在 OpenShift Developer Spotlight 中展示你的酷应用。今天就开始浏览下OpenShift 应用展览


原文:Day 6: Rapid Web Development on the JVM with Grails
翻译:Segmentfault

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/63995.html

相关文章

  • 新版CloudFoundry揭秘

    摘要:上面主要是将新的多了些什么。在新版本的设计中,他们使用脚本来代替原先的脚本。可以看到在新的架构中多出了很多组件。他究竟是如何操作的呢首先,我们必须准备好系统例如。当刚刚推出的时候,包含了应用运行时启动,停止等简单命令。 CloudFoundry距离发布已经一年多了。在这一年里CloudFoundry不论是社区还是代码日臻成熟,拥有了众多合作伙伴。现在他迈开了更大的脚步,新的CloudFou...

    tianlai 评论0 收藏0
  • 开发利器之IntelliJ IDEA学习笔记

    摘要:旨在记录自己的学习过程,方便日后遇到问题是及时查阅复习,另一方面也希望能帮助像笔者一样从来没使用过的人快速熟悉。 这篇文章主要记录的是本人学习使用IntelliJ IDEA的笔记,可能不是特别的详细。旨在记录自己的学习过程,方便日后遇到问题是及时查阅复习,另一方面也希望能帮助像笔者一样从来没使用过IDEA的人快速熟悉IDEA。文章错误之处还请各位大佬批评指正。(文末有本人的微信公众号,...

    马永翠 评论0 收藏0
  • 国外程序员整理的Java资源大全

    摘要:日期和时间处理日期和时间的函数库。使用中可观察序列,创建异步基于事件应用程序的函数库。为分布式系统提供延迟和容错处理。发布使用本机格式分发应用程序的工具。将程序资源和打包成和的本机文件。图像处理用来帮助创建评估或操作图形的函数库。 好资源要分享原文 译者 唐尤华 翻译自 github akullpp 构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Mave...

    chengtao1633 评论0 收藏0
  • 物联网平台thingsboard编译一步到位

    摘要:物联网平台编译一步到位物联网平台编译一步到位简介项目前置准备安装安装将放入本地缓存配置镜像地址编译运行物联网平台编译一步到位先上编译结果,耗时分秒简介是一个开源物联网平台,可实现物联网项目的快速开发管理和扩展。 ...

    刘永祥 评论0 收藏0
  • Vert.x入坑须知(4)

    摘要:主要是避免引入太多的复杂性,并且出于灵活部署的需要。以应用为例,由于实际上是在上执行,若它被阻塞,即导致后续请求全部无法得到处理。因此,最合适的做法就是对于简单业务,采用异步库。本系列其他文章入坑须知入坑须知入坑须知 最开始觉得这个系列也就最多3篇了不起了(因为事不过三嘛),没曾想居然迎来了第四篇! Kotlin 由于最近决定投身到区块链的学习当中的缘故,出于更好的理解它的基本概念,自...

    summerpxy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<