`
sb33060418
  • 浏览: 152291 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Restlet 2.0 边学边写(四)Restlet与spring集成

    博客分类:
  • REST
阅读更多
上一次实践是使用Component来发布多个Resource。本次实践将Restlet与spring集成,并使用spring来配置、发布、管理多个Resource。

参考:http://ajaxcn.iteye.com/blog/416913

本次实践需要导入spring相关包,创建配置文件applicationContext.xml并进行配置。

1.导入spring相关包
将Restlet安装目录\Edition Java EE\2.0.10\lib下的org.restlet.ext.spring.jar、net.sf.cglib.jar 两个包和spring.jar包加入Build Path,我使用的是spring2.0。

2.Dao
在com.sunny.restlet.order目录下创建OrderDao接口,代码如下:
package com.sunny.restlet.order;

public interface OrderDao {

	public String getOrderById(String orderId);

	public String getSubOrderById(String subOrderId);

	public String getCustomerById(String custId);

}

接口中定义数据访问方法。

在com.sunny.restlet.order目录下创建OrderDaoImpl类,代码如下:
package com.sunny.restlet.order;

public class OrderDaoImpl implements OrderDao {

	public String getCustomerById(String custId) {
		// TODO Auto-generated method stub
		return "customer" + custId;
	}

	public String getOrderById(String orderId) {
		// TODO Auto-generated method stub
		return "order" + orderId;
	}

	public String getSubOrderById(String subOrderId) {
		// TODO Auto-generated method stub
		return "subOrder" + subOrderId;
	}

}

类实现了OrderDao接口。

3.Resource
修改com.sunny.restlet.order.CustomerResource类,代码如下:
package com.sunny.restlet.order;

import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;

public class CustomerResource extends ServerResource {
	String customerId = "";

	private OrderDao orderDao;
	
	@Override
	protected void doInit() throws ResourceException {
		this.customerId = (String) getRequest().getAttributes().get("custId");
	}

	@Get
	public String represent() {
		return "get customer id :" + orderDao.getCustomerById(customerId) ;
	}

	public void setOrderDao(OrderDao orderDao) {
		this.orderDao = orderDao;
	}

}

修改后的类相当于spring中的service bean,类中调用了orderDao的数据访问接口。

修改com.sunny.restlet.order.OrderResource类,代码如下:
package com.sunny.restlet.order;

import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;

public class OrderResource extends ServerResource {
	String orderId = "";
	String subOrderId = "";

	private OrderDao orderDao;

	@Override
	protected void doInit() throws ResourceException {
		this.orderId = (String) getRequest().getAttributes().get("orderId");
		this.subOrderId = (String) getRequest().getAttributes().get(
				"subOrderId");
	}

	@Get
	public String represent() {
		return "the order id is : " + orderDao.getOrderById(orderId)
				+ " and the sub order id is : "
				+ orderDao.getSubOrderById(subOrderId);
	}

	public void setOrderDao(OrderDao orderDao) {
		this.orderDao = orderDao;
	}
}


4.applicationContext.xml
在src/下创建spring配置文件applicationContext.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName"
	xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	<!-- component -->
	<bean id="component" class="org.restlet.ext.spring.SpringComponent">
		<property name="defaultTarget" ref="restRouter" />
	</bean>
	<!-- router -->
	<bean id="restRouter" class="org.restlet.ext.spring.SpringBeanRouter">
	</bean>
	<!-- resource -->
	<bean name="/customers/{custId}" id="customerResrouce"
		class="com.sunny.restlet.order.CustomerResource" />
	<bean name="/orders/{orderId}/{subOrderId}" id="orderResrouce"
		class="com.sunny.restlet.order.OrderResource" />
	<!-- dao -->
	<bean id="orderDao" class="com.sunny.restlet.order.OrderDaoImpl" />
</beans>  

文件中定义了component、router、resource和dao,以及将Resource发布到的路径。使用spring不需要再自定义Component和Application。

5.web.xml
修改web.xml文件,删除原有Restlet配置,加入spring配置,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<!-- spring -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:applicationContext*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- SpringServerServlet -->
	<servlet>
		<servlet-name>restlet</servlet-name>
		<servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
		<init-param>
			<param-name>org.restlet.component</param-name>
			<param-value>component</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>restlet</servlet-name>
		<url-pattern>/spring/*</url-pattern>
	</servlet-mapping>
	<!-- welcome-file-list -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

文件中定义spring配置文件位置,指定使用SpringServerServlet来提供服务,并定义了在spring配置中Component Bean的id(component)。

6.运行
重新部署后,通过浏览器访问http://localhost:8080/firstSteps/spring/customers/1可以看到提示信息
  • get customer id :customer1

访问http://localhost:8080/firstSteps/spring/orders/1/2可以看到提示信息
  • the order id is : order1 and the sub order id is : subOrder2

说明Restlet和spring集成成功。

7.SpringRouter
SpringBeanRouter要求resource继承ServerResource类,自动将spring BeanFactory中name以"/"开头的bean加到路径上。

除此外还可以使用SpringRouter来集成,applicationContext.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName"
	xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	<!-- component -->
	<bean id="component" class="org.restlet.ext.spring.SpringComponent">
		<property name="defaultTarget" ref="restRouter" />
	</bean>
	<!-- router -->
	<bean id="restRouter" class="org.restlet.ext.spring.SpringRouter">
		<property name="attachments">
			<map>
				<entry key="/customers/{custId}">
					<bean class="org.restlet.ext.spring.SpringFinder">
						<lookup-method name="create" bean="customerResource" />
					</bean>
				</entry>
				<entry key="/orders/{orderId}/{subOrderId}">
					<bean class="org.restlet.ext.spring.SpringFinder">
						<lookup-method name="create" bean="orderResource" />
					</bean>
				</entry>
			</map>
		</property>
	</bean>
	<!-- resource -->
	<bean id="customerResource" class="com.sunny.restlet.order.CustomerResource">
	</bean>
	<bean id="orderResource" class="com.sunny.restlet.order.OrderResource">
	</bean>
	<!-- dao -->
	<bean id="orderDao" class="com.sunny.restlet.order.OrderDaoImpl" />
</beans>  

SpringRouter调用SpringFinder,需要指定lookup-method,如果resource继承自Resource,则name="createResource",且resource要实现无参构造函数和init()方法;如果resource继承自ServerResource,则name="create"。详情请参考Restlet源码,SpringFinder类中的createTarget(Request request, Response response)、createResource()和create()方法,SpringBeanFinder类中的create()方法。

8.RestletFrameworkServlet
还可以使用RestletFrameworkServlet替代SpringServerServlet。这需要导入spring-webmvc.jar包。
修改web.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<!-- SpringServerServlet -->
	<servlet>
		<servlet-name>restlet</servlet-name>
		<servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
		<init-param>
			<param-name>targetRestletBeanName</param-name>
			<param-value>restRouter</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>restlet</servlet-name>
		<url-pattern>/spring/*</url-pattern>
	</servlet-mapping>
	<!-- welcome-file-list -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

代码中将targetRestletBeanName这个init-param的值设定为restRouter,如果不设置,默认为root。RestletFrameworkServlet根据这个参数的值从WEB-INF\restlet-servlet.xml中读取配置。
在WEB-INF目录下创建restlet-servlet.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName"
	xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	<!-- router -->
	<bean id="restRouter" class="org.restlet.ext.spring.SpringBeanRouter">
	</bean>
	<!-- resource -->
	<bean name="/customers/{custId}" id="customerResrouce"
		class="com.sunny.restlet.order.CustomerResource" />
	<bean name="/orders/{orderId}/{subOrderId}" id="orderResrouce"
		class="com.sunny.restlet.order.OrderResource" />
	<!-- dao -->
	<bean id="orderDao" class="com.sunny.restlet.order.OrderDaoImpl" />
</beans>  
分享到:
评论
2 楼 xiaoqin_007 2013-06-14  
好文  
博主能否写一篇整合 Restlet+Spring+JSR311的文章?
现在路径对应方式太死板了 (只能在Bean里面对应,且类中只能使用CRUD四个方法)。
1 楼 gaofeng_867 2013-02-20  

如果applicationContext.xml放到scr目录下,
web.xml这样写
<param-name>contextConfigLocation</param-name>  
<param-value>classpath:applicationContext.xml</param-value>
浪费了我好长时间

相关推荐

    Restlet 2.0 边学边写(八)使用jQuery和ajax实现对Restlet资源的CRUD操作

    在本篇博文中,我们将深入探讨如何利用jQuery和Ajax技术与Restlet 2.0框架进行交互,实现对Restful资源的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,即CRUD操作。Restlet是一个开源的Java ...

    restlet2.0版本jee源代码

    在Restlet 2.0版本中,它支持Java Enterprise Edition (Java EE) 平台,为开发者提供了在企业环境中构建高效、可扩展的REST服务的能力。 Restlet 2.0版的核心概念包括以下几个方面: 1. **组件(Component)**: ...

    restlet2.0+spring3.0+hibernate3.3.框架集成

    在这个场景中,我们关注的是"restlet2.0+spring3.0+hibernate3.3"的整合,这是一个经典的Java Web开发组合,分别代表了RESTful API、服务层管理和持久化层的优秀实践。 首先,让我们深入了解每个框架的核心特性: ...

    Restlet与Spring 集成

    将Spring与Restlet集成,可以使Restlet服务利用Spring的DI和AOP特性,便于管理和测试。 在集成过程中,有以下几个关键步骤: 1. **环境准备**:确保安装了JDK 1.5或更高版本、Tomcat 6.x或更高版本,以及Restlet ...

    restlet-jee-2.0.6.zip_Restlet 2..0_Restlet framework2.0_org.rest

    标题"restlet-jee-2.0.6.zip_Restlet 2..0_Restlet framework2.0_org.rest"表明这是一个针对Java企业版(Java EE)的Restlet框架2.0.6版本的压缩包,其中包含了与org.restlet相关的组件。 描述中的"restlet框架所需...

    基于Spring的Restlet实例

    4. **Spring与Restlet集成**:将Restlet集成到Spring应用中,我们通常需要配置Restlet的Servlet或Filter,以便处理HTTP请求。这涉及到Spring的上下文配置和Restlet的组件注册。 5. **创建REST资源**:使用Restlet,...

    Restlet2 + Spring3 注解方式配置

    在本文中,我们将深入探讨如何在Spring 3框架中集成Restlet 2,利用注解方式进行配置。Restlet是一个轻量级的Java RESTful Web服务开发库,而Spring则是一个广泛使用的全面的企业级应用框架。结合两者,我们可以创建...

    org.restlet.ext.spring.jar

    org.restlet.ext.spring.jar

    camel-restlet-spring-web-app

    标题 "camel-restlet-spring-web-app" 暗示了一个基于Apache Camel、Restlet和Spring Web的应用程序示例,该示例使用Jetty作为嵌入式服务器。这个项目结合了这些技术来创建一个RESTful API服务。让我们深入探讨每个...

    Restlet开发实例

    3. Spring与Restlet集成:学习如何在Restlet应用中利用Spring的优势,如依赖注入、事务管理等。 通过这个系列的学习,你将具备使用Restlet框架构建高效、灵活且易于维护的REST服务的能力。无论是简单的API还是复杂...

    reslet2.0+spring3.0+hibernate3.3框架集成

    "reslet2.0+spring3.0+hibernate3.3框架集成" 这个标题表明这是一个关于Java开发中的技术整合项目。Reslet 2.0是一个轻量级的REST(Representational State Transfer)应用框架,用于构建Web服务和应用程序。Spring ...

    Restlet学习的三篇文章

    在REST服务中,Spring可以帮助管理bean的生命周期,提供事务控制,以及与其他Spring组件(如数据库访问、安全等)集成。整合Restlet和Spring,开发者可以利用Spring的优势来增强Restlet服务的复杂性和可维护性。这...

    RESTlet自用2

    总的来说,RESTlet自用2可能是一个基于RESTlet 2.0版本并结合Spring框架的个人项目,该项目可能涉及到了RESTful服务的开发、JAX-RS标准的实现以及Spring的集成。相关的学习资料,如"MHT"文件和"PPT",提供了理论知识...

    restlet

    客户端部分,RESTlet允许开发者创建REST客户端代理,能够方便地与远程REST服务进行交互。这个特性对于测试、集成或者构建复杂的分布式系统非常有用,因为它简化了HTTP请求的构建和发送过程。 RESTlet框架的关键特性...

    Restlet所需要的所有jar包

    4. **扩展和模块**:Restlet框架提供了丰富的扩展机制,可以添加对其他技术(如OAuth认证、JAXB绑定、CDI集成等)的支持。这些扩展通常以单独的jar包形式存在,可以根据项目需求选择引入。 5. **开发工具**:为了...

    RESTLET开发

    下载地址:[http://www.restlet.org/downloads/2.0/restlet-jee-2.0.6.zip](http://www.restlet.org/downloads/2.0/restlet-jee-2.0.6.zip) 2. **解压缩并设置环境变量** 解压缩下载的文件到指定位置,假设解压缩...

    com.noelios.restlet.ext.spring_2.5.jar

    com.noelios.restlet.ext.spring_2.5.jar

    Restlet Client 插件安装包

    **Restlet Client插件安装包详解** 在现代的Web应用开发中,API(Application Programming Interface)扮演着至关重要的角色,尤其是RESTful API,它已成为构建分布式系统和微服务架构的标准。为了有效地测试和调试...

    org.restlet-2.3.0.jar 最新版本

    5. **更易用的API**:简化了API接口,降低了学习曲线,使得开发者能够更快速地集成和使用RESTlet。 6. **扩展性**:提供了丰富的扩展点,可以方便地添加自定义处理器、过滤器和组件,满足特定业务需求。 7. **文档...

Global site tag (gtag.js) - Google Analytics