这是小弟第一次在论坛中发贴,之前一直在论坛潜水,一心看大牛们的文章,希望这文章不会招来牛牛们的鄙视,谢谢
我这个小框架的灵感来源于
http://www.ibm.com/developerworks/cn/xml/x-restfulsoa/index.html,目前唯一的功能就是实现REST风格的URL映射以及不同的HTTP方法(GET,POST,PUT和DELETE)对资源类的方法的映射,框架的使用很简单。
一.实现REST接口,接口定义为
public interface RESTResource
{
public void init();
public void create(Map<String, String> params, HttpServletRequest request,
HttpServletResponse response);
public void get(Map<String, String> params, HttpServletRequest request,
HttpServletResponse response);
public void update(Map<String, String> params, HttpServletRequest request,
HttpServletResponse response);
public void delete(Map<String, String> params, HttpServletRequest request,
HttpServletResponse response);
}
为了简单起见,目前仅仅采用了最简单的形式,和一个Servlet差不多,其中第一个参数params中存放了从URL中提取的参数名和值。
实际使用时可以继承AbstractRESTResource抽象类,这样就可以只覆盖自己需要的方法了。
二.添加URL映射规则的Annotation
@URLMapping("/blog/{blog_id}/comment/{comment_id}")
public class BlogComment extends AbstractRESTResource
{
@Override
public void get(Map<String, String> params, HttpServletRequest request,
HttpServletResponse response)
{
try
{
PrintWriter out = response.getWriter();
out.println("<h2>Comment(id:" + params.get("comment_id") + ") of blog(id:"
+ params.get("blog_id") + ")</h2>");
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
其中用“{}”来定义参数,比如上面代码中的注解“/blog/{blog_id}/comment/{comment_id}”里的blog_id和comment_id就是一个参数,匹配实际URL中的这一部分,比如“/blog/345/comment/12”这个URL就会被映射到这个资源上,并且参数blog_id的值为345,comment_id的值为12。一个URL映射里可以添加多个参数。
三.注册Listener
<filter>
<filter-name>RESTfulFilter</filter-name>
<filter-class>com.jstudio.rest.RESTResourceFilter</filter-class>
<init-param>
<param-name>resourceListFile</param-name>
<param-value>/WEB-INF/restResources.list</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RESTfulFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其中resourceListFile这个参数指定了资源列表文件。此文件时一个简单的文本文件,每一行是一个资源类的类名全称。
com.jstudio.rest.test.Blog
com.jstudio.rest.test.BlogList
com.jstudio.rest.test.BlogCommentList
com.jstudio.rest.test.BlogComment
这样当应用部署了以后就可以按照自己指定的URL规则来访问REST资源了。对应的方法会得到调用。
框架很简单,甚至很“愚蠢”,但是达到了我最开始需要的效果。它仅仅适合用来实现RESTful Web服务,如果是做普通的Web项目就不行,缺少了MVC的支持,没有页面模板等等。
接下来想实现的是:
- 对Guice或Spring等框架的支持,这样就可以为这些RESTResource实现依赖注入了
- 实现Java对象想xml和json的直接转换,这样就不需要开发者手动转换Java对象了
这个东西我只花了几个小时来做,还很不完整,只是个玩具。希望大牛们“批评批评”。
附件里是一个示例webapp和所有代码的eclipse工程。
- rest.rar (21.4 KB)
- 描述: 示例webapp的WAR文件,压缩了一下(直接上传提示文件类型错误)
- 下载次数: 196
分享到:
相关推荐
一超轻量RESTful框架—SlwRest(Super Lightweight)客户端及服务端代码小于100K,可替代变化很大,越来越重Jersey。
超轻量 php 框架 startmvc v2.1.2.zip
GuiLite超轻量UI框架 v3.6.zip
GuiLite(超轻量UI框架)是6千行代码的全平台UI框架,可以完美运行在iOS,Android,Windows(包含VR),Mac,单片机和市面所有的 ARM Linux物联网终端设备上。
RequestMethod支持GET, POST, DELETE, PUT 参数获取支持 @FormParam, @PathParam, @QueryParam, @HeaderParam等 内容支持常用的JSON, XML, TEXT 能够方便地实现Java复杂对象, List, Map对象与JSON/XML的互转换 ...
源码学习,压缩包解压密码:www.cqlsoft.com
基于PHP的BroPHP框架免费开源的超轻量级PHP框架正式版源码.zip
PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架正式版.zip PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架正式版.zip PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架正式版.zip
一种超轻量的log日志生成类
超轻量级MVC框架的设计和实现(源码),一个最简单最小巧的MVC框架,花哨的功能一个不要,越简洁越好,并且不使用XML配置文件,而是完全用Java 5注解配置。
基于PHP的BroPHP框架 免费开源的超轻量级PHP框架正式版.zip
基于PHP的BroPHP框架 免费开源的超轻量级PHP框架 正式版.zip
Biny是一款高性能的超轻量级PHP框架。遵循 MVC 模式,用于快速开发现代 Web 应用程序。Biny代码简洁优雅,对应用层,数据层,模板渲染层的封装简单易懂,能够快速上手使用
中文识别超轻量推理模型
中文识别超轻量训练模型
中文检测超轻量推理模型
中文检测超轻量训练模型
PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架 正式版.zip
StartMVC 是一款超轻量php7框架,面向对象开发,小巧、优雅、高效,遵循 Apache2 开源协议发布的,支持 Composer 和 RESTful 的 PHP 开源框架。 StartMVC 能够帮助开发者以最小的学习成本快速构建 Web 应用,在满足...
NULL 博文链接:https://fangjialong.iteye.com/blog/2031506