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"} |