第一个例子”hello world”
3.1 Grails基本命令
1. 创建一个新的应用: grails create-app $projectname
创建一个新的GRAILS项目,进入GRAILS_HOME:grails create-app $projectname
以下的命令要进入$projectname,才能执行
2. 创建域类:grails create-domain-class $domainname
3. 生成基本Web应用程序:grails generate-all $domainname
注意:由于bug-245,Grails 0.2.1不能生成控制器。您必须手动生成控制器,其方法是对每个域类使用generate-controller 命令
grails generate-controller $domainname
4. 创建服务:grails create-service $servciename
5. 创建Controller:grails create-controller $controllername
6. 打包:cd $projectname;grails war
3.2 HelloWorld例子
3.2.1 创建HelloWorld项目
进入$GRAILS_HOME,执行grails create-app HelloWorld,系统生成的目录如下:
%PROJECT_HOME%
+ grails-app
+ conf ---> 存放一些配置信息,比如数据源
+ controllers ---> 存放控制器
+ domain ---> 存放域对象(domain class)
+ i18n ---> 存放一些i18n相关的内容
+ services ---> 存放服务组件
+ taglib ---> 存放标签库
+ views ---> 存放视图组件
+ layouts ---> 存放布局组件
+ lib
+ spring ---> spring配置信息(可选)
+ hibernate ---> 配置hibernate配置信息
+ war
+ WEB-INF
3.2.2 配置数据源
这里使用的是grails自带的HSQLDB内存数据库,配置文件为DevelopmentDataSource.groovy,内容如下:
class DevelopmentDataSource {
boolean pooling = true
String dbCreate = "create-drop" // one of 'create', 'create-drop','update'
String url = "jdbc:hsqldb:mem:devDB"
String driverClassName = "org.hsqldb.jdbcDriver"
String username = "sa"
String password = ""
}
3.2.3 创建域类,控制器,视图
域类就是对应数据库的表的,Hello域就是对应到数据库的Hello表
进入HelloWorld目录后
Ø grails create-domain-class Hello (创建Hello域类)
编辑这个域,以适应自己的需求
class Hello {
Long id
String name
String saywhat
}
Ø grails generate-all Hello (创建Hello控制器和视图view)
Ø grails run-app (运行web服务)
默认是8080端口,指定端口grails -Dserver.port=80 run-app
在IE里输入http://127.0.0.1:8080
到此一个有增,删,改的web服务弄好了,系统给你做了大部分工作.
3.3 使用服务
Grails里的服务类似于java的jar包,是封装好的接口.
3.3.1 创建服务:grails create-service Hello
修改HelloWorld/grails-app/services/LoginService.groovy的内容为:
class HelloService {
boolean transactional = true
def sayHello(String name){
return name + "say: hello world!!!"
}
def serviceMethod() {
// TODO
}
}
3.3.2 修改controller
class HelloController {
HelloService helloService //定义服务
def index = { redirect(action:testhello,params:params) } //默认的action为testhello
def testhello = {//定义一个名为testhello的action
//从域类(就是数据库表)里查询数据
def hello = Hello.executeQuery("select id,name,saywhat from Hello")
def helloList = new ArrayList()
for(ehello in hello){
helloList.add(helloService.sayHello(ehello[1]))
}
//render到hello的视图就是hello.gsp,参数是model里的左边的helloList,右边的helloList是”def helloList”
render(view:'hello',model:[helloList:helloList])
}
……
}
3.3.3 添加hello.gsp
在views/hello目录下添加hello.gsp,代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="main" />
<title>Show Hello</title>
</head>
<body>
<div class="body">
<g:each in="${helloList}" var="varHelloList">
<h1>${varHelloList}</h1>
</g:each>
</div>
</body>
</html>
Web效果图:
4 部署服务
1. 到工程目录下,执行:grails war
2. 把*.war文件放在apache的webapp下,启动apache就可以了