Google App Engine Java 版上构建电子书分享网站

news/2024/4/28 4:04:00/文章来源:https://blog.csdn.net/lgb934/article/details/5758121

文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送

样例代码

级别: 初级

张 军, 软件工程师, IBM 中国软件开发中心

2009 年 10 月 27 日

“云计算”是目前热门的技术方向,本文从 Google 的云计算平台 App Engine 入手,简单介绍了 Google 面向 Java 开发人员的云计算平台。从一个实际的电子书分享应用构建出发,讲述了如何在 Google App Engine 平台上构建这个应用程序。

“云计算”基本概念的介绍

云计算空间

您是否希望随时获取最新的云计算消息?是否想得到云计算相关的技术知识?developerWorks 云计算空间就是这样一个云计算信息资源的门户,在这里您可以了解来自 IBM 和业界其他媒体的最新信息,并且得到如何在云环境中使用 IBM 软件的入门知识。

IBM 在 Amazon EC2 云计算环境中提供了 DB2、Informix、Lotus、WebSphere 等方面的 AMI 镜像资源。您只需按使用量支付少量费用,就可以使用到云上的数据、门户、Web 内容管理、情景应用等服务。欢迎您随时访问 云计算空间,获取更多信息。

根据维基百科上的定义,云计算是一种动态易扩展,而且通常是通过互联网提供的虚拟化的资源计算方式, 用户不需要了解云内部的细节,也不必具有云内部的专业知识,或者直接控制基础设施。云计算包括基础设施即服务(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 支持的概览
图 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

    App Engine 现在支持 Java 1.5 版本以上的 JDK,可以从 这里 下载。

  • 安装 Eclipse 3.3 或者 3.4

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

  • 安装 Google App Engine 的 SDK

    运行 Eclipse 之后,在 Help > Software Updates 中获取 Google App Engine 的插件。



    图 2. 安装 Google App Engine Eclipse 插件
    图 2. 安装 Google App Engine Eclipse 插件

    Eclipse 3.3(Europa), 从这里 下载 安装。

    Eclipse 3.4(Ganymede),从这里 下载 安装。

构建一个 Hello World 应用

  1. 安装成功之后,就可以构建一个 Google App Engine 的应用了。选择 File>New>Web Application Project

    图 3. 新建 Web 项目
    图 3. 新建 Web 项目
  2. 输入项目名称 Hello World 。

    图 4. 输入项目名称
    图 4. 输入项目名称
  3. 运行该应用。

    图 5. 运行
    图 5. 运行
  4. 应用运行起来之后,访问 http://localhost:8080 。

    图 6. 运行结果
    图 6. 运行结果
  5. 将应用部署到 Google App Engine 上

    恭喜您,到这里,你已经构建出了第一个 Google App Engine 上的应用,您可以将它部署到 Google 的 App Engine 平台上了。您需要做的就是申请一个帐号。

构建一个电子书分享网站

到这里,读者对 Google App Engine for Java 已经有了直接的印象。下面将通过一个更复杂的例子,讲述利用 Google App Engine 中的编程时的核心概念。

用例介绍

一个电子书分享网站,最基础的需要满足的功能是允许用户上传文件和搜索文件。对于用户的浏览需求,列出最近上传的文件也是一个基本的需求。用例图如下图所示。


图 7. 用例图
图 7. 用例图

存储对象模型

存储模型是一个应用开发的核心之一,在 Google 的 App Engine 的平台,开发人员看不到数据库的概念,不需要创建数据库。 Google 的 App Engine 提供了基于 JPA 和 JDO 的两种技术给开发人员。这里我们利用 JDO 技术来做数据的存取。下面是电子书分享网站的 JDO 的对象模型。


图 8. 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 模型
图 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 应用。






回页首


下载

描述名字大小下载方法
本文样例代码SampleCode.zip98 KBHTTP
关于下载方法的信息


参考资料

学习
  • Google App Engine:访问 Google's App Engine 的主页。
  • 有关 JDO 的介绍。
  • “Google App Engine for Java:第 1 部分:运转起来!”(developerWorks,2009 年 8 月):您将了解到为什么 Google App Engine for Java 将成为您构建高度可伸缩的杀手级应用程序的开发平台。
  • “Google App Engine for Java:第 2 部分:构建杀手级应用程序”(developerWorks,2009 年 8 月):本文将通过一个分步指南,使用 Google App Engine for Java 来编写和部署一个简单的联系人管理应用程序。
  • “Google App Engine for Java:第 3 部分:持久性和关系”(developerWorks,2009 年 9 月):介绍了 App Engine 当前基于 Java 的持久性框架。
  • “Java 开发 2.0:使用 Google App Engine”(developerWorks,2009 年 9 月):解释了如何使用 Google 的 App Engine for Java 迅速实现 Java 开发 2.0 概念。
  • “Java 数据对象上机实践”(Paul Monday,developerWorks,2002 年 7 月):本教程通过讨论、代码样例和实际经验演示了 JDO 的实际应用。
  • 云计算空间:访问 IBM® Cloud Computing Central 获得丰富的云资源。
  • 浏览 技术书店 获得有关这些主题和其他技术主题的图书。
  • developerWorks Java 技术专区:查找数百篇有关 Java 编程各个方面的文章。

获得产品和技术
  • 本文中的部署在 Google App Engine 上的 样例应用。

讨论
  • 加入 My developerWorks 社区。


关于作者

 

张军,2006 年 7 月毕业于清华大学计算机科学与技术系,获得硕士学位。随后加入 IBM 中国软件开发中心,一直在 Web 2.0 组从事新兴技术研发。



转自:http://www.ibm.com/developerworks/cn/java/j-lo-gap/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_869516.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端组件网站备份

Ant Design https://ant.design/index-cn https://mobile.ant.design/index-cn Vue-ydui 是 YDUI Touch 的一个Vue2.x实现版本&#xff0c;专为移动端打造 http://vue.ydui.org/docs/#/quickstart Mand-Mobile 曼德移动 Mand Mobile是面向金融场景设计的移动端组件库&#xf…

如何在IIS上搭建WAP网站

1.在IIS平台创建一个新的MIME类型 先选择网站的【属性】&#xff0c;再加入MIME类型&#xff0c;然后选择【HTTP 头】标签。 2.选择【MIME类型】&#xff0c;打开添加新MIME类型对话框&#xff0c;如图&#xff1a; 3.新建如下MIME类型 Associated ExtensionMIME Typewmltext/…

Android常用第三方网站统计工具比较

第一、CNZZ&#xff08;友盟&#xff09; 1、目前&#xff0c;CNZZ统计已经被阿里收购&#xff0c;改名友盟。从功能上看肯定是比以前丰富很多&#xff0c;因为当前的友盟是集合友盟、缔元信.网络数据、CNZZ三家公司合并&#xff0c;打造全域数据的工具。 2、友盟拥有统计分析…

网站使用了UrlRewriter.dll伪静态,iis需要配置

来源&#xff1a;http://blog.sina.com.cn/s/blog_4a24068d0100rw7o.html http://blog.sina.com.cn/s/blog_78be7b670100tdbk.html 注&#xff1a;我网上看了很多资料&#xff0c;都不完整&#xff0c;没做成功&#xff0c;完整版如下&#xff1a; 网站使用了UrlRewriter.dll伪…

跨境电商网站建设 三大跨境品牌厂商综合评测

随着全球化贸易的融合以及国家对外贸的支持&#xff0c;跨境电商越来越火&#xff0c;让商品出海已经是不少中大型企业的战略性布局。虽然自建站会比SaaS有着灵活扩展的优势&#xff0c;但如何解决商品出海横跨在企业和用户眼前的语言难题&#xff0c;是不少企业需要考虑的一个…

网站开发流程-WEB开发的流程

1. web开发流程概括 1.&#xff09;项目的角色划分 如果不包括前期和后期的市场推广及销售人员&#xff0c;开发团队一般可以划分为项目负责人、程序员、美工三个角色。 项目负责人习惯称为项目经理&#xff0c;负责项目的人事协调、时间进度等安排&#xff0c;以及处理一些…

DIV+CSS布局门户网站

最终效果图&#xff1a; 首先分析一下网页&#xff0c;了解到整体排版情况&#xff0c;这是网页中比较重要的&#xff0c;因为排好版式内容就可以随意的替换&#xff0c;方便网页的更新等等。 版式分析图&#xff1a; 搭好版式后&#xff0c;其他内容就好处理了&#xff0c;不…

.NET开发人员必知的八个网站

独家&#xff1a;.NET开发人员必知的八个网站 本文发表于 2009-06-24 15:55 | <script src"http://tougao.csdn.net/count.php?id212160"></script> 20294次阅读 | 共有评论(91 )条 发表评论 关键词&#xff1a;.Net | 感谢ydj9931 的提供 | 收藏这…

Firefox和IE通用的三则网站重构的技巧(转)

from:http://www.4studio.cn/a/div-css/201108048543.html Firefox和IE通用的三则网站重构的技巧 使用zoom、overflow解决IE6、IE7、FF下嵌套容器清除浮动问题我们经常遇到一个容器外面套一个边框&#xff0c;边框高度随容器高度变化&#xff0c;但是当边框内容器设置了浮动属性…

Coolite+Form网站后台身份验证

这个登录验证,coolite不是重点.重点是对网站进行Form方式的身份验证.对这块不太熟悉,查阅了一些资料.得以解决,分享出来! 先来用coolite做个登录界面吧,既然用了coolite. <ext:ScriptManager runat"server"> </ext:ScriptManager> <ext:Window runat&…

关于今天解决IE6样式兼容及.net3.5网站发布问题

1.上下两个div在ie6下有间距&#xff0c;但在ie7下正常&#xff0c;如何修正&#xff1f; overflow:hidden 两个DIV的样式加上这个overflow:hidden&#xff0c;或者上面的DIV加上这个 2.ie6下png图片和png背景透明 参考资料:http://mynee.blogbus.com/logs/24109302.html 3.区别…

新手站长如何利用管理面板快速建站?

越来越多的人选择个人建站&#xff0c;个人站长虽然门槛很低&#xff0c;但是有些朋友觉得Linux服务器各种复杂的命令脚本让自己没法搭建环境。今天我分别用一键部署和手动上传源码两个操作步骤以图文形式分别对如何利用管理面板快速建站进行讲解。 注&#xff1a;WordPress 是…

新手如何用管理面板搭建WordPress网站

服务器最大的用途&#xff0c;就是可以搭建网站&#xff0c;许多人都认为搭建网站是一件很难的事情&#xff0c;因为包含许多的比较专业东西&#xff0c;比如服务器、编程之类的&#xff0c;确实&#xff0c;在几年前是这样的&#xff0c;普通人想要自己做一个网站太难了 但是…

小白必看,从选服务器到建站的具体操作方法

作为一个新手&#xff0c;想拥有一个自己独立网站&#xff0c;博客该如何操作&#xff0c;搭建网站呢&#xff1f;其实也很简单看完这篇文章你也就懂了&#xff01; 1.申请服务器 具体过程我就不做重点描述了&#xff0c;大概步骤就是1.选择服务器厂商&#xff1b;2.选择服务器…

用hexo搭建个人网站并部署在github

1.安装git 2.安装node.js 安装git和node.js已在之前的文章发布&#xff0c;详情请参考以上文章&#xff0c;本文从安装hexo开始 3.安装hexo 以管理员方式打开git bash&#xff08;找到git安装路径&#xff0c;右键git bash的快捷方式选择以管理员方式运行&#xff09; 创建…

java通过Cookie实现网站自动登录

第一步&#xff0c;登陆的时候如果选择了[自动登录]的选项&#xff0c;则需要在登陆成功后&#xff0c;附加下面的代码 应为一般网站都提供保存用户名的功能&#xff0c;所以我把这个写到了外面。只有密码是单独处理的。 其中的host就是你的域名 login.jsp Java代码 String …

《大型网站技术架构》一书读后感

最近业余时间看了《大型网站技术架构——核心原理与案例分析》一书&#xff0c;李智慧著。全书只有200多页&#xff0c;但涵盖了网站技术架构的方方面面&#xff0c;细节虽然没有过多阐述&#xff0c;但都提供了技术思路&#xff0c;读后让人收获颇多。不过最大的收获并非技术层…

保证网站健康运营是网站优化的重要保证

保证网站健康运营是网站优化的重要保证&#xff0c;那么怎样才能保证网站健康运营呢?本篇文章中笔者和大家分享保证网站健康运营的三支护航舰队。 第一、做站前估量网站价值 何谓网站价值?网站价值就是说你的网站是否对用户有用&#xff0c;是否对seo行业有用&#xff0c;甚…

百度对作弊网站和垃圾网站不时的穷追猛打

但是在今天无意的搜索过程当中看到&#xff0c;网站的图文、网站的时长。猜测百度可能会继续抓取网站相关的优质内容。也就是说&#xff0c;网站的优化应该把重心从外部往内部进行转移(在优化中一直存在争议外链为皇还是内容为皇&#xff0c;通过去年6月到今年现在多做内容关键…

要坚持知己知彼原则 网站分析

网站分析是每一位SEO优化工作者的必备技能&#xff0c;当优化人员拿到一个需要进行优化的网站时&#xff0c;首先要做的就是对该网站做一个系统性的分析&#xff0c;然后找出该网站存在的缺陷&#xff0c;并对该网站的竞争者做出相应的分析报告&#xff0c;指出这个网站的可行性…