星期一, 9月 20, 2010

2010-9-17-Google App Engine Class 1

2010-9-17-Google App Engine Class 1

建置開發環境
  • Java SE SDK
  • Eclipse 3.4 以上


實做環境上面, 我在 openSUSE 上使用
  • eclipse 3.4-236.2
  • java-1_6_0-sun (我移除了 openjdk 改用 java-sun)
  • java-1_6_0-sun-devel


Google 應用引擎首頁
http://code.google.com/intl/zh-TW/appengine/

應用程式控制台
https://appengine.google.com/

Object /Relate Mapping

永續保存
  • JDO Java Data Objects
  • JPA  Java Persistence API


推薦的書籍或是參考資源


Notes: 在 Eclipse 中新增 Ganymede 安裝來源( 這樣安裝 Eclipse 的plugin 才不會產生錯誤, 預設沒有安裝)

Eclipse 3.4 (Ganymede)

  1. Select Help > Software Updates...
  2. Select the Available Software tab.
  3. Click Manage Sites...
  4. Make sure the Ganymede Update Site is in your list of Available Software Sites, and checked. If it's not in the list, click Add... to add it. The Ganymede Update Site's URL is http://download.eclipse.org/releases/ganymede/


如果沒有安裝 ganymede安裝來源 會有以下錯誤訊息
Cannot complete the request.  See the details. Unsatisfied dependency: [com.google.gdt.eclipse.suite.e34.feature.feature.group ......

安裝 Eclipse 3.4 的 Google App Engine 的plugin

http://code.google.com/intl/zh-TW/eclipse/docs/install-eclipse-3.4.html

http://dl.google.com/eclipse/plugin/3.4

Notes:
  • 如果發現有安裝 plugin 但是又產生錯誤, 可以嘗試把 ~/.eclipse 目錄移除, 再重新安裝
  • 發現如果以 一般使用者安裝, 會有權限的問題,這個部份還有待研究(以root 安裝後, 接下來以一般使用者 執行是沒有問題的)
    • Cannot connect to keystore.    This trust engine is read only.  An error occurred while installing the items    Error saving manipulator.    /usr/share/eclipse/eclipse.ini (拒絕不符權限的操作)



Lab1: 建立第一個專案

以google 帳號登入 GAE 的主控台

應用程式控制台
https://appengine.google.com/

建立第一個專案

Application Identifier 必須獨一無二
輸入 專案名稱(例如 helloworld-名稱 )
--> Create Applicaion


開啟 Eclipse 開啟 GAE 的 Eclipse 的專案

File --> New  --> Other --> 展開 Google -->  Web Application Project --> Next

輸入 Project 名稱, 輸入 Package 名稱  -->  Finish



打開 HelloworldServlet.java (位於 src/my.lab.helloworld )
程式內容如下

package my.lab.helloworld;

import java.io.IOException;
import javax.servlet.http.*;

@SuppressWarnings("serial")
public class HelloworldServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world");
}
}


點選 HelloworldServlet.java , 按滑鼠右鍵 --> Run As --> Web Applicaion
應該會出現以下訊息

2010/9/17 下午 01:37:40 com.google.apphosting.utils.jetty.JettyLogger info
資訊: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
2010/9/17 下午 01:37:40 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
資訊: Successfully processed /home/max/workspace/Helloworld/war/WEB-INF/appengine-web.xml
2010/9/17 下午 01:37:40 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
資訊: Successfully processed /home/max/workspace/Helloworld/war/WEB-INF/web.xml
2010/9/17 下午 09:37:40 com.google.appengine.tools.development.DevAppServerImpl start
資訊: The server is running at http://localhost:8888/

開啟 瀏覽器 於URL 輸入 http://localhost:8888
應該會看到成功的畫面


設定並佈署 Helloworld 專案到 Google App Engine
利用 Eclipse 工具列上的 Deploy App Engine project 來佈署

輸入 e-mail 及密碼  --> Deploy  ( 要先點選 App Engine project settings.. 來設定 ID )

可以於 App Engine project settings 畫面 點選 My applications

開啟 Google App Engine 控制中心
查詢 Application 名稱, 填入到 Application ID 欄位 --> 點選 OK

回到 Deploy Project to Google App Engine 視窗 點選 Deploy



成功的話, 應該會在 Eclipse 內看到下列訊息

Creating staging directory
Scanning for jsp files.
Scanning files on local disk.
Initiating update.
Cloning 1 static files.
Cloning 16 application files.
Uploading 3 files.
Uploaded 1 files.
Uploaded 2 files.
Uploaded 3 files.
Initializing precompilation...
Deploying new version.
Will check again in 1 seconds.
Will check again in 2 seconds.
Will check again in 4 seconds.
Will check again in 8 seconds.
Will check again in 16 seconds.
Will check again in 32 seconds.
Closing update: new version is ready to start serving.
Uploading index definitions.
Deployment completed successfully

測試
http://專案名稱.appspot.com


Notes:
中文的問題可以加入以下程式
resp.setCharacterEncoding(“UTF-8”);


Notes: 如果要刪除應用程式, 可在該程式內
  • Administration --> Application Settings 去停用及刪除該應用程式 ( 刪除需要一天的時間)

沒有留言: