转载请标明原文地址:http://blog.csdn.net/jiangsq12345/archive/2011/03/02/6219186.aspx
之前写过一遍关于GAE+JDO搭建商业网站的帖子,而这篇帖子的目的是在原有的源代码基础上稍加改动,让该商业网站支持网络web RESTful服务,本文使用 一个开源项目 Jersey (Jersey is the open source, production quality, JAX-RS (JSR 311) Reference Implementation for building RESTful Web services. )
GAE支持对Jersey的开发,但是新手用起来比较困难,想把个人的经验跟大家分享一下,好让大家少走些弯路
PS: 也可以将Jersey运用到Android等系统开发软件,道理应该差不多,都是google的产品
概念
表象化状态转变 (英文:Representational State Transfer ,简称REST )是Roy Fielding 博士在2000年他的博士论文中提出来的一种软件架构 风格。
目前在三种主流的Web服务 实现方案中,因为REST模式的Web服务 与复杂的SOAP 和XML-RPC 对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。
web服务是基于C/S的模式,所以要分别开发客户端,服务器端。Jersey已经包括所有需要的函数库
假如你的服务器已经搭建好,现在只是想再在此基础上开发Web服务,那是一件比较轻松的事情,因为服务器端的原代码基本上不用改动,我们要做的仅仅是在服务器端加入几个资料URL类,然后开发一个客户端
下面列一下开发过程中容易出错的一些地方
1. 需要在网络服务器的配置文件 web.xml,添加一段代码,目的是告诉服务器如何处理我们服务器端的URL
此例告诉网络服务器我们的网络服务URL都在 /resources/ 这个目录后
2. Jersey 支持 JAXB (JAVA API for XML Binding),可以将一个java类转化为 XML 或者 JSON 传输。
此类前必须要有 @XmlRootElement 标签
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4
3. 需要远程传输的JAVA类内的变量属性必须为 Public ,否则会出错
4.从原理上来说 Jersey 是支持Session的 ( Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 <!-- [if gte mso 10]> HttpSession ),但是在实际操作过程中,服务器端的 URL资源每次调用时都实例化,导致新的实例化对象无法找到之前对象的Session。也就说每次都为客户创建一个新的Session(即使是旧客户),所以从某种意思上来说Jersey无法使用Session。
仔细想想也觉得有道理,因为网络服务一般都是无状态的、不可持续的,所以解决办法是从客户端控制
附一个URL资源类供参考:
附客户端:
希望对大家有些帮助
参考链接:
Jersey官网: http://jersey.java.net/
维基百科: http://zh.wikipedia.org/wiki/REST