看到这个题目,或许你会问,你之前的很多文章不都是与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");
- }
- }
上面代码的注释,已经清楚的说明整个调用过程,不再分析。
相关推荐
看名字,有需要下jar包
org.restlet.ext.servlet-2.1.1.jar
com.noelios.restlet.ext.servlet_2.4.jar
在《Restlet实战(二十六)事务 (Transaction)》这篇博文中,作者可能会详细讲解如何在Restlet框架中实现上述事务处理策略。Restlet是一个开源的Java框架,专门用于构建RESTful应用程序。它提供了丰富的API和工具,...
### RESTLET开发(三):基于Spring的REST服务 #### 一、基于Spring配置的Rest简单服务 在本文档中,我们将深入探讨如何利用RESTlet框架与Spring框架结合,构建高效的RESTful服务。Spring框架因其强大的功能和灵活...
本压缩包包含Restlet框架运行所需的全部jar文件,使得开发者可以便捷地在Java环境中开发、测试和部署RESTful服务。 Restlet框架的核心组件包括以下几个部分: 1. **客户端API**:提供了与REST服务器交互的能力,...
javaee/javaweb常用jar包,亲测可用,导入到java工程中即可使用
在2.3.0版本中,org.restlet库引入了以下关键特性: 1. **模块化设计**:库被分解为多个模块,如服务器、客户端、扩展和工具,开发者可以根据需要仅引入必要的部分,减少应用的体积和启动时间。 2. **更好的HTTP...
org.restlet.jar
org.restlet.ext.servlet-2.3.0.jar
在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`,`...
在**第三部分 Further usage possibilities**中,作者探讨了Restlet在不同环境中的应用,如云部署、浏览器端和移动端的使用,以及如何与语义网结合。这一部分展示了Restlet的灵活性和广泛适用性,无论是在传统的Web...
在本文档中,我们将了解如何开始使用Restlet 1.0创建一个简单的"Hello, World"应用程序。以下是你需要的步骤: 1. **环境准备**: - 确保你的开发环境中已经安装了JRE 1.5或更高版本。 - 下载Restlet的最新...
在Restlet框架中,实现基本认证主要涉及到以下几个步骤: 1. **创建认证控制器**:首先,你需要创建一个类来处理认证逻辑。这个类通常会扩展`org.restlet.ext.httpclient.Authenticator`类,并重写`authenticate`...
RESTLET的核心目标之一是遵循Roy Fielding博士在其关于REST的博士论文中提出的理念,同时确保其提供的功能与这些理念保持一致。 RESTLET的另一个显著特点在于它提出了一种统一的Web视图,这种视图不仅适用于服务器...
在本文中,我们将深入探讨如何在Spring 3框架中集成Restlet 2,利用注解方式进行配置。Restlet是一个轻量级的Java RESTful Web服务开发库,而Spring则是一个广泛使用的全面的企业级应用框架。结合两者,我们可以创建...
在Restlet中,资源由`org.restlet.resource.ServerResource`或`org.restlet.resource.ClientResource`类表示,负责处理请求并返回响应。 3. **代表(Representation)**:在REST中,资源的状态通过数据的表示形式...
RESTlet是一款开源框架,专为构建基于REST(Representational ...通过学习这些资料,开发者可以深入理解RESTlet的工作原理,掌握如何使用RESTlet构建RESTful服务和客户端应用,从而提升其在Web服务开发领域的专业技能。
在标签"reslet"中,我们可以推断这个主题主要关注Restlet框架及其相关技术。标签是用来分类和标识内容的关键字,这有助于我们在搜索和组织信息时更快速地找到相关的讨论和资源。 由于提供的压缩包子文件的文件名称...