Groovy轻松入门--Grails实战基础篇 - 蛟龙居 - BlogJava
来源:百度文库 编辑:神马文学网 时间:2024/10/05 22:40:34
Groovy轻松入门--Grails实战基础篇
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入Groovy的爱河。学Groovy,Grails与学Java一样,在实战之前需要搭建开发环境,您可以在Groovy轻松入门--搭建Groovy开发环境 学习到如何搭建Groovy环境,之后我会讲一下如何搭建Grails环境,然后手把手地写个Demo程序告终,我还会抽空写篇“Groovy轻松入门--Grails实战之进阶篇”
一,搭建Grails环境
0,下载Grails(http://dist.codehaus.org/grails/grails-bin-0.4.2.zip )并解压到自己指定位置(我的位置是D:\D\MY_DEV\grails)
1,设置环境变量grails_home,过程与“设置环境变量groovy_home”相似
2,将%grails_home%\bin添加到环境变量path中,过程与“将groovy_home目录下的bin追加到环境变量path中”相似
二,创建Grails Demo程序
0,打开“命令行”,选择当前目录(我的为D:\Temp\grails_apps),在黑底白字的窗口中输入“grails create-app demo”,不包括双引号“”,在您的屏幕中可以看到类似下面的输出结果:
D:\Temp\grails_apps>grails create-app demo
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps
Environment set to production
Note: No plugin scripts found
Running script D:\D\MY_DEV\grails\scripts\CreateApp.groovy
[mkdir] Created dir: D:\Temp\grails_apps\demo\src
[mkdir] Created dir: D:\Temp\grails_apps\demo\src\java
[mkdir] Created dir: D:\Temp\grails_apps\demo\src\groovy
[mkdir] Created dir: D:\Temp\grails_apps\demo\src\test
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\controllers
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\services
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\domain
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\taglib
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\utils
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\views
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\views\layouts
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\i18n
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\conf
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-tests
[mkdir] Created dir: D:\Temp\grails_apps\demo\scripts
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\js
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\css
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\images
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\classes
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\META-INF
[mkdir] Created dir: D:\Temp\grails_apps\demo\lib
[mkdir] Created dir: D:\Temp\grails_apps\demo\spring
[mkdir] Created dir: D:\Temp\grails_apps\demo\hibernate
[copy] Copying 2 files to D:\Temp\grails_apps\demo
[copy] Copying 2 files to D:\Temp\grails_apps\demo\web-app\WEB-INF
[copy] Copying 1 file to D:\Temp\grails_apps\demo\web-app\WEB-INF
[copy] Copying 1 file to D:\Temp\grails_apps\demo\web-app\WEB-INF
[copy] Copying 5 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\tld
[copy] Copying 119 files to D:\Temp\grails_apps\demo\web-app
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\conf
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\conf
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\conf
[copy] Copying 7 files to D:\Temp\grails_apps\demo\grails-app
[mkdir] Created dir: D:\Temp\grails_apps\demo\plugins\core\grails-app\taglib
[mkdir] Created dir: D:\Temp\grails_apps\demo\plugins\core\grails-app\utils
[copy] Copying 7 files to D:\Temp\grails_apps\demo\plugins\core\grails-app\
taglib
[copy] Copying 3 files to D:\Temp\grails_apps\demo\plugins\core\grails-app\
utils
[copy] Copying 1 file to D:\Temp\grails_apps\demo\spring
[copy] Copying 1 file to D:\Temp\grails_apps\demo
[copy] Copying 1 file to D:\Temp\grails_apps\demo
[copy] Copying 1 file to D:\Temp\grails_apps\demo
Created Grails Application at D:\Temp\grails_apps/demo
D:\Temp\grails_apps>
通过“grails create-app”这个命令,Grails自动帮我们创建了开发所需的工程环境
1,进入demo目录,在“命令行”中输入“cd demo”,回车,然后再输入“grails create-domain-class User”创建domain class即类似于pojo的pogo,它对应MVC中的Model,不过由Grails自动创建的pogo是空的,需要自己添加属性,约束(constraints)等。输出结果如下所示:
D:\Temp\grails_apps\demo>grails create-domain-class User
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\CreateDomainClass.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\domain
Created at D:\Temp\grails_apps\demo/grails-app/domain/User.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-tests
Created Tests at D:\Temp\grails_apps\demo/grails-tests/UserTests.groovy
D:\Temp\grails_apps\demo>
2,进入D:\Temp\grails_apps\demo\grails-app\domain(这个目录中存放着所有的domain class),打开User.groovy,修改为如下内容:
class User {
String name
String password
String toString() {
" $name : $password "
}
static constraints = {
name(blank: false )
password(blank: false , size: 6 .. 16 )
}
}
contraints这个类变量是定义一些约束的,比如name不能为空白,password不能为空白而且长度在6到16之间(包括6和16)
3,在“命令行”中输入“grails generate-all User”,为User产生所有CRUD操作需要的代码(如控制器UserController.groovy)和页面(如list.gsp),输出结果如下所示:
D:\Temp\grails_apps\demo>grails generate-all User
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\GenerateAll.groovy
Compiling sources
[delete] Deleting directory D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\vie
ws
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18
n
[copy] Copying 2 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp\views
[copy] Copied 2 empty directories to 1 empty directory under D:\Temp\grails
_apps\demo\web-app\WEB-INF\grails-app\views
[native2ascii] Converting 1 file from D:\Temp\grails_apps\demo\grails-app\i18n t
o D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18n
Attempting to load [13] core plugins
Grails plug-in [i18n] with version [0.4.2] loaded successfully
Grails plug-in [quartz] with version [0.4.2] loaded successfully
Grails plug-in [core] with version [0.4.2] loaded successfully
Grails plug-in [domainClass] with version [0.4.2] loaded successfully
Grails plug-in [controllers] with version [0.4.2] loaded successfully
Attempting to load [0] user defined plugins
Grails plug-in [dataSource] with version [0.4.2] loaded successfully
Grails plug-in [codecs] with version [0.4.2] loaded successfully
Grails plug-in [hibernate] with version [0.4.2] loaded successfully
Grails plug-in [services] with version [0.4.2] loaded successfully
Grails plug-in [scaffolding] with version [0.4.2] loaded successfully
Generating views for domain class [User]
Generating list view for domain class [User]
list view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\list.gsp
Generating show view for domain class [User]
Show view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\show.gsp
Generating edit view for domain class [User]
Edit view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\edit.gsp
Generating create view for domain class [User]
Create view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\create
.gsp
Generating controller for domain class [User]
Controller generated at .\grails-app\controllers\UserController.groovy
D:\Temp\grails_apps\demo>
4,在“命令行”中,输入“grails create-controller Login”,创建登陆(login)的控制器LoginController,它对应MVC中的Controller,让它负责登陆相关业务,输出如下:
D:\Temp\grails_apps\demo>grails create-controller Login
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\CreateController.groovy
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\views\login
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\controllers
Created Controller at D:\Temp\grails_apps\demo/grails-app/controllers/LoginContr
oller.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-tests
Created ControllerTests at D:\Temp\grails_apps\demo/grails-tests/LoginController
Tests.groovy
D:\Temp\grails_apps\demo>
5,修改demo\grails-app\controllers\LoginController.groovy的内容为:
class LoginController {
LoginService loginService
def index = { }
def login = {
User u = new User()
u.properties = params
if (params.name && params.password) {
boolean pass = loginService.check(u, flash)
if (pass) {
render(view: "ok", model: [user: u])
} else {
render(view: "login", model: [user: u])
}
} else {
render(view: "login", model: [user: u])
}
}
}
大家或许也看到了LoginService这个类,我将在后面演示创建它,这个LoginService类封装了所有登陆相关的业务逻辑,Grails自动将其注入到LoginController中
6,在“命令行”中,输入“grails create-service Login”,创建LoginService.groovy,输出:
D:\Temp\grails_apps\demo>grails create-service Login
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\CreateService.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\services
Created Service at D:\Temp\grails_apps\demo/grails-app/services/LoginService.gro
ovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-tests
Created ServiceTests at D:\Temp\grails_apps\demo/grails-tests/LoginServiceTests.
groovy
D:\Temp\grails_apps\demo>
7,修改demo\grails-app\services\LoginService.groovy的内容为:
class LoginService {
boolean transactional = true
def check(User u, flash) {
def user = User.findWhere(name: u.name, password: u.password)
if (user) {
flash.message = "Welcome ${u.name}"
return true
} else {
flash.error = "Invalid ${u.name} with ${u.password}"
return false
}
}
def serviceMethod() {
// TODO
}
}
8,在demo\grails-app\views下创建login目录,在login目录下创建login.gsp和ok.gsp,它们对应MVC中的View,内容分别为:
login.gsp:
Grails Demo
ok.gsp:
${user?.name} : ${user?.password}
9,修改demo\grails-app\conf\ApplicationBootStrap.groovy,将一个User实例保存到数据库(grails自带hsqldb和jetty)中,内容如下:
class ApplicationBootStrap {
def init = { servletContext ->
new User(name: "demo", password: "123456").save()
}
def destroy = {
}
}
10,在“命令行”中,输入“grails run-app”,运行我们的Web应用,输出如下:
D:\Temp\grails_apps\demo>grails run-app
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to development
Running script D:\D\MY_DEV\grails\scripts\RunApp.groovy
Compiling sources
[delete] Deleting directory D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\vie
ws
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18
n
[copy] Copying 8 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp\views
[native2ascii] Converting 1 file from D:\Temp\grails_apps\demo\grails-app\i18n t
o D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18n
Attempting to load [13] core plugins
Grails plug-in [i18n] with version [0.4.2] loaded successfully
Grails plug-in [quartz] with version [0.4.2] loaded successfully
Grails plug-in [core] with version [0.4.2] loaded successfully
Grails plug-in [domainClass] with version [0.4.2] loaded successfully
Grails plug-in [controllers] with version [0.4.2] loaded successfully
Attempting to load [0] user defined plugins
Grails plug-in [dataSource] with version [0.4.2] loaded successfully
Grails plug-in [codecs] with version [0.4.2] loaded successfully
Grails plug-in [hibernate] with version [0.4.2] loaded successfully
Grails plug-in [services] with version [0.4.2] loaded successfully
Grails plug-in [scaffolding] with version [0.4.2] loaded successfully
[RuntimeConfiguration] Configuring for environment: Development
Building new Hibernate SessionFactory
Neither ‘urlMap‘ nor ‘mappings‘ set on SimpleUrlHandlerMapping
64 beans defined in application context [org.codehaus.groovy.grails.commons.spri
ng.GrailsWebApplicationContext;hashCode=6971605]
Using MessageSource [org.springframework.context.support.ReloadableResourceBundl
eMessageSource: basenames=[WEB-INF/grails-app/i18n/messages]]
Unable to locate ApplicationEventMulticaster with name ‘applicationEventMulticas
ter‘: using default [org.springframework.context.event.SimpleApplicationEventMul
ticaster@181d405]
[copy] Copying 8 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp\views
[GrailsContextLoader] Grails application loaded.
Initializing filter ‘grailsWebRequest‘
Filter ‘grailsWebRequest‘ configured successfully
Initializing filter ‘reloadFilter‘
Filter ‘reloadFilter‘ configured successfully
Initializing servlet ‘grails‘
FrameworkServlet ‘grails‘: initialization started
Using context class [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicat
ionContext] for servlet ‘grails‘
Using MultipartResolver [org.springframework.web.multipart.commons.CommonsMultip
artResolver@1945696]
Using LocaleResolver [org.springframework.web.servlet.i18n.CookieLocaleResolver@
1c0bec5]
Unable to locate ThemeResolver with name ‘themeResolver‘: using default [org.spr
ingframework.web.servlet.theme.FixedThemeResolver@1984161]
No HandlerAdapters found in servlet ‘grails‘: using default
Unable to locate RequestToViewNameTranslator with name ‘viewNameTranslator‘: usi
ng default [org.springframework.web.servlet.view.DefaultRequestToViewNameTransla
tor@688d6f]
FrameworkServlet ‘grails‘: initialization completed in 187 ms
Servlet ‘grails‘ configured successfully
11,打开浏览器,输入:http://localhost:8080/demo/login/login ,在Name处输入demo,Password处输入123456,点击‘Login’,跳转到成功页面:
Welcome demo
demo : 123456
想象一下用您平时做项目时所用的框架组合(比如SSH)来创建同样的Web应用程序,您立刻会感受,Grails让我们专注于业务逻辑,而不用浪费时间在那些scaffolding code(如配置文件)上。从今天开始,您不用再羡慕那些Ruby程序员所用的RoR了,您大可以使用Grails来高效开发Web应用。
时间比较仓促,有些细节问题日后补充,请各位原谅。您也可以访问Grails官方网站(http://www.grails.org)进一步学习。
在学习任何东西之前,最重要的是培养兴趣,Groovy世界最耀眼的技术之一--Grails相信大家早已耳闻,我将通过Grails实战系列文章向您展现Grails的迷人风采,使您感受到Grails的魅力,以至疯狂地爱上Grails,并坠入Groovy的爱河。学Groovy,Grails与学Java一样,在实战之前需要搭建开发环境,您可以在Groovy轻松入门--搭建Groovy开发环境 学习到如何搭建Groovy环境,之后我会讲一下如何搭建Grails环境,然后手把手地写个Demo程序告终,我还会抽空写篇“Groovy轻松入门--Grails实战之进阶篇”
一,搭建Grails环境
0,下载Grails(http://dist.codehaus.org/grails/grails-bin-0.4.2.zip )并解压到自己指定位置(我的位置是D:\D\MY_DEV\grails)
1,设置环境变量grails_home,过程与“设置环境变量groovy_home”相似
2,将%grails_home%\bin添加到环境变量path中,过程与“将groovy_home目录下的bin追加到环境变量path中”相似
二,创建Grails Demo程序
0,打开“命令行”,选择当前目录(我的为D:\Temp\grails_apps),在黑底白字的窗口中输入“grails create-app demo”,不包括双引号“”,在您的屏幕中可以看到类似下面的输出结果:
D:\Temp\grails_apps>grails create-app demo
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps
Environment set to production
Note: No plugin scripts found
Running script D:\D\MY_DEV\grails\scripts\CreateApp.groovy
[mkdir] Created dir: D:\Temp\grails_apps\demo\src
[mkdir] Created dir: D:\Temp\grails_apps\demo\src\java
[mkdir] Created dir: D:\Temp\grails_apps\demo\src\groovy
[mkdir] Created dir: D:\Temp\grails_apps\demo\src\test
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\controllers
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\services
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\domain
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\taglib
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\utils
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\views
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\views\layouts
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\i18n
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\conf
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-tests
[mkdir] Created dir: D:\Temp\grails_apps\demo\scripts
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\js
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\css
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\images
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\classes
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\META-INF
[mkdir] Created dir: D:\Temp\grails_apps\demo\lib
[mkdir] Created dir: D:\Temp\grails_apps\demo\spring
[mkdir] Created dir: D:\Temp\grails_apps\demo\hibernate
[copy] Copying 2 files to D:\Temp\grails_apps\demo
[copy] Copying 2 files to D:\Temp\grails_apps\demo\web-app\WEB-INF
[copy] Copying 1 file to D:\Temp\grails_apps\demo\web-app\WEB-INF
[copy] Copying 1 file to D:\Temp\grails_apps\demo\web-app\WEB-INF
[copy] Copying 5 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\tld
[copy] Copying 119 files to D:\Temp\grails_apps\demo\web-app
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\conf
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\conf
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\conf
[copy] Copying 7 files to D:\Temp\grails_apps\demo\grails-app
[mkdir] Created dir: D:\Temp\grails_apps\demo\plugins\core\grails-app\taglib
[mkdir] Created dir: D:\Temp\grails_apps\demo\plugins\core\grails-app\utils
[copy] Copying 7 files to D:\Temp\grails_apps\demo\plugins\core\grails-app\
taglib
[copy] Copying 3 files to D:\Temp\grails_apps\demo\plugins\core\grails-app\
utils
[copy] Copying 1 file to D:\Temp\grails_apps\demo\spring
[copy] Copying 1 file to D:\Temp\grails_apps\demo
[copy] Copying 1 file to D:\Temp\grails_apps\demo
[copy] Copying 1 file to D:\Temp\grails_apps\demo
Created Grails Application at D:\Temp\grails_apps/demo
D:\Temp\grails_apps>
通过“grails create-app”这个命令,Grails自动帮我们创建了开发所需的工程环境
1,进入demo目录,在“命令行”中输入“cd demo”,回车,然后再输入“grails create-domain-class User”创建domain class即类似于pojo的pogo,它对应MVC中的Model,不过由Grails自动创建的pogo是空的,需要自己添加属性,约束(constraints)等。输出结果如下所示:
D:\Temp\grails_apps\demo>grails create-domain-class User
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\CreateDomainClass.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\domain
Created at D:\Temp\grails_apps\demo/grails-app/domain/User.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-tests
Created Tests at D:\Temp\grails_apps\demo/grails-tests/UserTests.groovy
D:\Temp\grails_apps\demo>
2,进入D:\Temp\grails_apps\demo\grails-app\domain(这个目录中存放着所有的domain class),打开User.groovy,修改为如下内容:
class User {
String name
String password
String toString() {
" $name : $password "
}
static constraints = {
name(blank: false )
password(blank: false , size: 6 .. 16 )
}
}
contraints这个类变量是定义一些约束的,比如name不能为空白,password不能为空白而且长度在6到16之间(包括6和16)
3,在“命令行”中输入“grails generate-all User”,为User产生所有CRUD操作需要的代码(如控制器UserController.groovy)和页面(如list.gsp),输出结果如下所示:
D:\Temp\grails_apps\demo>grails generate-all User
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\GenerateAll.groovy
Compiling sources
[delete] Deleting directory D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\vie
ws
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18
n
[copy] Copying 2 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp\views
[copy] Copied 2 empty directories to 1 empty directory under D:\Temp\grails
_apps\demo\web-app\WEB-INF\grails-app\views
[native2ascii] Converting 1 file from D:\Temp\grails_apps\demo\grails-app\i18n t
o D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18n
Attempting to load [13] core plugins
Grails plug-in [i18n] with version [0.4.2] loaded successfully
Grails plug-in [quartz] with version [0.4.2] loaded successfully
Grails plug-in [core] with version [0.4.2] loaded successfully
Grails plug-in [domainClass] with version [0.4.2] loaded successfully
Grails plug-in [controllers] with version [0.4.2] loaded successfully
Attempting to load [0] user defined plugins
Grails plug-in [dataSource] with version [0.4.2] loaded successfully
Grails plug-in [codecs] with version [0.4.2] loaded successfully
Grails plug-in [hibernate] with version [0.4.2] loaded successfully
Grails plug-in [services] with version [0.4.2] loaded successfully
Grails plug-in [scaffolding] with version [0.4.2] loaded successfully
Generating views for domain class [User]
Generating list view for domain class [User]
list view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\list.gsp
Generating show view for domain class [User]
Show view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\show.gsp
Generating edit view for domain class [User]
Edit view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\edit.gsp
Generating create view for domain class [User]
Create view generated at D:\Temp\grails_apps\demo\.\grails-app\views\user\create
.gsp
Generating controller for domain class [User]
Controller generated at .\grails-app\controllers\UserController.groovy
D:\Temp\grails_apps\demo>
4,在“命令行”中,输入“grails create-controller Login”,创建登陆(login)的控制器LoginController,它对应MVC中的Controller,让它负责登陆相关业务,输出如下:
D:\Temp\grails_apps\demo>grails create-controller Login
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\CreateController.groovy
[mkdir] Created dir: D:\Temp\grails_apps\demo\grails-app\views\login
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\controllers
Created Controller at D:\Temp\grails_apps\demo/grails-app/controllers/LoginContr
oller.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-tests
Created ControllerTests at D:\Temp\grails_apps\demo/grails-tests/LoginController
Tests.groovy
D:\Temp\grails_apps\demo>
5,修改demo\grails-app\controllers\LoginController.groovy的内容为:
class LoginController {
LoginService loginService
def index = { }
def login = {
User u = new User()
u.properties = params
if (params.name && params.password) {
boolean pass = loginService.check(u, flash)
if (pass) {
render(view: "ok", model: [user: u])
} else {
render(view: "login", model: [user: u])
}
} else {
render(view: "login", model: [user: u])
}
}
}
大家或许也看到了LoginService这个类,我将在后面演示创建它,这个LoginService类封装了所有登陆相关的业务逻辑,Grails自动将其注入到LoginController中
6,在“命令行”中,输入“grails create-service Login”,创建LoginService.groovy,输出:
D:\Temp\grails_apps\demo>grails create-service Login
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to production
Running script D:\D\MY_DEV\grails\scripts\CreateService.groovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-app\services
Created Service at D:\Temp\grails_apps\demo/grails-app/services/LoginService.gro
ovy
[copy] Copying 1 file to D:\Temp\grails_apps\demo\grails-tests
Created ServiceTests at D:\Temp\grails_apps\demo/grails-tests/LoginServiceTests.
groovy
D:\Temp\grails_apps\demo>
7,修改demo\grails-app\services\LoginService.groovy的内容为:
class LoginService {
boolean transactional = true
def check(User u, flash) {
def user = User.findWhere(name: u.name, password: u.password)
if (user) {
flash.message = "Welcome ${u.name}"
return true
} else {
flash.error = "Invalid ${u.name} with ${u.password}"
return false
}
}
def serviceMethod() {
// TODO
}
}
8,在demo\grails-app\views下创建login目录,在login目录下创建login.gsp和ok.gsp,它们对应MVC中的View,内容分别为:
login.gsp:
Grails Demo
${flash.error}
ok.gsp:
${flash.message}
${user?.name} : ${user?.password}
9,修改demo\grails-app\conf\ApplicationBootStrap.groovy,将一个User实例保存到数据库(grails自带hsqldb和jetty)中,内容如下:
class ApplicationBootStrap {
def init = { servletContext ->
new User(name: "demo", password: "123456").save()
}
def destroy = {
}
}
10,在“命令行”中,输入“grails run-app”,运行我们的Web应用,输出如下:
D:\Temp\grails_apps\demo>grails run-app
Welcome to Grails 0.4.2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: D:\D\MY_DEV\grails
Base Directory: D:\Temp\grails_apps\demo
Environment set to development
Running script D:\D\MY_DEV\grails\scripts\RunApp.groovy
Compiling sources
[delete] Deleting directory D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\vie
ws
[mkdir] Created dir: D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18
n
[copy] Copying 8 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp\views
[native2ascii] Converting 1 file from D:\Temp\grails_apps\demo\grails-app\i18n t
o D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-app\i18n
Attempting to load [13] core plugins
Grails plug-in [i18n] with version [0.4.2] loaded successfully
Grails plug-in [quartz] with version [0.4.2] loaded successfully
Grails plug-in [core] with version [0.4.2] loaded successfully
Grails plug-in [domainClass] with version [0.4.2] loaded successfully
Grails plug-in [controllers] with version [0.4.2] loaded successfully
Attempting to load [0] user defined plugins
Grails plug-in [dataSource] with version [0.4.2] loaded successfully
Grails plug-in [codecs] with version [0.4.2] loaded successfully
Grails plug-in [hibernate] with version [0.4.2] loaded successfully
Grails plug-in [services] with version [0.4.2] loaded successfully
Grails plug-in [scaffolding] with version [0.4.2] loaded successfully
[RuntimeConfiguration] Configuring for environment: Development
Building new Hibernate SessionFactory
Neither ‘urlMap‘ nor ‘mappings‘ set on SimpleUrlHandlerMapping
64 beans defined in application context [org.codehaus.groovy.grails.commons.spri
ng.GrailsWebApplicationContext;hashCode=6971605]
Using MessageSource [org.springframework.context.support.ReloadableResourceBundl
eMessageSource: basenames=[WEB-INF/grails-app/i18n/messages]]
Unable to locate ApplicationEventMulticaster with name ‘applicationEventMulticas
ter‘: using default [org.springframework.context.event.SimpleApplicationEventMul
ticaster@181d405]
[copy] Copying 8 files to D:\Temp\grails_apps\demo\web-app\WEB-INF\grails-a
pp\views
[GrailsContextLoader] Grails application loaded.
Initializing filter ‘grailsWebRequest‘
Filter ‘grailsWebRequest‘ configured successfully
Initializing filter ‘reloadFilter‘
Filter ‘reloadFilter‘ configured successfully
Initializing servlet ‘grails‘
FrameworkServlet ‘grails‘: initialization started
Using context class [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicat
ionContext] for servlet ‘grails‘
Using MultipartResolver [org.springframework.web.multipart.commons.CommonsMultip
artResolver@1945696]
Using LocaleResolver [org.springframework.web.servlet.i18n.CookieLocaleResolver@
1c0bec5]
Unable to locate ThemeResolver with name ‘themeResolver‘: using default [org.spr
ingframework.web.servlet.theme.FixedThemeResolver@1984161]
No HandlerAdapters found in servlet ‘grails‘: using default
Unable to locate RequestToViewNameTranslator with name ‘viewNameTranslator‘: usi
ng default [org.springframework.web.servlet.view.DefaultRequestToViewNameTransla
tor@688d6f]
FrameworkServlet ‘grails‘: initialization completed in 187 ms
Servlet ‘grails‘ configured successfully
11,打开浏览器,输入:http://localhost:8080/demo/login/login ,在Name处输入demo,Password处输入123456,点击‘Login’,跳转到成功页面:
Welcome demo
demo : 123456
想象一下用您平时做项目时所用的框架组合(比如SSH)来创建同样的Web应用程序,您立刻会感受,Grails让我们专注于业务逻辑,而不用浪费时间在那些scaffolding code(如配置文件)上。从今天开始,您不用再羡慕那些Ruby程序员所用的RoR了,您大可以使用Grails来高效开发Web应用。
时间比较仓促,有些细节问题日后补充,请各位原谅。您也可以访问Grails官方网站(http://www.grails.org)进一步学习。
Groovy轻松入门--Grails实战基础篇 - 蛟龙居 - BlogJava
Groovy和Grails简介
购房基础入门篇
实战Struts-Menu - 空间站 - BlogJava
实战Struts-Menu - 空间站 - BlogJava
基础入门
入门基础
欢迎光临 - 琳婕小筑-老猫的理想 - XSLT轻松入门 -
一步一步学Data Guard之基础篇-入门基础
风水地理学讲义(基础入门篇)
四驱车使用入门之基础篇
四驱车使用入门之基础篇
Maven入门--概念与实例 - Jiangshachina - BlogJava
实战秘笈 技术分析 基本面分析 股票基础问题答疑 新手投资“备忘录” 投资入门指南 - 实...
实战秘笈 技术分析 基本面分析 股票基础问题答疑 新手投资“备忘录” 投资入门指南 - 谈...
实战秘笈 技术分析 基本面分析 股票基础问题答疑 新手投资“备忘录” 投资入门指南 - 谈...
炒股必读 :入门基础
古典音乐基础入门
摄影基础入门1
摄影基础入门
奇门遁甲入门基础秘籍
奇门遁甲入门基础秘籍
数码摄影入门基础
奇门遁甲入门基础秘籍