網頁

2014年7月28日 星期一

Hello World!:GAE + Spring MVC + Maven + Eclipse


  1. 建立Maven專案




    1. 用 filter縮小範圍:org.apache.maven.archetypes

      選擇:
      Group Id: org.apache.maven.archetypes
      Artifact Id: maven-archetype-webapp



    2. 輸入:
      Group Id: 自己公司的名字
      Aftifact Id: 專案名稱



    3. 建立好的專案不知道為什麼只有src/main/resources,必須自己加入src/main/java (maven 只會compile src/main/java下面的classes)


      自行在maven的路徑下建立java資料夾


      update



      java出現了,以後程式就放這裡


  2. 設定pom檔
    (這pom是從各種可以執行的範本裡整合來的,有些內容尚待釐清)
    
     4.0.0
    
     com.tien
     webapp
    
     war
     0.0.1-SNAPSHOT
    
     webapp Maven Webapp
    
     http://maven.apache.org
    
     
      
       google-staging
       Google Staging
       https://oss.sonatype.org/content/repositories/comgoogleappengine-1004/
      
     
    
     
      UTF-8
      1
      1.9.7
      4.0.6.RELEASE
      1.6.6
     
    
     
         
         
      
       junit
       junit
       3.8.1
       test
      
      
      
      
       com.google.appengine
       appengine-api-1.0-sdk
       ${appengine.target.version}
      
      
      
      
       javax.servlet
       servlet-api
       2.5
       provided
      
      
       jstl
       jstl
       1.2
      
      
      
      
       org.springframework
       spring-core
       ${spring.version}
      
      
       org.springframework
       spring-context
       ${spring.version}
      
      
       org.springframework
       spring-beans
       ${spring.version}
      
      
      
      
       org.springframework
       spring-webmvc
       ${spring.version}
      
      
       org.springframework
       spring-web
       ${spring.version}
      
      
      
      
       org.slf4j
       slf4j-api
       ${org.slf4j-version}
      
      
       org.slf4j
       jcl-over-slf4j
       ${org.slf4j-version}
       runtime
      
      
       org.slf4j
       slf4j-log4j12
       ${org.slf4j-version}
       runtime
      
      
       log4j
       log4j
       1.2.15
       
        
         javax.mail
         mail
        
        
         javax.jms
         jms
        
        
         com.sun.jdmk
         jmxtools
        
        
         com.sun.jmx
         jmxri
        
       
       runtime
      
     
    
     
      webapp
    
      
       
        org.apache.maven.plugins
        2.5.1
        maven-compiler-plugin
        
         1.7
         1.7
        
       
    
       
        org.apache.maven.plugins
        maven-war-plugin
        2.3
        
         true
         
          
          
           ${basedir}/src/main/webapp/WEB-INF
           true
           WEB-INF
          
         
        
       
    
       
        com.google.appengine
        appengine-maven-plugin
        ${appengine.target.version}
       
      
     
    
    
    
  3. 設定GAE:在WEB-INF下建立appengine-web.xml


    appengine-web.xml:
    
        ooxx123
        1
        true
    
                   
    
  4. 設定Spring:
    同時設定IOC的application context與MVC的dispatcher sevelet。
    這二個context有階級的關係。
    application context在整個環境(包含一般類別)都可以呼叫;dispatcher sevelet涵蓋的範圍只包含有註冊的的路徑(在servlet的環境下可呼叫,而一般類別則無法呼叫)

    在WEB-INF下建立dispatch-servlet.xml及root-context.xml(application context)

    root-context.xml
    
     
     
      
    
    
    dispatch-servlet.xml
    
    
        
        
        
     
     
     
     
    
     
     
    
     
     
     
      
      
       
       
    
    
  5. 設定web.xml
    在web application啟動的同時,設定spring的context
    
    
     
     
      contextConfigLocation  /WEB-INF/spring/root-context.xml 
     
     
     
      org.springframework.web.context.ContextLoaderListener
     
    
     
     
      appServlet
      org.springframework.web.servlet.DispatcherServlet
      
       contextConfigLocation   /WEB-INF/spring/appServlet/dispatcher-servlet.xml  
      1
       
     
      appServlet
      /
     
    
    
    
    
  6. 測試一下,server選google app engine


    可喜可賀,設定檔都沒有出錯。dev app server is now running!!!



    至於java.io.FileNotFoundException: \WEB-INF\logging.properties (系統找不到指定的檔案。)是因為還沒建立log4j的設定檔。
     
  7. 建立spring mvc的hello world
     
    1. 在指定的package建立controller
      (也就是dispatcher-servlet.xml裡的
      <context:component-scan base-package="com.gae.test.controller" />)

      TestController
      @Controller
      //to specify this class is a controller. 
      //this pakage should be included in dispatcher-servlet.xml 
      //
      
      @RequestMapping( value="/test" )
      //requests which start with "/test" enter this class  
      public class TestController {
       
       @RequestMapping(value = "/hello", method = RequestMethod.GET)
       // url is "/test/hello" 
       public String hello(Locale locale, Model model) {
        System.out.println( "this is hello controller" );   
        return "hello"; // dispatch to /WEB-INF/views/hello.jsp
       }
       
      }
      
    2. 在指定的資料夾建立hello.jsp
      也就是dispatch-servlet裡的
      
        
        
       

      hello.jsp
      <html><head></head><body>Hello world!</body>





  • 測試一下
    在瀏覽器輸入http://localhost:8080/test/hello
    console:

    browser:

    大功告成!!!


  • 備註:
    google不是很喜歡spring的annotation,因為他們認為reflection的機制很沒效率。至於如何設定google認為有效率的方式可以參考這一篇:
    https://developers.google.com/appengine/articles/spring_optimization

    參考資料:
    https://developers.google.com/appengine/docs/java/gettingstarted/introduction
    http://www.loop81.com/2013/02/gae-google-app-engine-jpa2-maven-and.html
    http://rimo-art.com/2013/11/eclipse-spring-mvc-google-app-engine/

    3 則留言: