返回列表 发帖

[原创] Groovy开发通讯录

转载请注明出处:www.thysea.com

本文将给大家展示用Groovy以及Grails快速开发一个网站的实例。众所周知,Grails集成了Spring,HibernateSiteMesh这些Web FrameWork。它提供一个类似于Rails的平台可以无缝与Java平台相集成使得开发者能利用当前在JavaJDK方面的投入。而Groovy可以与Java非常自然的整合。

让我们来感受一下用Groovy on Grails快速开发带来的体验吧。
1)首先创建一个web工程,输入命令:grails create-app AddressList
输入如下:
D:\temp>grails create-app AddressList

Welcome to Grails 0.6 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\grails-0.6

Base Directory: D:\temp
Environment set to development
Note: No plugin scripts found
Running script D:\grails-0.6\scripts\CreateApp.groovy
Overriding previous definition of reference to groovyJarSet

[mkdir] Created dir: D:\temp\AddressList\src


[mkdir] Created dir: D:\temp\AddressList\src\java


[mkdir] Created dir: D:\temp\AddressList\src\groovy


[mkdir] Created dir: D:\temp\AddressList\grails-app


[mkdir] Created dir: D:\temp\AddressList\grails-app\controllers


[mkdir] Created dir: D:\temp\AddressList\grails-app\services


[mkdir] Created dir: D:\temp\AddressList\grails-app\domain


[mkdir] Created dir: D:\temp\AddressList\grails-app\taglib


[mkdir] Created dir: D:\temp\AddressList\grails-app\utils


[mkdir] Created dir: D:\temp\AddressList\grails-app\views


[mkdir] Created dir: D:\temp\AddressList\grails-app\views\layouts


[mkdir] Created dir: D:\temp\AddressList\grails-app\i18n


[mkdir] Created dir: D:\temp\AddressList\grails-app\conf


[mkdir] Created dir: D:\temp\AddressList\test


[mkdir] Created dir: D:\temp\AddressList\test\unit


[mkdir] Created dir: D:\temp\AddressList\test\integration


[mkdir] Created dir: D:\temp\AddressList\scripts


[mkdir] Created dir: D:\temp\AddressList\web-app


[mkdir] Created dir: D:\temp\AddressList\web-app\js


[mkdir] Created dir: D:\temp\AddressList\web-app\css


[mkdir] Created dir: D:\temp\AddressList\web-app\images


[mkdir] Created dir: D:\temp\AddressList\web-app\WEB-INF\classes


[mkdir] Created dir: D:\temp\AddressList\web-app\META-INF


[mkdir] Created dir: D:\temp\AddressList\lib


[mkdir] Created dir: D:\temp\AddressList\grails-app\conf\spring


[mkdir] Created dir: D:\temp\AddressList\grails-app\conf\hibernate

[propertyfile] Creating new property file: D:\temp\AddressList\application.prope
rties

[copy] Copying 2 files to D:\temp\AddressList


[copy] Copying 2 files to D:\temp\AddressList\web-app\WEB-INF


[copy] Copying 5 files to D:\temp\AddressList\web-app\WEB-INF\tld


[copy] Copying 130 files to D:\temp\AddressList\web-app


[copy] Copying 1 file to D:\temp\AddressList\grails-app\conf


[copy] Copying 13 files to D:\temp\AddressList\grails-app


[copy] Copying 1 file to D:\temp\AddressList\grails-app\conf\spring


[copy] Copying 1 file to D:\temp\AddressList


[copy] Copying 1 file to D:\temp\AddressList


[copy] Copying 1 file to D:\temp\AddressList

[propertyfile] Updating property file: D:\temp\AddressList\application.propertie
s
Created Grails Application at D:\temp/AddressList
D:\temp>

2)然后进入AddressList目录,创建一个User模型,输入命令:grails create-domain-class User
输出如下:





我们打开grails-app/domain这个目录看到User.groovy,打开看到什么也没有,我们修改这个文件为:
class User {


Long id


Long version

  

String email


String password

  

String toString() {


"$email"


}

  

static constraints = {


email(email: true)


password(blank: false, password: true)


}

}

User定义了emailpassword两个变量,并且规定了emailpassword的类型,而且password的值不能为空。

然后我们添加一个用户到grails-app/conf的启动里。这是为了创建一个用户实例用于测试登录,并保存写入的注册信息,我们修改BootStrap.groovy文件改为:
class BootStrap {

def init = { servletContext ->


new User(email: "fengzhizi715@126.com", password: "123456").save()


}


def destroy = {


}

}


3)我们再创建一个Address模型,输入grails create-domain-class Address
修改该模型为如下:
class Address {


Long id


Long version

  

String name


String nickname


String career


String sex


String qq


String telphone


String address


String otheraddress



static constraints = {


sex(inList:["male", "female"])


}

  

String toString() {


"${this.class.name}: $id"


}

  

boolean equals(other) {


if (other?.is(this)) return true


if (!(other instanceof Address)) return false

           

if (!id || !other?.id || id != other?.id) return false

  

return true


}

  

int hashCode() {


int hashCode = 0


hashCode = 29 * (hashCode + (!id ? 0 : id ^ (id >>> 32)))


}

}


4)生成与Address相关的文件与目录,输入命令:grails generate-all Address
输出如下图所示:



修改grails-app/controllers文件夹下的AddressController.groovy
class AddressController {

def beforeInterceptor = [action:this.&checkUser, except: ['index', 'list', 'show']]

      

def scaffold = Address

  

def checkUser() {


if (!session.user) {

            

redirect(controller:'user', action:'login')


return false


}


}

}

在这个controller中定义了一个方法beforeInterceptor类似于AOP中的before advice,在运行这个控制器之前先运行这个方法。

5)创建login.gsp
AddressController中我们看到有一个判断用户的方法,如果不是系统用户,系统将跳转到login页面,因此我们必须创建这个登陆页面。
grails-app/views文件夹下创建user目录,在该目录下创建login.gsp文件。其中,GSPGroovyServer Pages

<html>

<head>

<meta http-equiv="Content-Type" c />

<meta name="layout" c />

<title>User Login</title>

</head>

<body>


<div class="body">


<g:form action="doLogin" method="post">


<div class="dialog">



<p>Entry your login details below:</p>


<table class="userForm">


<tr class="prop">


<td valign="top" style="text-align:left;" width="20%">


<label for="email">Email:</label>


</td>


<td valign="top" style="text-align:left;" width="80%">


<input id="email" type="text" name="email" value="${user?.email}" />



</td>


</tr>


<tr class="prop">


<td valign="top" style="text-align:left;" width="20%">


<label for="password">Password:</label>


</td>


<td valign="top" style="text-align:left;" width="80%">


<input id="password" type="password" name="password" value="${user?.password}" />


</td>


</tr>


</table>


</div>


<div class="buttons">


<span class="formButton">


<input type="submit" value="Login"></input>


</span>


</div>


</g:form>


</div>

</body>

</html>


6)创建UserController.groovy文件
我们同样需要UserController
class UserController {


def index = {


redirect(controller:'user', action: 'login')


}



def login = {


}

      

def doLogin = {


def user = User.findWhere(email:params['email'], password:params['password'])


session.user = user


if (user)


redirect(controller: 'address', action: 'list')


else


redirect(controller: 'user', action: 'login')


}


}

这样就OK了。
可以部署我们的web工程,输入命令:grails run-app

由于Grails集成了jetty,我们编译完了可以直接在浏览器上输入http://localhost:8080/AddressList ,如果有问题的话看一下端口有没有冲突。
我们进入用户登录界面,如下图所示。


输入正确后可以进行增加通讯录。





增加完毕后还可以编辑修改,这就是典型的CRUD
让我们看一下显示地址列表的功能吧。



写在最后,我们看到了Groovy on Grails的强大功能,使我们只专注于业务逻辑,其他很多地方都不用管了。




附源代码




[ 本帖最后由 风灵风之子 于 2007-10-10 09:07 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
天行健,君子以自强不息
地势坤,君子以厚德载物
   黑色海岸线欢迎您

顶下  

TOP

支持新技术哈
专业核弹头翻新,改装,潜艇抛光,喷漆.回收二手航母。并批发歼10,F22 F35 B2轰炸机,收售各类氢/核弹头。量大从优!有{mod}

TOP

谢谢阿哲!为此费了N多心血,积极为我们开发此软件。
建议:能够直接让我们下载就好了,那些复杂的过程我有点笨哦!
一个很有个性的人一个可以信赖的人一个能够作朋友的人 

TOP

我很认真的看了哦~!  然后发现一个个分开懂,合起来就不懂了……
勾勾の小指头﹎説好﹎永远Ъù分手メ_愛伱↘又怎能ヽoo轻易說ツ放棄. ↗單純﹎Dé`﹎開始.o
           勾勾の小指头﹎説好﹎永远Ъù分手メ_愛伱↘又怎能ヽoo轻易說ツ放棄. ↗單純﹎Dé`﹎開始.o     

TOP

原帖由 于 2007-10-10 01:22 发表
谢谢阿哲!为此费了N多心血,积极为我们开发此软件。
建议:能够直接让我们下载就好了,那些复杂的过程我有点笨哦!

无私奉献····精神值得学习···

TOP

好东西!收藏!
葥方昰絶簬
      唏朢在轉角

TOP

返回列表 回复 发帖