成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Day 6:在 Java 虛擬機(jī)上使用 Grails 進(jìn)行快速 Web 開發(fā)

hoohack / 1314人閱讀

摘要:要安裝,輸入更新到最新版本,執(zhí)行如果需要閱讀額外的安裝命令行工具時(shí)的幫助文件,可以瀏覽使用命令設(shè)置好賬戶,這個(gè)命令會(huì)為你創(chuàng)建一個(gè)命名空間,然后上傳你的到服務(wù)器上。也有一個(gè)插件,但這篇文章中,我會(huì)使用命令行工具。

在“30天學(xué)習(xí)30種新技術(shù)”的第六天,我決定去學(xué)習(xí)一個(gè) web 開發(fā)框架 : Grails。

Grails 是一個(gè)基于 Groovy 和 Java 的開源 Web 框架。它是 Java 虛擬機(jī)(JVM)上順應(yīng) Rails、Django 等流行 Web 框架而生的,伴隨著標(biāo)準(zhǔn)的 Jetty/Tomcat 服務(wù)器,Grails 能幫助開發(fā)者進(jìn)行快速的應(yīng)用開發(fā)。在這篇文章中,我們會(huì)描述如何用 Grails 的 Eclipse 插件開發(fā)一個(gè)簡(jiǎn)單的 Web 應(yīng)用。

為什么我們選擇 Grails?
這是考慮到兩個(gè)原因:
1. 快速的 Web 開發(fā):它在 Java 虛擬機(jī)和掌握的 Java 知識(shí)下,也能達(dá)到像 Rails 或 Django 那樣的快速開發(fā)的目標(biāo)。
2. 成熟的技術(shù):Grails 是基于 Spring 和 Hibernate 打造的。它可以看作是在這些技術(shù)上加了語(yǔ)法糖(Syntactic Sugar)。

前期準(zhǔn)備

一些基本的 Java 知識(shí)是需要的。
2.在你的操作系統(tǒng)上安裝最新版本的 JDK,你可以安裝 OpenJDK 或者 Oracle JDK 7。OpenShift 支持 OpenJDK 6 和 7.

從 Eclipse 官網(wǎng)下載和你操作系統(tǒng)對(duì)應(yīng)的最新版 Eclipse 安裝包。在這篇文章寫的時(shí)候,最新版的 Eclipse 包叫 Kepler.

安裝 Eclipse 非常容易。只需要解壓你下載的安裝包就可以了。在 linux 或者 Mac 系統(tǒng)上,打開終端,然后輸入:

  

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

在 Wdinows 系統(tǒng)上,你可以用 winzip 或者 7-zip 或者其它解壓軟件來解壓。解壓之后,在文件夾里面應(yīng)該能能看到一個(gè)名為 eclipse 的文件夾。你可以按自己意愿為運(yùn)行程序文件創(chuàng)建一個(gè)快捷方式。

安裝 Grails:
請(qǐng)參閱 Grails 的開始使用指引.

現(xiàn)在這篇文章使用的 Grails 版本為 2.3.1。 在命令行下運(yùn)行 grails -version 能查看你當(dāng)前的 Grails 版本:

  

$ grails -version
Grails version: 2.3.1

當(dāng)我第一次運(yùn)行查看版本的命令時(shí),我得到是以下的報(bào)錯(cuò):

  

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

這個(gè)錯(cuò)誤的原因是我這個(gè)機(jī)子上 Grails 的版本太老了。如果用的是 mac,轉(zhuǎn)到 /usr/local/bin 目錄下,你或者找到另一個(gè)安裝文件。我以前可能不記得我安裝過 grails 了,所以我先把舊版卸載了:

  

brew uninstall grails

第一步:安裝 Eclipse Grails 插件

當(dāng)你解壓了和 Java EE 對(duì)應(yīng)的 Eclipse Kepler IDE 之后,打開 Eclipse,然后從導(dǎo)航轉(zhuǎn)到 項(xiàng)目的工作空間(Project Workspace)。打開菜單的 Help > Eclipse Marketplace,然后搜索 Grails。安裝"Eclipse Kepler(4.3)的 Groovy/Grails 工具套件"。插件安裝之后重啟 Eclipse。

第二步:創(chuàng)建一個(gè)新的 Grails 項(xiàng)目

在這篇文章中,我們的目標(biāo)是編寫一個(gè)簡(jiǎn)單的鏈接分享應(yīng)用。用戶可以首先注冊(cè)應(yīng)用,然后自己提交鏈接。

創(chuàng)建一個(gè)新項(xiàng)目:文件 > 新建 > Grails 項(xiàng)目,然后完善項(xiàng)目信息。這個(gè)應(yīng)用的名字是 Linkbin。

當(dāng)我們第一次創(chuàng)建 Grails 項(xiàng)目時(shí),我們必須配置 Grails 的安裝環(huán)境。點(diǎn)開"Grails 安裝配置(Configure Grails Installations)",然后增加一個(gè)新的 Grails 安裝。

像在下圖那樣,我們可以自己為項(xiàng)目設(shè)置一個(gè)不同的存放路徑。然后完成后,點(diǎn)擊"完成(Finish)"按鈕。

Eclipse 會(huì)問我們是否需要打開"Grails 視角(Grails perspective)",選擇"是"。項(xiàng)目就會(huì)被創(chuàng)建,然后被導(dǎo)入到 Eclipse 里面。

第三步:創(chuàng)建一個(gè)領(lǐng)域模塊(Domain model)

應(yīng)用的領(lǐng)域模塊非常簡(jiǎn)單,我們需要兩個(gè)條目:User 和 Story。
User 條目有兩個(gè)屬性:emailfullName。我們會(huì)為 email 屬性增加 not blankemail、unique 限制。email 限制能把這個(gè)屬性的內(nèi)容檢測(cè)限定為 email 格式。fullName 屬性有 not blanksize兩個(gè)限制。其中,size 的量使用 groovy 的 range 來限定長(zhǎng)度集合、數(shù)字或者內(nèi)容長(zhǎng)度等的大小。為了創(chuàng)建一個(gè)新的 domain 類,右擊 domain,然后選擇 New > Domain Class.

這會(huì)創(chuàng)建一個(gè) User 領(lǐng)域類(domain class)。用下面的代碼代替 User 領(lǐng)域類的代碼:

package linkbin

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

Story 條目也有三個(gè)屬性:link,description,submittedOn. link 屬性對(duì)應(yīng)用戶所提交的網(wǎng)址,description 和 submittedOn 是所提交網(wǎng)址的額外文字內(nèi)容和提交日期。我們會(huì)為 link 和 description 屬性加上 not blank(非空)限制。同樣的,link 屬性也會(huì)被加上 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 
    }
}

現(xiàn)在,我們連接 User 和 Story 起來。 一個(gè)用戶可以提交多個(gè)故事,每個(gè)故事都都有所屬的用戶。它們的關(guān)系如下所示:

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

一個(gè)故事屬于一個(gè)用戶:

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"
    }
}
第四步:從領(lǐng)域模塊搭建控制器和視圖

在 Grails 上,要為領(lǐng)域模塊產(chǎn)生控制器(controller)和視圖(view)非常簡(jiǎn)單。為了為 User 的領(lǐng)域類產(chǎn)生控制器和視圖,打開"Grails Command Wizard".

它會(huì)在能看見所有 Grails 命令的地方打開命令向?qū)?wizard)。我們會(huì)使用 generate-all 命令去產(chǎn)生控制器和視圖。

下一步它會(huì)詢問領(lǐng)域類的名字。輸入 linkbin.User 然后,點(diǎn)擊"完成"。

類似的,為 Story 領(lǐng)域類產(chǎn)生控制器和視圖。

那個(gè) Generate-all 命令會(huì)為這兩個(gè)條目生成 CRUD 控制器和視圖。

第五步:運(yùn)行程序

每個(gè) Grails 項(xiàng)目都自帶連接了一個(gè) tomcat 服務(wù)器。為了在本地上運(yùn)行程序,右擊項(xiàng)目,然后選擇"運(yùn)行 grails 應(yīng)用"(Run as Grails app)。

這會(huì)啟動(dòng)內(nèi)嵌的 tomcat 程序容器,然后我們能在控制臺(tái)看到以下的日志:

  

| 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 應(yīng)用會(huì)被打包成 war 格式的文件。OpenShift 是一個(gè)開源的,公開的,可擴(kuò)展的服務(wù)平臺(tái)。如果你是一個(gè) Java,Python,Node.js, Ruby 或者 php 開發(fā)者,你應(yīng)該留意下 OpenShift 。在 OpenShift,你可以免費(fèi)把你的程序部署字在上面。

在我們部署應(yīng)用到 OpenShift 之前,我們要做先做這些事情:
1. 注冊(cè)一個(gè) OpenShift 賬戶。這是完全免費(fèi)的,而且紅帽(Red Hat)會(huì)給每個(gè)用戶三個(gè)免費(fèi)的 Gears,在 Gears 上你可以運(yùn)行你的程序。在這篇文章寫的時(shí)候,OpenShift 會(huì)為每個(gè)用戶分配 1.5GB 的內(nèi)存和 3GB 的硬盤空間。

2.在本機(jī)上,安裝 rhc 客戶端工具。rhc 是一個(gè) ruby gem,所以你需要機(jī)子上安裝好 ruby 1.8.7 及以上的 ruby。要安裝 rhc,輸入:

  

sudo gem install rhc

更新 rhc 到最新版本,執(zhí)行:

  

sudo gem updatge rhc

如果需要閱讀額外的安裝 rhc 命令行工具時(shí)的幫助文件,可以瀏覽:https://openshift.redhat.com/community/developers/rhc-client-tools-install

3.使用 rhc setup 命令設(shè)置好 OpenShift 賬戶,這個(gè)命令會(huì)為你創(chuàng)建一個(gè)命名空間,然后上傳你的 ssh keys 到 OpenShift 服務(wù)器上。

OpenShift 也有一個(gè) Eclipse 插件,但這篇文章中,我會(huì)使用 rhc 命令行工具。

在設(shè)置好之后,運(yùn)行下面命令創(chuàng)建 OpenShift 應(yīng)用:

  

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

它會(huì)為我們創(chuàng)建一個(gè)應(yīng)用容器,叫做 Gear,會(huì)自動(dòng)設(shè)置好需要的 SELinux/cgroup 配置。OpenShift 也會(huì)為我們建立一個(gè)私密的 git 倉(cāng)庫(kù),然后可克隆這個(gè)倉(cāng)庫(kù)到本地系統(tǒng)上。最后,OpenShift 還會(huì)部署一個(gè)連接外面的 DNS。部署的應(yīng)用可以通過鏈接: http://linkbin-domain-name.rhcloud.com/ 來訪問。把領(lǐng)域換成自己的 OpenShit 領(lǐng)域(有時(shí)候叫 命令空間)

由于我們要部署 war 文件,我們必須刪除由 OpenShift 默認(rèn)產(chǎn)生的資源文件。

  

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

打開 Eclipse,用 postgresql 改變數(shù)據(jù)來源的配置。Grails 在 conf/Datasource.groovy 文件中維護(hù)所有的數(shù)據(jù)庫(kù)配置。更新生產(chǎn)環(huán)境的配置以使用 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
    }
}

現(xiàn)在我們需要把 grails 應(yīng)用打包成 war 文件。我們會(huì)使用 grails 的 war 命令來完成這個(gè)。打開 "Grails Command Wizard", 使用 war 命令。它會(huì)詢問一個(gè)名字作為 war 文件的名字,我們把文件設(shè)成:target/ROOT.war。 她會(huì)在目標(biāo)文件中生出 ROOT.war 文件。復(fù)制 ROOT.war 到 OpenShift linkbin 應(yīng)用的 webapps 文件夾中。

現(xiàn)在,把 war 文件也加入到你的 git 倉(cāng)庫(kù)中,然后 push 改變的內(nèi)容。

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

當(dāng)代碼成功推送(push),而 war 也成功部署之后,我們可以訪問:http://linkbin-{domain-name}.rhcloud.com 來看看程序運(yùn)行的情況。

作為一個(gè)教訓(xùn)性質(zhì)的 demo,項(xiàng)目的最終效果你可以在這里看到:http://linkbin-shekhargulati.rhcloud.com .

這就是今天的內(nèi)容了。我希望這篇文章能幫到閱讀這個(gè)系列的開發(fā)者們。隨時(shí)歡迎反饋信息、

接下來

在線登錄 OpenShift 帳號(hào)

通過評(píng)估 OpenShift 企業(yè)版獲得自己的私有 PaaS(Platform As a Service)。

需要幫助? 去 OpenShift Community 論壇問問題。

在 OpenShift Developer Spotlight 中展示你的酷應(yīng)用。今天就開始瀏覽下OpenShift 應(yīng)用展覽


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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/63995.html

相關(guān)文章

  • 新版CloudFoundry揭秘

    摘要:上面主要是將新的多了些什么。在新版本的設(shè)計(jì)中,他們使用腳本來代替原先的腳本。可以看到在新的架構(gòu)中多出了很多組件。他究竟是如何操作的呢首先,我們必須準(zhǔn)備好系統(tǒng)例如。當(dāng)剛剛推出的時(shí)候,包含了應(yīng)用運(yùn)行時(shí)啟動(dòng),停止等簡(jiǎn)單命令。 CloudFoundry距離發(fā)布已經(jīng)一年多了。在這一年里CloudFoundry不論是社區(qū)還是代碼日臻成熟,擁有了眾多合作伙伴。現(xiàn)在他邁開了更大的腳步,新的CloudFou...

    tianlai 評(píng)論0 收藏0
  • 開發(fā)利器之IntelliJ IDEA學(xué)習(xí)筆記

    摘要:旨在記錄自己的學(xué)習(xí)過程,方便日后遇到問題是及時(shí)查閱復(fù)習(xí),另一方面也希望能幫助像筆者一樣從來沒使用過的人快速熟悉。 這篇文章主要記錄的是本人學(xué)習(xí)使用IntelliJ IDEA的筆記,可能不是特別的詳細(xì)。旨在記錄自己的學(xué)習(xí)過程,方便日后遇到問題是及時(shí)查閱復(fù)習(xí),另一方面也希望能幫助像筆者一樣從來沒使用過IDEA的人快速熟悉IDEA。文章錯(cuò)誤之處還請(qǐng)各位大佬批評(píng)指正。(文末有本人的微信公眾號(hào),...

    馬永翠 評(píng)論0 收藏0
  • 國(guó)外程序員整理的Java資源大全

    摘要:日期和時(shí)間處理日期和時(shí)間的函數(shù)庫(kù)。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫(kù)。為分布式系統(tǒng)提供延遲和容錯(cuò)處理。發(fā)布使用本機(jī)格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機(jī)文件。圖像處理用來幫助創(chuàng)建評(píng)估或操作圖形的函數(shù)庫(kù)。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...

    chengtao1633 評(píng)論0 收藏0
  • 物聯(lián)網(wǎng)平臺(tái)thingsboard編譯一步到位

    摘要:物聯(lián)網(wǎng)平臺(tái)編譯一步到位物聯(lián)網(wǎng)平臺(tái)編譯一步到位簡(jiǎn)介項(xiàng)目前置準(zhǔn)備安裝安裝將放入本地緩存配置鏡像地址編譯運(yùn)行物聯(lián)網(wǎng)平臺(tái)編譯一步到位先上編譯結(jié)果,耗時(shí)分秒簡(jiǎn)介是一個(gè)開源物聯(lián)網(wǎng)平臺(tái),可實(shí)現(xiàn)物聯(lián)網(wǎng)項(xiàng)目的快速開發(fā)管理和擴(kuò)展。 ...

    劉永祥 評(píng)論0 收藏0
  • Vert.x入坑須知(4)

    摘要:主要是避免引入太多的復(fù)雜性,并且出于靈活部署的需要。以應(yīng)用為例,由于實(shí)際上是在上執(zhí)行,若它被阻塞,即導(dǎo)致后續(xù)請(qǐng)求全部無(wú)法得到處理。因此,最合適的做法就是對(duì)于簡(jiǎn)單業(yè)務(wù),采用異步庫(kù)。本系列其他文章入坑須知入坑須知入坑須知 最開始覺得這個(gè)系列也就最多3篇了不起了(因?yàn)槭虏贿^三嘛),沒曾想居然迎來了第四篇! Kotlin 由于最近決定投身到區(qū)塊鏈的學(xué)習(xí)當(dāng)中的緣故,出于更好的理解它的基本概念,自...

    summerpxy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<