Restlet与Spring 集成

Restlet与Spring 集成
2010-05-31 15:24
        RestLet 作为一种对Restful的实现,基于JRS-RS实现规范,其思想有别于JRS-WS,它极大的方便了开发人员的效率,如果RestLet能和Spring集成在一起,则更能现示出RestLet在这方面的前劲势力,本篇文章主要以实例的形式对RestLet与Spring的集成进行解读:

下载所需jar包文件,其中包括:
JDK1.5、Tomcat6.x、 RestLet2.5、Spring2.5、eclipse3.4

下面我们就以一个简单的增加用户为例来完成本篇文章。

一、我们首先搭建一个 Web 环境authuser,然后创建一个Rest 的接口文件,作为客户端请求的入口。
package com.test;

public class UserRest{

public void addUser( String id,String userName,String pwd) /* 请求时值会被自动赋予 */{

//do actor operator

getResponse().setStatus(Status.SUCCESS_OK);  //正确返回的状态码
getResponse().setEntity(new StringRepresentation("actor json value")); //实现要返回的值
}
}

二、RestLet 配置文件与spring集成是的配置

restletContext.xml

******************************************
<bean id="component.context"
class="org.springframework.beans.factory.config.PropertyPathFactoryBean" />

<bean id="component" class="org.restlet.ext.spring.SpringComponent">
<property name="defaultTarget" ref="application" />
</bean>
<bean id="application" class="cn.ceopen.xframework.core.base.rest.BaseApplication">
<constructor-arg ref="component.context" />
<property name="root" ref="restRoute" />
</bean>
<bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">
<property name="attachments">
<map>
/* 可以存放多个key-value对,key可以自已定义,value值引用上面user bean id值 */
<entry key=" /user" value-ref=" userRoute" />
</map>
</property>
</bean>
***************************************
userContext.xml

<bean id=" userRoute" class="org.restlet.ext.spring.SpringRouter">
<property name="attachments"> 
<map> 
<entry key="/ addUser"> 
<bean class="org.restlet.ext.spring.SpringFinder">
<lookup-method name="createResource" bean=" userRest" />  /* userRest为spring实例化的Bean*/
</bean> 
</entry>                
</map> 
</property> 
</bean> 

<bean id=" userRest" class="com.test.UserTest"  scope="prototype"></bean>  /* scope必须为prototype */

*******************************************

三、在web.xml中的配置

/*首先应该让Tomcat启动时可以读到上面两文件,所以应该加入:*/
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:yourPath/**/*.xml;
</param-value>
</context-param>

/* 其次加入filter,listener */

/* 启动Spring容器 */
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

/* 中文编码 */
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>   


<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/ws/*</url-pattern>
</filter-mapping>

/* restlet与spring集成servlet */
<servlet> 
<servlet-name>restlet</servlet-name> 
<servlet-class>com.noelios.restlet.ext.spring.SpringServerServlet</servlet-class> 
<init-param> 
<param-name>org.restlet.component</param-name> 
<param-value> component</param-value> /* 此名字应与上面restletContext.xml文件中id为component同名 */
</init-param> 
</servlet>
<servlet-mapping>
<servlet-name>restlet</servlet-name>
<url-pattern> /ws/*</url-pattern>
</servlet-mapping>

这样我们的配置工作就完成了,
四、下面我们可以测试一下我们所做的工作。
测试文件,即一个简单的html文件的AJAX调用即可:我们启名为home.html

<script type="text/javascript">

/* 增加用户信息 **/
function addAccount(){
var xmlHttp = ajaxObjHolder();

//注: 此处参数要和addUser方法中的参数名一一对应,这样数值才能自动存入其中。

var params = "{/" id/" : /"001/",/" userName/" : /"zhw/",/" pwd" : /"123/"}";
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
if(xmlHttp.status == 200){
alert("results: "+xmlHttp.responseText);
}
}
};

// 注意此URL的写法,
//  ws为 web.xml中配置的路径,
// user 为restletContext.xml文件中的attachments的key值,
// addUser为请求操作方法名
xmlHttp.open(" POST"," http://localhost:8080/authcenter/ws/user/addUser",true);
xmlHttp.setRequestHeader("Content-Type", "application/json");
xmlHttp.setRequestHeader("charset", "UTF-8");

xmlHttp.send(params);   
}

/** obtain ajax object */
function ajaxObjHolder(){
var xmlHttp;
try{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
}catch (e){
// Internet Explorer
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
return xmlHttp;
}

</script>

<input type="button" name="添加帐号" value="添加帐号" οnclick="addAccount();"/>

运行测试,成功后,会在页面弹出一已持久化的Json形式表示的数据。如:

{"id":"001","userName":"zhw","pwd":"123"}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值