`
ajax
  • 浏览: 253674 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Restlet实战(四)与Spring集成

    博客分类:
  • REST
阅读更多

 在上一篇文章中介绍了如何在restlet.xml中设置Component,本篇将介绍restlet如何和Spring结合。

 

首先将相应的jar文件放到WEB-INF/lib下,针对上一篇的示例代码,我们做一些修改,当然也包括一些配置。

 

首先

 

在web.xml注释掉如下代码:

 

   <servlet>  
      <servlet-name>RestletServlet</servlet-name>  
      <servlet-class>  
         com.noelios.restlet.ext.servlet.ServerServlet   
      </servlet-class>  
   </servlet>  
  
     
   <servlet-mapping>  
      <servlet-name>RestletServlet</servlet-name>  
      <url-pattern>/*</url-pattern>  
   </servlet-mapping>

 

 因为有专门的SpringServlet来处理请求,所以,加入如下代码:

  <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>
  
  <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>
	</init-param>
 </servlet>
  
  <servlet-mapping>
	<servlet-name>restlet</servlet-name>
	<url-pattern>/resources/*</url-pattern>
  </servlet-mapping>

 

接下来对CustomerResource做一修改,值得注意的是与Spring集成,Resource类里面有一些规则,首先必须有一个无参的构造参数,一个init方法,这个方法包含那些原来定义在非默认构造函数的代码。

 

public class CustomerResource extends Resource {
	String customerId = "";
	private CustomerDAO customerDAO;
	
	@Override
	public void init(Context context, Request request, Response response) {
		super.init(context, request, response);
		customerId = (String) request.getAttributes().get("custId");
	}
	
	public CustomerResource(){
		getVariants().add(new Variant(MediaType.TEXT_PLAIN)); 
	}
	
	public CustomerResource(Context context, Request request, Response response) {
		super(context, request, response);
		
		getVariants().add(new Variant(MediaType.TEXT_PLAIN));
	}

	@Override
	public Representation getRepresentation(Variant variant) {
		String userMsg = customerDAO.getCustomerById(customerId);
		Representation representation = new StringRepresentation(userMsg,
				MediaType.TEXT_PLAIN);
		return representation;
	}

	public void setCustomerDAO(CustomerDAO customerDAO) {
		this.customerDAO = customerDAO;
	}	
}

 需要说明的是按照现在三层架构流行分法,我们姑且认为Resource就是我们常说的Service层,那么在resource里面我们需要调用数据层的类来完成对数据的处理。上面代码中,我创建了一个CustomerDAO作为数据处理层,相关类代码如下:

public interface CustomerDAO {
	public String getCustomerById(String id);
}

 

public class CustomerDAOImpl implements CustomerDAO{
	public String getCustomerById(String id){
		//get other information through id such as name, no, address etc.
		String name = "ajax";
		String address=  "Shanghai";
		return "The customer name is " + name + " and he is from " + address;
	}
}

 

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">
	
	<bean id="component" class="org.restlet.ext.spring.SpringComponent">
		<property name="defaultTarget" ref="restRoute" />
	</bean>
	<bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">
		<property name="attachments">
			<map>
				<entry key="/customers/{custId}">
					<bean class="org.restlet.ext.spring.SpringFinder">
						<lookup-method name="createResource" bean="customerResource" />
					</bean>
				</entry>
			</map>
		</property>
	</bean>
	
	<bean id="customerResource" class="com.mycompany.restlet.resource.CustomerResource" scope="prototype">
		<property name="customerDAO" ref="customerDAO" />
	</bean>

	<bean id="customerDAO" class="com.mycompany.restlet.dao.CustomerDAOImpl"/>
</beans>

 

ok,所有配置以及代码完成,下面做一个简单的测试,打开浏览器输入: http://localhost:8080/restlet/resources/customers/1

 

页面结果是:

The customer name is ajax and he is from Shanghai

 

 

看上面的Spring配置,如果有多个URL,例如

/customers/{custId},

/customers/{custId}/orders,

/customers/{custId}/orders/{orderId}

 

那么/customers需要重复三次,有什么办法简化吗?看下面改造后的配置:

	<bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">
		<property name="attachments">
			<map>
				<entry key="/customers" value-ref="customerRoute" />
			</map>
		</property>
	</bean>
	
	<bean id="customerRoute" class="org.restlet.ext.spring.SpringRouter">
		<property name="attachments">
			<map>
				<entry key="/{customerId}">
					<bean class="org.restlet.ext.spring.SpringFinder">
						<lookup-method name="createResource" bean="customerResource" />
					</bean>
				</entry>
			</map>
		</property>
	</bean>

 

这样,可以动态配置基于/customers/*的URL了,如果你仍旧不明白,看一下官方的restlet与Spring结合的例子。

 

13
0
分享到:
评论
4 楼 zhaoshunxin 2014-03-04  
你好, 对于customerResource 这个地方 是否可以配置多个@Get方法?
3 楼 gaofeng_867 2013-01-12  
按照你的步骤遇到问题了:
Error creating bean with name 'component' defined in URL [file:/F:/Tomcat6.0/webapps/RestletSpring/WEB-INF/classes/applicationContext.xml]:
2 楼 cocca883 2012-11-19  
这些博客写的太好了      感谢  在国内难得啊。
1 楼 xxooyy 2011-11-14  
applicationContext.xml配置不成功,导致customerDAO 映射不上,String userMsg = customerDAO.getCustomerById(customerId);    抛出NullPointerException 异常,搞不定啊,楼主帮忙啊

相关推荐

    Restlet与Spring 集成

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

    org.restlet.ext.spring.jar

    org.restlet.ext.spring.jar

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

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

    Restlet2 + Spring3 注解方式配置

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

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

    - **集成Spring**:Spring可以作为Restlet应用的容器,管理Restlet组件的生命周期。同时,Spring的AOP功能可以用于事务管理和安全控制。Spring MVC可以处理HTTP请求,与Restlet协同工作,提供更丰富的Web服务。 - *...

    基于Spring的Restlet实例

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

    Restlet实战(二十六)事务 (Transaction)

    本文将深入探讨RESTful服务中的事务处理,并以《Restlet实战(二十六)事务 (Transaction)》为例进行解析。 首先,我们要理解RESTful服务中的核心原则之一是无状态(Stateless)。这意味着每个客户端请求都包含处理...

    Restlet开发实例

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

    camel-restlet-spring-web-app

    通过这个示例,开发者可以学习如何在Spring环境中集成Apache Camel和Restlet,构建可扩展的REST服务。这有助于理解服务之间的交互、HTTP请求的处理以及如何利用Camel的路由能力来构建复杂的企业级应用。对于想要学习...

    CAS 集成Restlet Integration相关 7个jar

    cas-server-integration-restlet-3.5.2.jar cglib-nodep-2.1_3.jar ...restlet.ext.spring-1.1.1.jar

    com.noelios.restlet.ext.servlet_2.4.jar

    com.noelios.restlet.ext.servlet_2.4.jar

    spring2.5 api

    这使得与Java EE容器的集成更加顺畅。 五、国际化支持(Internationalization, i18n) Spring 2.5 增强了对多语言环境的支持,可以通过 @MessageSource 注解和 MessageSource 接口来处理不同语言的文本资源。 六、...

    RESTLET开发(三)

    在本文档中,我们将深入探讨如何利用RESTlet框架与Spring框架结合,构建高效的RESTful服务。Spring框架因其强大的功能和灵活性,在Java企业级开发中占据了极其重要的地位。接下来,我们将按照文档的步骤,逐一解析...

    restlet

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

    Restlet学习的三篇文章

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

    52-restlet.rar_restlet

    8. **扩展与集成**:可能包含如何将Restlet与其他技术(如Spring框架、JAX-RS规范、Servlet容器等)集成,以实现更复杂的Web服务。 9. **实战示例**:提供具体的代码示例,演示如何创建一个完整的REST服务,包括...

    Restlet所需要的所有jar包

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

    Restlet开发的Basic认证

    2. **设置认证策略**:在Restlet应用中,你需要将这个认证控制器与特定的路由或整个应用关联起来。这可以通过调用`ServerResource.setChallengeRequest`或`Application.setChallengeRequest`方法并传递适当的挑战...

    Restlet Client 插件安装包

    - **集成测试**: 在集成环境中,确保不同服务间的API交互顺畅。 - **文档验证**: 对照API文档,验证实际行为是否符合预期。 ### 注意事项 - Chrome浏览器可能因为安全策略限制安装`.crx`文件,需要在浏览器设置中...

    restlet1.1文档

    1. **使用Maven进行配置**:如果您使用的是Maven作为构建工具,可以通过添加依赖项来轻松集成Restlet。 2. **使用Eclipse进行配置**:如果您使用的是Eclipse IDE,则可以通过导入项目模板或手动添加库文件来进行配置...

Global site tag (gtag.js) - Google Analytics