`

Restlet实战(十三)如何在Servlet中呼叫Restlet

    博客分类:
  • REST
阅读更多

看到这个题目,或许你会问,你之前的很多文章不都是与servlet有关吗?这不是重复吗?

 

No,假设你现在正在用MVC的framework,如Struts,Spring MVC等来建造一个Web系统,但是当前需求要求你的代码能灵活的与另外的一个系统对接。那么你想到了使用Restlet来构建Restful web service。因此,你想在你的servlet里面使用restlet。

 

场景是这样,但是理解起来其实很简单,如果和在servlet里面使用restlet。

 

首先拷贝一份Restlet里面关于ServletConverer的API doc里面的说明的代码:

 

Java代码  收藏代码
  1. public class TestServlet extends HttpServlet {  
  2.     private ServletConverter converter;  
  3.   
  4.     public void init() throws ServletException {  
  5.         super.init();  
  6.         this.converter = new ServletConverter(getServletContext());  
  7.   
  8.         Restlet trace = new Restlet(this.converter.getContext()) {  
  9.             public void handle(Request req, Response res) {  
  10.                 getLogger().info("Hello World");  
  11.                 res.setEntity("Hello World!", MediaType.TEXT_PLAIN);  
  12.             }  
  13.         };  
  14.   
  15.         this.converter.setTarget(trace);  
  16.     }  
  17.   
  18.     protected void service(HttpServletRequest req, HttpServletResponse res)  
  19.             throws ServletException, IOException {  
  20.         this.converter.service(req, res);  
  21.     }  
  22. }  

 

上面代码还是比较简单的,无非需要做三步:

1. 实例化一个ServletConverter

  

Java代码  收藏代码
  1. this.converter = new ServletConverter(getServletContext());  

 

2. 给第一步的ServletConverter实例设置一个restlet实例,这个实例在被调用时,执行restlet自己的代码

  

Java代码  收藏代码
  1. Restlet trace = new Restlet(this.converter.getContext()) {  
  2.     public void handle(Request req, Response res) {  
  3.         getLogger().info("Hello World");  
  4.         res.setEntity("Hello World!", MediaType.TEXT_PLAIN);  
  5.     }  
  6. };  
  7.   
  8. this.converter.setTarget(trace);  

 

3.调用执行的方法

   

Java代码  收藏代码
  1. this.converter.service(req, res);  

 

让我们打开源代码看一下上面的service方法:

 

Java代码  收藏代码
  1. public void service(HttpServletRequest request, HttpServletResponse response)  
  2.         throws ServletException, IOException {  
  3.     if (getTarget() != null) {  
  4.         Context.setCurrent(getContext());  
  5.   
  6.         // Convert the Servlet call to a Restlet call  
  7.         final ServletCall servletCall = new ServletCall(request  
  8.                 .getLocalAddr(), request.getLocalPort(), request, response);  
  9.         final HttpRequest httpRequest = toRequest(servletCall);  
  10.         final HttpResponse httpResponse = new HttpResponse(servletCall,  
  11.                 httpRequest);  
  12.   
  13.         // Adjust the relative reference  
  14.         httpRequest.getResourceRef().setBaseRef(getBaseRef(request));  
  15.   
  16.         // Adjust the root reference  
  17.         httpRequest.setRootRef(getRootRef(request));  
  18.   
  19.         // Handle the request and commit the response  
  20.         getTarget().handle(httpRequest, httpResponse);  
  21.         commit(httpResponse);  
  22.     } else {  
  23.         getLogger().warning("Unable to find the Restlet target");  
  24.     }  
  25. }  

 

上面代码的注释,已经清楚的说明整个调用过程,不再分析。

分享到:
评论

相关推荐

    org.restlet.ext.servlet

    看名字,有需要下jar包

    org.restlet.ext.servlet-2.1.1.jar

    org.restlet.ext.servlet-2.1.1.jar

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

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

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

    在《Restlet实战(二十六)事务 (Transaction)》这篇博文中,作者可能会详细讲解如何在Restlet框架中实现上述事务处理策略。Restlet是一个开源的Java框架,专门用于构建RESTful应用程序。它提供了丰富的API和工具,...

    RESTLET开发(三)

    ### RESTLET开发(三):基于Spring的REST服务 #### 一、基于Spring配置的Rest简单服务 在本文档中,我们将深入探讨如何利用RESTlet框架与Spring框架结合,构建高效的RESTful服务。Spring框架因其强大的功能和灵活...

    Restlet所需要的所有jar包

    本压缩包包含Restlet框架运行所需的全部jar文件,使得开发者可以便捷地在Java环境中开发、测试和部署RESTful服务。 Restlet框架的核心组件包括以下几个部分: 1. **客户端API**:提供了与REST服务器交互的能力,...

    org.restlet.ext.servlet-2.1.4.jar

    javaee/javaweb常用jar包,亲测可用,导入到java工程中即可使用

    org.restlet.jar

    org.restlet.jar

    org.restlet.ext.servlet-2.3.0.jar

    org.restlet.ext.servlet-2.3.0.jar

    Atlas2.3.0依赖: org.restlet/sqoop-1.4.6.2.3.99.0-195

    在IT行业中,我们经常涉及到各种库和框架的集成与使用,这次我们关注的是"Atlas2.3.0"依赖的组件:"org.restlet/sqoop-1.4.6.2.3.99.0-195"。这个依赖包含了三个关键的JAR文件:`sqoop-1.4.6.2.3.99.0-195.jar`,`...

    Restlet开发的Basic认证

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

    RESTLET开发

    RESTLET的核心目标之一是遵循Roy Fielding博士在其关于REST的博士论文中提出的理念,同时确保其提供的功能与这些理念保持一致。 RESTLET的另一个显著特点在于它提出了一种统一的Web视图,这种视图不仅适用于服务器...

    Restlet2 + Spring3 注解方式配置

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

    restlet2.1学习笔记项目代码

    在Restlet中,资源由`org.restlet.resource.ServerResource`或`org.restlet.resource.ClientResource`类表示,负责处理请求并返回响应。 3. **代表(Representation)**:在REST中,资源的状态通过数据的表示形式...

    restlet

    RESTlet是一款开源框架,专为构建基于REST(Representational ...通过学习这些资料,开发者可以深入理解RESTlet的工作原理,掌握如何使用RESTlet构建RESTful服务和客户端应用,从而提升其在Web服务开发领域的专业技能。

    org.restlet-2.3.0.jar 最新版本

    在2.3.0版本中,org.restlet库引入了以下关键特性: 1. **模块化设计**:库被分解为多个模块,如服务器、客户端、扩展和工具,开发者可以根据需要仅引入必要的部分,减少应用的体积和启动时间。 2. **更好的HTTP...

    restlet-jee-2.2.2

    以下是关于Restlet和其在Java EE中的应用的一些关键知识点: 1. **RESTful架构**:Restlet框架的核心理念是遵循REST原则,这包括资源定位(通过URI)、使用标准HTTP方法(GET、POST、PUT、DELETE等)操作资源、以及...

    基于Spring的Restlet实例

    标题"基于Spring的Restlet实例"意味着我们将探讨如何在Spring环境中集成和使用Restlet库来开发REST服务。这通常涉及以下几个关键知识点: 1. **RESTful服务基础**:REST是一种软件架构风格,强调通过HTTP协议暴露...

Global site tag (gtag.js) - Google Analytics