Struts2中的 REST插件

阿超 发表于 2009-08-24 09:59 | 来源: | 阅读 481 次

     Struts 2.1增加了REST插件,通过REST插件提供REST支持。REST插件以Convention插件为基础,因此无需使用XML进行配置管理。Struts 2.1通过REST插件完全可以提供让人和机器客户端共同使用的资源,并支持Ruby On Rails风格的URL。

RestActionMapper简介
    从本质上来看,Struts 2依然是一个MVC框架,最初设计Struts 2时并没有按REST架构进行设计,因此Struts 2本质上并不是一个REST框架。但因为Struts 2提供了良好的可扩展性,因此允许通过REST插件将其扩展成支持REST的框架。REST插件的核心是RestActionMapper,它负责将Rails风格的URL转换为传统请求的URL。

用WinRAR打开struts2-rest-plugin-2.1.6文件,看到该文件里包含一个struts-plugin.xml文件,该文件中包含如下一行:

<!-- 定义支持REST的ActionMapper -->

<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper"

name="rest" class="org.apache.struts2.rest.RestActionMapper" />

通过查看RestActionMapper的API说明,我们发现它可接受如下几个参数:

struts.mapper.idParameterName:用于设置ID请求参数的参数名,该属性值默认是id。 

struts.mapper.indexMethodName:设置不带id请求参数的GET请求调用Action的哪个方法。该属性值默认是index。 

struts.mapper.getMethodName:设置带id请求参数的GET请求调用Action的哪个方法。该属性值默认是show。

struts.mapper.postMethodName:设置不带id请求参数的POST请求调用Action的哪个方法。该属性值默认是create。 

struts.mapper.putMethodName:设置带id请求参数的PUT请求调用Action的哪个方法。该属性值默认是update。

struts.mapper.deleteMethodName:设置带id请求参数的DELETE请求调用Action的哪个方法。该属性值默认是destroy。 

struts.mapper.editMethodName:设置带id请求参数、且指定操作edit资源的GET请求调用Action的哪个方法。该属性值默认是edit。

struts.mapper.newMethodName:设置不带id请求参数、且指定操作edit资源的GET请求调用Action的哪个方法。该属性值默认是editNew。

提示:在RestActionMapper的方法列表中,我们看到setIdParameterName、setIndexMethodName、setGetMethodName、setPostMethodName、setPutMethodName、setDeleteMethodName、setEditMethodName、setNewMethodName等方法,这些方法对应为上面列出的方法提供setter支持。

     通常情况下,我们没有必要改变RestActionMapper的参数,直接使用这些参数的默认值就可支持Rails风格的REST。根据前面介绍可以看出:支持REST风格的Action至少包含如下7个方法:

index:处理不带id请求参数的GET请求。

show:处理带id请求参数的GET请求。

create:处理不带id请求参数的POST请求。

update:处理带id请求参数的PUT请求。

destroy:处理带id请求参数的DELETE请求。

edit:处理带id请求参数,且指定操作edit资源的GET请求。

editNew:处理不带id请求参数,且指定操作edit资源的GET请求。

    如果请求需要向服务器发送id请求参数,直接将请求参数的值附加在URL中即可。表12.3显示了RestActionMapper对不同HTTP请求的处理结果。

表12.3 RestActionMapper对HTTP请求的处理

HTTP方法 URI 调用Action的方法 请求参数

GET /book index

POST /book create

PUT /book/2 update id=2

DELETE /book/2 destroy id=2

GET /book/2 show id=2

GET /book/2/edit edit id=2

GET /book/new editNew

不幸地是,标准HTML语言目前根本不支持PUT和DELETE两个操作,为了弥补这种不足,REST插件允许开发者提交请求时额外增加一个_method请求参数,该参数值可以为PUT或DELETE,用于模拟HTTP协议的PUT和DELETE操作。

喜欢Java豆技术站点的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露



返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明 | 模板设计