首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Dojo 离线技术应用:支持离线功能的 Web 编辑器-2

Dojo 离线技术应用:支持离线功能的 Web 编辑器-2

服务器端的实现如前文所述,服务器端的代码是用 Java 写就的。它由以下几个类构成:
Main.java
Document.java
Documents.java
MoxieException.java
MoxieServlet.java
其中的 Main.java 是一个辅助类,用于快速启动在线编辑器的服务端代码,此处我们使用了内嵌的 Derby 数据库,以及一个内嵌的微型 Web                服务器 Jetty。
Document.java 是用于描述文档对象的一个普通的 JavaBean,包含了一系列 getter 和 setter                方法。其中还有一个判断文档名称合法性的方法。
Documents.java 相当于数据访问对象,用于提供访问 Derby 数据库的相应方法。有关访问数据库的细节,请参见代码。
MoxieException.java 是我们定义的一个异常类,没有什么特别之处。
MoxieServlet.java 是服务器端代码的主体。该类暴露了一套 REST 风格的 API。
下面的类图总结了服务器端代码所用到的全部类:
图 1. 服务器端实现类图REST 服务说明在我们的服务器端代码中,我们将每一个文档当作是一个对象,并以文档名称对其进行标识。如:
/somePageName1
/somePageName2
为了查看一个文档,我们只需发起一个 GET 请求,并给予文档名称。假如文档不存在,服务器代码将返回 404 错误(Not                Found);假如文档名称有误则返回 403 错误(Forbidden)。
要查看所有文档的清单,我们只需要发起一个 GET 请求,并给予形如“/*”这样的 URL 格式。
假如客户端在 HTTP 请求的 Accept 头中提供了“text/html”,服务端代码将返回一个简单的 HTML                页面,其中包含了一个所有编辑文档的清单:
清单 1.服务返回格式—— HTML
1
2
3
4
5
6
7
8
<html>
<body>
    <ul>
        <li><a href="somePageName1">somePageName1</a></li>
        <li><a href="somePageName2">somePageName2</a></li>
    </ul>
   </body>
</html>




相反,假如客户端提供的是“text/javascript”,那么我们将会以 JSON 格式返回:
清单 2.服务返回格式—— JSON
1
2
3
[
   "somePageName1", "somePageName2"
]




假如要新建文档或更新已有文档,我们只需发起一个 POST 请求,并给予文档名称,同时提供文档的内容。对于文档内容,我们可以选择以经过编码的 URL                参数形式提交,或者以 HTML 文本格式作为 HTTP 请求的 body 进行提交。对于前者,Content-Type                头必须为“application/x-www-form-urlencoded”,并且参数名必须为“content”,参数值必须经过编码。如果是后者,Content-Type                头必须为“text/html”。
如果文档创建成功,则服务端返回 201(Created),如果文档已存在或文档名称不正确,则返回                403(Forbidden),如果文档更新成功,则返回 200。
对于文档的删除,由于 Safari 和 Opera 在处理 DELETE 请求时存在问题,所以我们除了提供直接发送 DELETE                请求的方式外,还提供了 POST 请求的方式,并在 HTTP 请求头中给予“X-Method-Override: DELETE”,以此来指示                DELETE 行为。假如删除成功,服务端将返回 410(Gone),假如文档不存在则返回 404 错误(Not                Found),假如文档名称不合法则返回 403(Not Allowed)。
最后,我们还提供了一个以 GET 方式访问的 /download/ 链接。这将会返回一组 JSON                格式的数据,其中列出了所有文档的内容,例如:
清单 3.download 服务返回格式
1
2
3
4
[
    {fileName: "message1", content: "hello world"},
    {fileName: "message2", content: "goodbye world"}
]

返回列表