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

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

    博客分类:
  • REST
阅读更多

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

 

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

 

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

 

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

 

 public class TestServlet extends HttpServlet {
     private ServletConverter converter;
 
     public void init() throws ServletException {
         super.init();
         this.converter = new ServletConverter(getServletContext());
 
         Restlet trace = new Restlet(this.converter.getContext()) {
             public void handle(Request req, Response res) {
                 getLogger().info("Hello World");
                 res.setEntity("Hello World!", MediaType.TEXT_PLAIN);
             }
         };
 
         this.converter.setTarget(trace);
     }
 
     protected void service(HttpServletRequest req, HttpServletResponse res)
             throws ServletException, IOException {
         this.converter.service(req, res);
     }
 }

 

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

1. 实例化一个ServletConverter

  

this.converter = new ServletConverter(getServletContext());

 

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

  

         Restlet trace = new Restlet(this.converter.getContext()) {
             public void handle(Request req, Response res) {
                 getLogger().info("Hello World");
                 res.setEntity("Hello World!", MediaType.TEXT_PLAIN);
             }
         };
 
         this.converter.setTarget(trace);

 

3.调用执行的方法

   

this.converter.service(req, res);

 

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

 

public void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	if (getTarget() != null) {
		Context.setCurrent(getContext());

		// Convert the Servlet call to a Restlet call
		final ServletCall servletCall = new ServletCall(request
				.getLocalAddr(), request.getLocalPort(), request, response);
		final HttpRequest httpRequest = toRequest(servletCall);
		final HttpResponse httpResponse = new HttpResponse(servletCall,
				httpRequest);

		// Adjust the relative reference
		httpRequest.getResourceRef().setBaseRef(getBaseRef(request));

		// Adjust the root reference
		httpRequest.setRootRef(getRootRef(request));

		// Handle the request and commit the response
		getTarget().handle(httpRequest, httpResponse);
		commit(httpResponse);
	} else {
		getLogger().warning("Unable to find the Restlet target");
	}
}

 

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

 

 

分享到:
评论

相关推荐

    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框架因其强大的功能和灵活...

    org.restlet.ext.servlet-2.1.4.jar

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

    Restlet所需要的所有jar包

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

    org.restlet-2.3.0.jar 最新版本

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

    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 in action 中文

    在**第三部分 Further usage possibilities**中,作者探讨了Restlet在不同环境中的应用,如云部署、浏览器端和移动端的使用,以及如何与语义网结合。这一部分展示了Restlet的灵活性和广泛适用性,无论是在传统的Web...

    Restlet1.0_中文起步_翻译自官网

    在本文档中,我们将了解如何开始使用Restlet 1.0创建一个简单的"Hello, World"应用程序。以下是你需要的步骤: 1. **环境准备**: - 确保你的开发环境中已经安装了JRE 1.5或更高版本。 - 下载Restlet的最新...

    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服务开发领域的专业技能。

    Restlet Client 插件安装包

    - 安装第三方插件可能存在风险,确保从可信来源获取`Restlet Client`插件。 - 使用时,遵循API的最佳实践,如使用合适的HTTP状态码,正确的数据格式等。 总之,`Restlet Client`是一款强大的REST API测试工具,它为...

Global site tag (gtag.js) - Google Analytics