`

Restlet2.0学习——简单WebApp实现

阅读更多
由于自己最近正在学习REST,并需要使用Restlet做ROA的开发。所以把自己的一些事件心得写下,以便以后查阅,也希望可以帮助到一些同学。

首先Rest的概念就不提了。主要就是讲关于如何更好,更简单的利用http协议中的一些基本方法,做统一接口,来实现我们基于资源的架构开发。其中Restful web service 书中也说道。很多时候我们都容易陷入把开发变复杂的情况,比如使用SOAP,这种特殊信封去包装我们的数据。而一些尝试开发Rest的人们,也容易由于经验的印象,陷入架构的变异,开发出Rest-RPC风格或者纯RPC风格的程序。而看了很多在java方面关于Rest原则的架构设计,觉得Restlet基本遵循了Rest的原则,而且相对比较简单。所以尝试拿来写一些简单程序开始入手。当然在Rest1.0时代也有很多达人写了很多实战例子。其中,在iteye社区中就有一位ajax达人写了长长33篇关于Restlet1.0的实例,其中较多都是结合spring使用。而本人几下Restlet2.0的一些实践例子,毕竟想把关于2.0方面的经验分享给大家,也因为1.0中的很多类在2.0中都已经废弃,而且现在官网上主要放着的是2.0和2.1的get started。总要与时俱进的嘛,哈哈。好了,言归正传,让我们开始吧。


Restlet2.0中最近的是从Restlet,Resource和respresentation三个包中展开。其他的一些都是富有一些特殊功能的类而其中基于Uniform和UniformResource的两个接口就是其中的核心。

这篇文章下的项目主要实现就是通过一个test,获取放入webapp中resource,并返回hello world的功能。该项目的名称我们命名为RestLetServlet。在开发之前,需要加入如下jar
org.restlet.jar(restlet核心包,不管是JEE或者是JSE都是必需的)
org.restlet.ext.servlet.jar(JEE下servlet专用包)
junit4.8.2.jar(用于编写单元测试,其实直接使用浏览器也是可以的。)

具体实现如下:

首先我们创建一个Resource。原本在1.0中时继承Resource这个类的。但是在2.0中Resource已经废弃,使用实现UniformResource接口的ServerResource类
public class HelloResource extends ServerResource {

	@Get
	public String getHello() {
		return "Hello World";
	}
}

这里使用Get的annotation,方便了对统一接口的指引和调用。而在1.0中,所有的Resource都要重写各种respresent方法才可以。如post->acceptRepresentation;put-> storeRepresentation;delete-> removeRepresentations等。

然后我们就要创建一个application类把resource放入其中。这里的application其实就是实现了Uniform接口的类。所以在服务端这边那两个接口是大头。很多子类都是从上面的两个接口演变出来的。
public class HelloApplication extends Application {

	@Override
	public Restlet createInboundRoot() {
		Router router = new Router(getContext());
		router.attach("/getHello", HelloResource.class);
		return router; 
	}
}


然后在web.xml下添加如下代码:
<servlet>  
      <servlet-name>RestletServlet</servlet-name>  
      <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
      <init-param>
            <!-- Application class name -->
            <param-name>org.restlet.application</param-name>
            <param-value>com.restlet.application.HelloApplication</param-value>
      </init-param>
   </servlet>  
  
   <!-- Catch all requests -->  
   <servlet-mapping>  
      <servlet-name>RestletServlet</servlet-name>  
      <url-pattern>/*</url-pattern>  
   </servlet-mapping>


这样我们熟悉的服务端就建立完成了。

如上,我们的资源路径就定型了。是基于当前项目的RestLetServlet(而对应的application在这里是所有路径都可以的,在JSE下,这个路径就是各种Application的路径了。)下的getHello资源。把编写的项目放入tomcat或者任何servlet容器即可。

然后附上测试代码:
public class HelloTest {

	@Test
	public void testGetHello() throws Exception {
		ClientResource resource = new ClientResource("http://localhost:8080/RestLetServlet/getHello");
		resource.get().write(System.out);
	}
 }


启动容器,然后使用测试代码运行,在console就可以看到hello world了。
这里的test其实就是模拟了浏览器的功能,所以其实也可以直接向浏览器URL地址栏输入上面的路径依旧可以得到hello world。

这里仅仅是实现了一个get方法的操作。而在webapp下,由于HTML4和HTML5本身设计上的限制。我们不能使用put和delete这两种方法。也不能使用header和options两个辅助方法。所以其他的一些在webapp大多这些方法的使用都是从post进行模拟出来。在restful web service下也指出这个是不得已的演变,只能使用RPC风格进行开发。希望在以后可以有其他的方法解决这个问题。

当然在基于java客户端的clientResource下,那些方法都是可以使用的。所以相对来说学习JSE的restlet可以对rest的核心和编程原则更加的了解和熟悉。不容易让自己走弯路。毕竟也有很多人开发webapp时,看到post可以解决所有的问题,于是就走向了以前开发webapp的老路了。而忽略了rest的真正意义。

分享到:
评论

相关推荐

    restlet2.0版本jee源代码

    了解了这些基本概念后,你可以通过解压"restlet-jee-2.0.14"压缩包,查看源代码、例子和API文档,更深入地学习Restlet 2.0如何在Java EE环境中实现REST服务。这将有助于你开发出高效、灵活且易于维护的Web应用程序。

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

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

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

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

    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框架所需...

    RESTLET框架学习书籍

    ### RESTLET框架学习知识点 #### 一、RESTLET框架概览 - **RESTLET框架简介**:RESTLET是一个面向对象的Java开源框架,用于构建RESTful应用和服务。它旨在简化Web应用开发,允许开发者充分利用REST架构的优势。...

    restlet2.1学习笔记项目代码

    本项目是针对Restlet 2.1版本的学习笔记,包含了实际的项目代码,旨在帮助开发者更好地理解和应用Restlet框架。 在Restlet 2.1中,有几个关键概念和组件值得深入探讨: 1. **组件(Component)**:Restlet框架的...

    restlet实现最简单的restful webservice

    本文将深入探讨如何使用Restlet来实现一个最简单的RESTful Web服务。 首先,了解REST的基本概念是必要的。REST强调的是资源的概念,通过URI(Uniform Resource Identifier)来标识,使用HTTP协议中的方法(如GET、...

    rome-0.9.jar

    restlet2.0 Restlet Caused by: java.lang.ClassNotFoundException: com.sun.syndication.feed.synd.SyndFeed java.lang.NoClassDefFoundError: com/sun/syndication/feed/synd/SyndFeed

    RESTlet自用2

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

    android-restlet:一个非常简单的ptojecttutorial,显示如何在Android下使用Restlet和Gson库

    android-restlet 一个非常简单的演示/教程,展示了如何在Android下使用Restlet和Gson库这是什么? 这是一个项目教程,可帮助您了解如何使用Restlet框架( )以及如何通过使用Gson Google框架( )。 您可以将该项目...

    RESTLET开发

    接下来,我们将通过一个具体的例子来学习如何在Java EE环境中使用JAX-RS实现RESTful服务。 1. **创建Java Web项目** 在开发环境中新建一个名为`RestService`的Java Web项目。 2. **添加必要的库文件** 将`%...

    Restlet开发实例

    你将学习如何在Restlet应用中使用Spring的Bean,以及如何通过Spring MVC和Restlet的协同工作,实现更灵活和强大的REST服务。 总结以上内容,Restlet开发实例系列涵盖了以下几个关键知识点: 1. JAX-RS与Restlet的...

    org.restlet-2.3.0.jar 最新版本

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

    Restlet学习的三篇文章

    Restlet框架提供了更底层的REST服务实现,它不仅支持JAX-RS规范,还提供了自己的API。Restlet组件模型包括客户端和服务器端的部分,如代表资源的`Representation`、处理请求的`Resource`、管理网络连接的`Connector...

    restlet

    REST是一种轻量级的架构风格,广泛应用于互联网应用的开发,它强调通过简单的HTTP方法(如GET、POST、PUT、DELETE)来操作资源,以实现高效、可扩展的网络通信。 RESTlet框架提供了客户端和服务器端的组件,使得...

    RESTLET开发(三)

    通过本文的学习,我们了解了如何利用Spring框架整合RESTlet构建RESTful服务的基本过程。这种方式不仅简化了开发流程,还提高了服务的可维护性和扩展性。在后续的学习中,我们可以进一步探索更复杂的业务逻辑和服务...

    Restlet in action 中文

    同时,书中还介绍了Restlet框架2.0版,包括其主要特性和整体架构。 **第二部分 Getting ready to roll out**进一步深入,讲解了如何设计和使用Restlet representations,确保安全性,以及如何文档化和管理RESTful ...

    Restlet开发的Basic认证

    在Restlet框架中,实现基本认证主要涉及到以下几个步骤: 1. **创建认证控制器**:首先,你需要创建一个类来处理认证逻辑。这个类通常会扩展`org.restlet.ext.httpclient.Authenticator`类,并重写`authenticate`...

Global site tag (gtag.js) - Google Analytics