zoukankan      html  css  js  c++  java
  • [译] 第六天:在Java虚拟机上用Grails进行快速Web开发

    前言

    30天学习30种技术的第六天,我决定学习Grails Web应用开发框架.

     

    Grails是基于GroovyJava的开源Web开发框架。是对流行的Rails或者Django Web框架的JVM(Java虚拟机)响应,帮助开发者应对标准Jetty或者Tomcat服务器快速巧妙开发应用。这篇博客里,我们会讲到用Grails Eclipse插件创建简单的Web应用。

    为什么我们要关注Grails?

    考虑学习Grails的两个原因:

    1. 快速web开发:有助于像Rails或者Django那样帮助我们高效开发,当然,要在掌握JVMJava的前提下。
    2. 成熟的技术支持:Grails底层用SpringHibernate构建,可以看成是这些技术的糖衣语法。

    前提准备

    1. 必要的Java基础知识。
    2. 安装最新的JDK, 可以装OpenJDK7Oracle JDK 7. OpenShift支持OpenJDK 67
    3. 官网下载最新的Eclipse包,目前最新的叫做Kepler.

    安装Eclipse很简单,下载安装包后解压就好,在Linux或者Mac上,打开命令器,运行以下命令:

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

     

    Windows上用Winzip或者7-zip解压,解压后,你会有一个eclipse文件夹,可以为可执行文件建个快捷方式。

    安装Grails

    请参考Grails入门指南

     

    我们这里用的Grails版本是2.3.1. 运行grails -version 来检查版本号。

    $ 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路径,你可能发现另外一个安装版本。我之前可能无意间用brew 安装了Grails, 现在先卸载掉。

    brew uninstall grails

    第一步:安装Eclipse Grails插件

    Java EE解压Eclipse Kpler IDE后,打开Eclipse,找到项目位置。打开Help>Eclipse Marketplace, 然后搜索Grails.安装 "Groovy/Grails Tool Suite(GGTS) for Eclipse Kepler(4.3)". 安装完后重启Eclipse.

    第二步:新建Grails项目

    这里我们建一个简单的链接分享应用。用户可以先注册然后提交链接。

     

    新建Grails 项目步骤File>New>Grails Project,输入详细信息,命名为linkbin. 

     

    第一次创建Grails项目需要配置安装信息,点击"Configure Grails Installations" 然后添加新的安装。

     

    也可以给项目指定不同路径,点击"Finish" 按钮。

     

    Eclipse会问你是否要打开"Grails perspective", 点击 Yes. 项目就创建好并导入到Eclipse了。

    第三步:创建领域模型

    程序的领域模型非常简单。两个实体:UserStory.

     

    User包含两块:emailfullName. 我们在Email上添加了not blank, emailunique约束。email约束确保邮件格式验证。fullNamenot blanksize约束。size约束是用groovy Range 限制集合,数字,或者字符长度的大小。要新建domain类,右击domain,选择New>Domain Class.

     

    创建User 域类,用以下代码替换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 和用户要提交的Web url相关。 Description submittedOnlink 和提交日期的补充文本。我们为link escription添加了not blank约束,uniqueurl约束也加到了link里。

    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'
        }
    
    }

    第四步:域类的Scaffold控制器和视图

    Grails从域类生成控制器和视图很简单。要为User域类生成控制器和视图,打开"Grails Command Wizard ".

    它会在能看到所有Grails 命令的地方打开命令窗口,用generate-all命令生成控制器和视图。

     

    然后它会要求输入域类的名字,输入 linkbin.User 然后点击"Finish"按钮。

     

    同样的,给Story域类生成控制器和视图。

     

    Generate-all命令为所有实体生成CRUD控制器和视图。

    第五步:运行程序

    所有的Grails项目都嵌入到支持运行嵌入式的tomcat服务器上。在本地运行程序,右击,选择"Run as grails app".

     

    这回启动一个嵌入式tomcat servlet容器,可以在控制台看到以下日志。

    | 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或者PHP, 你应该看看OpenShift. OpenShift作为公共平台服务,你可以在上面免费发布应用。

    OpenShift上发布应用之前,先做以下步骤:

    1. OpenShift      Account上注册。 OpenShift完全免费,红帽给每个用户免费提供了3个Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。
    2. 在本机安装rhc 客户端工具,rhc是ruby gem包,所以你需要安装1.8.7或以上版本的ruby。安装rhc,输入 
    sudo gem install rhc

             要更新rhc,输入

    sudo gem update rhc

            想了解rhc command-line 工具,更多帮助参考https://openshift.redhat.com/community/developers/rhc-client-tools-install

    1. 用rhc 安装命令安装OpenShift. 执行命令可以帮你创建空间,上传ssh 密钥到OpenShift服务器。

    OpenShift也有eclipse插件,只是这里我们用OpenShift rhc命令工具。 

     

    安装之后,我们可以运行以下命令来创建程序。

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

     

    这会创建一个程序容器,叫gear,安装所需的SELinux策略和cgroup配置。OpenShift也会为你安装一个私有的git仓库,并克隆到本地。最后,OpenShift会把DNS 扩散到网络中。程序可访问http://linkbin-domain-name.rhcloud.com/.替换你自己唯一的OpenShift域名(有时也叫命名空间) 

     

    我们要发布WAR文件,所以需要把OpenShift上默认的文件删除。

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

     

    Eclipse, postgresql更换datasource配置。 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 命令,它会要求输入文件名,取名target/ROOT.war,会在目标文件夹生成 ROOT.war,复制ROOT.war到你的OpenShift linkbin程序的webapps文件夹。 

     

    现在添加wargit仓库,发布。

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

     

    代码发布后WAR就成功部署了,可以在http://linkbin-{domain-name}.rhcloud.com看到程序。 

     

    作为程序结果演示,可以到http://linkbin-shekhargulati.rhcloud.com

     

    这是今天的内容. 希望对你有用,继续给意见和建议吧。

     

    原文:https://www.openshift.com/blogs/day-6-rapid-web-development-on-the-jvm-with-grails

  • 相关阅读:
    WinSCP 与 Putty 中文显示乱码解决方法
    centos 6.2上oracle 11g的远程安装
    CentOs 6.3_64静默安装oracle11g_r2
    IP地址修改后ORACLE不能使用问题
    linux查看本机IP、gateway、dns
    linux启动SSH及开机自动启动
    linux下如何从自动获取ip转到手动配置ip
    Linux系统(CentOS 6.4)的NTFS驱动NTFS3g的安装和配置
    正则表达式——去除文本中的非汉字(VB2005)
    遍历排列的实现——VB2005
  • 原文地址:https://www.cnblogs.com/endless-on/p/3479113.html
Copyright © 2011-2022 走看看