1)简述
主要使用restlet框架来实现rest风格的web服务构建。为什么选用restlet呢?主要从以下角度考虑:
1.完全的rest实现,完全抛弃Servlet API
2.轻量级框架,可作为j2se程序运行,又可运行在现有的web容器中
虽然struts2.0 spring3.0 jrs…很多都可以实现restful的应用,但是restlet可完美集成在spring等框架中
3.服务端/客户端 支持
*其他特性请参照restlet的官网翻译片段
2)具体实现
1.采用restlet框架来支持rest,封装dbcp数据库连接池来提供数据库访问。
2.对某一类性的资源采用同一application来管理,此类型的资源可能有若干个资源类来支持。
下面以Rss新闻的服务来详细介绍下相关的实现以及配置
1.首先建立的一个web工程,这里采用了Tomcat服务器作为单机调试用
2.Web-inf/web.xml来注册restlet的监听
3.Web-inf/restlet.xml来定义application级别的restful url映射
以图中所示工程为例,当请求http://主机ip/UniteRestfulService/RssNewsPlaces的时候 ,restlet将会自动将此请求交由unite.client.service.rssNews. RssNewsApplication类来进行处理
4.在application这一级别的类中(比如RssNewsApplication)类,可以对资源进行进一步的映射配置
通过如上进一步的配置,http://主机ip/UniteRestfulService/RssNewsPlaces这个请求将会映射到RssNewsPlacesResource类;而http://主机ip/UniteRestfulService/RssNewsPlaces/{place}这个请求将会映射到RssNewsResource类。(上面的这一步骤体现了restlet对url-资源这一rest概念的基本阐释)
5.unite.common.DbcpBean类利用dbcp对数据库访问进行了单例模式封装。能够保证一定的数据库操作性能。
database.properties利用资源文件对数据库以及连接池做参数配置。
定义数据库地址,用户名密码,jdbc驱动类型,数据库连接池初始链接数,最大连数,最大闲置连接数,最大等待响应时间毫秒数等。
上面是一段使用DbcpBean的 程序,检索了RssUrl表,将表中存在的地区名,以及该地区所对应的新闻链接地址读取出来。
6.回到RssNewsPlacesResource/RssNewsResource资源类
在*Resource资源类中,提供对资源的GET/PUT/POST/DELETE操作。Restlet提供多种方式的实现方式。比如注解方式,或者重写父类方法的方式等。
注解方式中,采用
类似 这样的注解,来声明某个方法的属性等。
而重写父类方法方式也可以更加灵活。
部分省略
通过XstreamRepresentation或者JacksonRepresentation等restlet功能拓展类,将某实体类的实例转化为符合XML/JSON请求的数据类型的数据。
7.实际运行结果
URL: http://localhost:8080/UniteRestfulService/RssNewsPlaces对应的返回结果xml形式呈现(截图为部分数据)
URL:http://localhost:8080/UniteRestfulService/RssNewsPlaces/北京 对应的返回结果xml形式呈现(截图为部分数据)
通过xml/json方式,可以很方便的将返回结果提供给调用方进行使用;如果使用restlet的客户端类,可以更加方便的将xml/json数据转换为对应的实体类。
3)总结
通过一个业务的实现,揭示了restlet的一个实际应用。同时保留对系统性能提高的可能性。比如集成spring,采用更高性能的数据库连接池等。同时restlet对敏感信息的保护机能等尚需完善。