JAVA—咖啡館

          ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

          在學習任何東西之前,最重要的是培養興趣,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 ,請留意朝花夕拾——Groovy & Grails中的“最新版本”提示)并解壓到自己指定位置(我的位置是D:DMY_DEVgrails)

          1,設置環境變量GRAILS_HOME(注意大寫),過程與“設置環境變量GROOVY_HOME”相似。

          2,將%GRAILS_HOME%bin添加到環境變量path中,過程與“將GROOVY_HOME目錄下的bin追加到環境變量path中”相似。

          (如果只想進行Grails開發,可以不設GROOVY_HOME)

          二,創建Grails Demo程序

          0,打開“命令行”,選擇當前目錄(我的為D:Tempgrails_apps),在黑底白字的窗口中輸入“grails create-app demo”,不包括雙引號“”,在您的屏幕中可以看到類似下面的輸出結果:

          D:Tempgrails_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:DMY_DEVgrails
                      Base Directory: D:Tempgrails_apps
                      Environment set to production
                      Note: No plugin scripts found
                      Running script D:DMY_DEVgrailsscriptsCreateApp.groovy
                      [mkdir] Created dir: D:Tempgrails_appsdemosrc
                      [mkdir] Created dir: D:Tempgrails_appsdemosrcjava
                      [mkdir] Created dir: D:Tempgrails_appsdemosrcgroovy
                      [mkdir] Created dir: D:Tempgrails_appsdemosrctest
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-app
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appcontrollers
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appservices
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appdomain
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-apptaglib
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-apputils
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appviews
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appviewslayouts
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appi18n
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appconf
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-tests
                      [mkdir] Created dir: D:Tempgrails_appsdemoscripts
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-app
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appjs
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appcss
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appimages
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appWEB-INFclasses
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appMETA-INF
                      [mkdir] Created dir: D:Tempgrails_appsdemolib
                      [mkdir] Created dir: D:Tempgrails_appsdemospring
                      [mkdir] Created dir: D:Tempgrails_appsdemohibernate
                      [copy] Copying 2 files to D:Tempgrails_appsdemo
                      [copy] Copying 2 files to D:Tempgrails_appsdemoweb-appWEB-INF
                      [copy] Copying 1 file to D:Tempgrails_appsdemoweb-appWEB-INF
                      [copy] Copying 1 file to D:Tempgrails_appsdemoweb-appWEB-INF
                      [copy] Copying 5 files to D:Tempgrails_appsdemoweb-appWEB-INFtld
                      [copy] Copying 119 files to D:Tempgrails_appsdemoweb-app
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-appconf
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-appconf
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-appconf
                      [copy] Copying 7 files to D:Tempgrails_appsdemograils-app
                      [mkdir] Created dir: D:Tempgrails_appsdemopluginscoregrails-apptaglib
                      [mkdir] Created dir: D:Tempgrails_appsdemopluginscoregrails-apputils
                      [copy] Copying 7 files to D:Tempgrails_appsdemopluginscoregrails-app
                      taglib
                      [copy] Copying 3 files to D:Tempgrails_appsdemopluginscoregrails-app
                      utils
                      [copy] Copying 1 file to D:Tempgrails_appsdemospring
                      [copy] Copying 1 file to D:Tempgrails_appsdemo
                      [copy] Copying 1 file to D:Tempgrails_appsdemo
                      [copy] Copying 1 file to D:Tempgrails_appsdemo
                      Created Grails Application at D:Tempgrails_apps/demo
                      D:Tempgrails_apps>
                      


           

          通過“grails create-app”這個命令,Grails自動幫我們創建了開發所需的工程環境。其實您現在就已經擁有了一個可運行的Web應用程序,然后進入demo目錄(“cd demo”),輸入“grails run-app”,回車,啟動這個‘五臟俱全’的程序雛形,打開瀏覽器,輸入 http://localhost:8080/demo ,回車,看到了吧 :) 讓我們繼續吧,請停止這個程序(Ctrl + C)

          1,進入demo目錄,在“命令行”中輸入“cd demo”,回車,然后再輸入“grails create-domain-class User”創建domain class即類似于pojo的pogo,它對應MVC中的Model,不過由Grails自動創建的pogo是空的,需要自己添加屬性,約束(constraints)等。輸出結果如下所示:

          D:Tempgrails_appsdemo>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:DMY_DEVgrails
                      Base Directory: D:Tempgrails_appsdemo
                      Environment set to production
                      Running script D:DMY_DEVgrailsscriptsCreateDomainClass.groovy
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-appdomain
                      Created  at D:Tempgrails_appsdemo/grails-app/domain/User.groovy
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-tests
                      Created Tests at D:Tempgrails_appsdemo/grails-tests/UserTests.groovy
                      D:Tempgrails_appsdemo>
                      

          2,進入D:Tempgrails_appsdemograils-appdomain(這個目錄中存放著所有的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:Tempgrails_appsdemo>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:DMY_DEVgrails
                      Base Directory: D:Tempgrails_appsdemo
                      Environment set to production
                      Running script D:DMY_DEVgrailsscriptsGenerateAll.groovy
                      Compiling sources
                      [delete] Deleting directory D:Tempgrails_appsdemoweb-appWEB-INFgrails-a
                      pp
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appWEB-INFgrails-appvie
                      ws
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appWEB-INFgrails-appi18
                      n
                      [copy] Copying 2 files to D:Tempgrails_appsdemoweb-appWEB-INFgrails-a
                      ppviews
                      [copy] Copied 2 empty directories to 1 empty directory under D:Tempgrails
                      _appsdemoweb-appWEB-INFgrails-appviews
                      [native2ascii] Converting 1 file from D:Tempgrails_appsdemograils-appi18n t
                      o D:Tempgrails_appsdemoweb-appWEB-INFgrails-appi18n
                      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:Tempgrails_appsdemo.grails-appviewsuserlist.gsp
                      Generating show view for domain class [User]
                      Show view generated at D:Tempgrails_appsdemo.grails-appviewsusershow.gsp
                      Generating edit view for domain class [User]
                      Edit view generated at D:Tempgrails_appsdemo.grails-appviewsuseredit.gsp
                      Generating create view for domain class [User]
                      Create view generated at D:Tempgrails_appsdemo.grails-appviewsusercreate
                      .gsp
                      Generating controller for domain class [User]
                      Controller generated at .grails-appcontrollersUserController.groovy
                      D:Tempgrails_appsdemo>
                      

          4,在“命令行”中,輸入“grails create-controller Login”,創建登陸(login)的控制器LoginController,它對應MVC中的Controller,讓它負責登陸相關業務,輸出如下:

          D:Tempgrails_appsdemo>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:DMY_DEVgrails
                      Base Directory: D:Tempgrails_appsdemo
                      Environment set to production
                      Running script D:DMY_DEVgrailsscriptsCreateController.groovy
                      [mkdir] Created dir: D:Tempgrails_appsdemograils-appviewslogin
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-appcontrollers
                      Created Controller at D:Tempgrails_appsdemo/grails-app/controllers/LoginContr
                      oller.groovy
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-tests
                      Created ControllerTests at D:Tempgrails_appsdemo/grails-tests/LoginController
                      Tests.groovy
                      D:Tempgrails_appsdemo>
                      

          5,修改demograils-appcontrollersLoginController.groovy的內容為:

          class LoginController {
                      def loginService
                      def index = { }
                      def login = {
                      User u = new User()
                      u.properties = params
                      if (params.name && params.password) {
                      def user = loginService.check(u)
                      if (user) {
                      flash.message = "Welcome $"
                      render(view: "ok", model: [user: user])
                      } else {
                      flash.error = "Invalid $ with $"
                      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:Tempgrails_appsdemo>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:DMY_DEVgrails
                      Base Directory: D:Tempgrails_appsdemo
                      Environment set to production
                      Running script D:DMY_DEVgrailsscriptsCreateService.groovy
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-appservices
                      Created Service at D:Tempgrails_appsdemo/grails-app/services/LoginService.gro
                      ovy
                      [copy] Copying 1 file to D:Tempgrails_appsdemograils-tests
                      Created ServiceTests at D:Tempgrails_appsdemo/grails-tests/LoginServiceTests.
                      groovy
                      D:Tempgrails_appsdemo>
                      

          7,修改demograils-appservicesLoginService.groovy的內容為:

          class LoginService {
                      boolean transactional = true
                      def check(User u) {
                      def user = User.findWhere(name: u.name, password: u.password)
                      return user
                      }
                      def serviceMethod() {
                      // TODO
                      }
                      }
                      

          ok.gsp:

          9,修改demograils-appconfApplicationBootStrap.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:Tempgrails_appsdemo>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:DMY_DEVgrails
                      Base Directory: D:Tempgrails_appsdemo
                      Environment set to development
                      Running script D:DMY_DEVgrailsscriptsRunApp.groovy
                      Compiling sources
                      [delete] Deleting directory D:Tempgrails_appsdemoweb-appWEB-INFgrails-a
                      pp
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appWEB-INFgrails-appvie
                      ws
                      [mkdir] Created dir: D:Tempgrails_appsdemoweb-appWEB-INFgrails-appi18
                      n
                      [copy] Copying 8 files to D:Tempgrails_appsdemoweb-appWEB-INFgrails-a
                      ppviews
                      [native2ascii] Converting 1 file from D:Tempgrails_appsdemograils-appi18n t
                      o D:Tempgrails_appsdemoweb-appWEB-INFgrails-appi18n
                      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:Tempgrails_appsdemoweb-appWEB-INFgrails-a
                      ppviews
                      [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
                      

          查看本文來源

          posted on 2008-12-04 10:25 rogerfan 閱讀(293) 評論(0)  編輯  收藏 所屬分類: 【Groovy學習】
          主站蜘蛛池模板: 平湖市| 和政县| 肥城市| 哈尔滨市| 河津市| 中卫市| 泸水县| 方城县| 航空| 广宗县| 宜昌市| 天门市| 蓬安县| 旬阳县| 中西区| 晋城| 宕昌县| 和硕县| 通海县| 丹凤县| 北流市| 吉首市| 永新县| 成安县| 临澧县| 兴隆县| 平陆县| 茌平县| 乌审旗| 白河县| 阳高县| 长汀县| 独山县| 彰武县| 郓城县| 剑河县| 中卫市| 合作市| 安塞县| 色达县| 石渠县|