`
huchunyong1987
  • 浏览: 20199 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Restlet与Spring 集成

阅读更多
   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="添加帐号" onclick="addAccount();"/>

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics