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"}
下载所需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"}