程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Google App Engine Java版上構建電子書分享網站

在Google App Engine Java版上構建電子書分享網站

編輯:關於JAVA

簡介:“雲計算”是目前熱門的技術方向,本文從 Google 的雲計算平台 App Engine 入手,簡單介 紹了 Google 面向 Java 開發人員的雲計算平台。從一個實際的電子書分享應用構建出發,講述了如何在 Google App Engine 平台上構建這個應用程序。

“雲計算”基本概念的介紹

根據維基百科上的定義,雲計算是一種動態易擴展,而且通常是通過互聯網提供的虛擬化的資源計算 方式,用戶不需要了解雲內部的細節,也不必具有雲內部的專業知識,或者直接控制基礎設施。雲計算包 括基礎設施即服務(IaaS)、平台即服務(PaaS)和軟件即服務(SaaS)以及其它依賴於互聯網滿足客戶 計算需求的技術趨勢。雲計算服務通常提供通用的通過浏覽器訪問的在線商業應用,軟件和數據存儲在服 務器上。本文的介紹主要在“平台即服務”這個層次上。在這個層次上,Google 所提供的技術即 Google App Engine 。

Google 的“雲計算”平台

Google 作為一個搜索引擎,在其發展過程中不斷地追求更高的可伸縮型和性能,逐漸發展出一套以自 由技術為基礎的良好的解決方案,其中包括 Google File System、BigTable 以及 Map Reduce 等。基於 這些技術,Google 發展出了稱之為 App Engine 的平台,可以允許開發人員在它之上開發應用,同時也 利用上了 Google 所提供的基礎設施,在可擴展性等非功能性的需求上獲得好處,從而可以更加集中精力 地解決業務的需求。

Google App Engine 最早於 2008 年 4 月發布,最初支持的開發語言是 Python 。今年 4 月, Google App Engine 已經宣布了對 Java 語言的支持。下圖是 Google App Engine for Java 支持的概覽 。

圖 1. Google App Engine for Java 支持的概覽

在 Web 應用開發上,Google App Engine 支持 JSP 和 Servlet 技術;在數據存儲上,Google App Engine 支持 JDO 和 JPA 兩套機制,開發人員在面向對象的層次考慮數據的持久化,不需要考慮關系數 據庫。此外,Google App Engine 還提供一系列常用的服務,例如郵件收發、圖像處理和緩存等。

本文將通過一個簡單的實例來展示如何在 Google App Engine for Java 平台上構建 Web 應用。

准備開發環境

Google App Engine 支持兩種開發方式:基於集成開發工具 Eclipse 和不基於 Eclipse 。由於 Eclipse 是廣大 Java 開發人員使用最多的工具,本文將介紹基於 Eclipse 安裝 Google App Engine SDK 並開發部署應用到 Google App Engine 上。下面是簡要的過程:

安裝 JDK 1.5 或者 1.6

安裝 Eclipse 3.3 或者 3.4

下載 3.3 以上版本的 Eclipse 中的一款即可。

安裝 Google App Engine 的 SDK

運行 Eclipse 之後,在 Help > Software Updates 中獲取 Google App Engine 的插件。

圖 2. 安裝 Google App Engine Eclipse 插件

構建一個 Hello World 應用

安裝成功之後,就可以構建一個 Google App Engine 的應用了。選擇 File>New>Web Application Project。

圖 3. 新建 Web 項目

輸入項目名稱 Hello World 。

圖 4. 輸入項目名稱

運行該應用。

圖 5. 運行

應用運行起來之後,訪問 http://localhost:8080 。

圖 6. 運行結果

將應用部署到 Google App Engine 上

恭喜您,到這裡,你已經構建出了第一個 Google App Engine 上的應用,您可以將它部署到 Google 的 App Engine 平台上了。您需要做的就是申請一個帳號。

構建一個電子書分享網站

到這裡,讀者對 Google App Engine for Java 已經有了直接的印象。下面將通過一個更復雜的例子 ,講述利用 Google App Engine 中的編程時的核心概念。

用例介紹

一個電子書分享網站,最基礎的需要滿足的功能是允許用戶上傳文件和搜索文件。對於用戶的浏覽需 求,列出最近上傳的文件也是一個基本的需求。用例圖如下圖所示。

圖 7. 用例圖

存儲對象模型

存儲模型是一個應用開發的核心之一,在 Google 的 App Engine 的平台,開發人員看不到數據庫的 概念,不需要創建數據庫。Google 的 App Engine 提供了基於 JPA 和 JDO 的兩種技術給開發人員。這 裡我們利用 JDO 技術來做數據的存取。下面是電子書分享網站的 JDO 的對象模型。

圖 8. JDO 對象模型

示例演示:上傳電子書的用例

下面針對用戶上傳一個文檔這個用例,講述如何實現這個功能。

構建上傳文件頁面

在工程的 war 目錄下,添加一個新的文件 upload.html,在該文件中包含如下的代碼。

<form method="post" action="upload" enctype="multipart/form-data">
   <table>
     <tbody>
       <tr><td><strong>*Please select a  file</strong></td></tr>
       <tr><td><input name="efile" type="file"  id="fileNode"></td></tr>
       <tr><td><strong>*Please set the file's  title</strong></td></tr>
       <tr><td><input name="filename" type="text"  size=60></td></tr>
       <tr><td><strong>File tags</strong></td></tr>
       <tr><td><input name="tags" type="text" size=60>
     <label>seperate by whitespace, like
     <i><b>Google appengine</b></i>
   </label></td>
   </tr>
       <tr><td><strong>File description</strong></td></tr>
       <tr><td>
     <textarea name="description" rows="5" cols="50"></textarea>
   </td></tr>
       <tr><td><strong>your name</strong></td></tr>
       <tr><td><input name="username" type="text"  size=60></td></tr>
       <tr><td><strong>your email</strong></td></tr>
       <tr><td><input name="useremail" type="text"  size=60></td></tr>
     </tbody>
   </table>
   <input type="submit" value="upload">
</form>

構建文件上傳處理的 servlet

利用 apache 的 commons 的文件上傳的庫,該 servlet 將上傳的內容解析成 File 對象。

圖 9. Servlet 模型

持久化改文件

應為 File 類已經添加了 JDO 需要的注釋,如下。

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class File {
   @PrimaryKey
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   private Key key;

   @Persistent
   private String username;

   @Persistent
   private String useremail;

   @Persistent
   private Date uploadDate;

   @Persistent
   private String filename; //could be a filename or a url...

   @Persistent
   private String description; //could be a filename or a url...

   @Persistent
   private String mimeType; //pdf,ppt, chm etc.

   @Persistent
   private com.google.appengine.api.datastore.Blob file;

   @Persistent
   private Set<Key> tags = new HashSet<Key>(); // associated  tags

利用 JDO 的規范提供的 API,可以持久化該對象到 Google 的 App Engine 的存儲設施上。

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
   pm.makePersistent(file);
} finally {
   pm.close();
}

注意,這裡需要首先在在項目的 classpath 的 META-INF 目錄下有 jdoconfig.xml,其內容如下。

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

   <persistence-manager-factory name="transactions-optional">
     <property name="javax.jdo.PersistenceManagerFactoryClass"
       value="org.datanucleus.store.appengine.jdo.
     DatastoreJDOPersistenceManagerFactory"/>
     <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
     <property name="javax.jdo.option.NontransactionalRead" value="true"/>
     <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
     <property name="javax.jdo.option.RetainValues" value="true"/>
     <property name="datanucleus.appengine.autoCreateDatastoreTxns"
    value="true"/>
   </persistence-manager-factory>
</jdoconfig>

小結

本文介紹了雲計算領域的一個重要廠商 Google 的 Appengine for Java 的開發平台。通過一個實際 的例子講述了如何使用該平台開發 Web 應用。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved