Servlet与RESTful

时间:2011-10-24 11:10:26

标签: java-ee servlets jax-rs

今天我读到了Restful服务。基本上我所理解的是Restful webservices将在HTTP请求方法上工作,而不是普通的webservice将在SOAP请求上工作。

对Restful服务有什么需要,因为普通的servlet也可以处理HTTP方法?

3 个答案:

答案 0 :(得分:64)

RESTful更像是一种架构风格,而不是一种不同的技术。从服务器的角度来看,它被设计为完全无状态且基于每个请求自包含(即,没有会话)。从客户的角度来看,它更像是一种通过具有(自我记录)路径参数而不是请求参数的URL获取不同格式信息的方式。

当然,您可以使用普通的vanilla servlet执行此操作,但它会引入一些样板代码来收集路径参数并生成所需的响应。 JAX-RS只是一个方便且自包含的API,它不需要自己编写所有样板代码,从而产生最少的自我编码代码。

假设你有一个JAXB实体作为模型如下:

@XmlRootElement
public class Data {

    @XmlElement
    private Long id;

    @XmlElement
    private String value;

    // ...

    @Override
    public String toString() {
        return String.format("Data[id=%d,value=%s]", id, value);
    }

}

以下是JAX-RS资源:

@Path("data")
public class DataResource {

    @EJB
    private DataService service;

    @GET 
    @Path("text/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getAsText(@PathParam("id") Long id) {
        return String.valueOf(service.find(id));
    }

    @GET 
    @Path("xml/{id}")
    @Produces(MediaType.APPLICATION_XML)
    public Data getAsXml(@PathParam("id") Long id) {
        return service.find(id);
    }

    @GET 
    @Path("json/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Data getAsJson(@PathParam("id") Long id) {
        return service.find(id);
    }

}

然后,您已经通过以下方式获得了所需内容:

就是这样。尝试使用单个普通的Servilla来做同样的事情:)请注意,SOAP本质上通过HTTP。它基本上是HTTP上的额外XML层,而不是不同的网络协议。

另见:

答案 1 :(得分:0)

在我看来,为了更好地理解,我们需要剖析让我们和这些组件混淆的组件,

  1. REST Concept
  2.   

    Fielding使用REST来设计HTTP 1.1和统一资源标识符   (URI)

    1. HTTP 协议 - Hypertext Transfer Protocol
    2. javax.servlet.http.HttpServlet class
    3. REST with Java - JAX-RS及其实现(如Jersey等)
    4. 其他不符合JAX-RS的REST实现(如Spring REST) Difference between JAX-RS and Spring Rest
    5. 然后,如果您引用this answer来理解这些实现如何使用 Servlet (具体javax.servlet.http.HttpServlet)来拦截所有传入的请求。重要的是,

        

      这些REST服务类是注释的简单POJO   关于不同属性的泽西框架,如路径,消耗,   生产等。

      然后你可以进一步阅读 - What is the difference between REST and HTTP protocols?& What is the difference between HTTP and REST?并得出结论,如果您使用Web服务RESTFul会获得哪些优势,即(从一个答案中复制),

      REST 不一定与 HTTP 相关联。 RESTful Web服务只是遵循RESTful架构的Web服务。

      What is Rest -
      1- Client-server
      2- Stateless
      3- Cacheable
      4- Layered system
      5- Code on demand
      6- Uniform interface
      

      What is the advantage of using REST instead of non-REST HTTP?

      虽然,我不想进入优势 - 缺点(利弊)辩论,因为这是非常主观的。

      以上读数,现在是您的问题,

        

      对Restful服务的需求是什么,因为普通的servlet也可以工作   关于HTTP方法?

      您会理解REST框架只是简化企业级REST服务的实现,但它们确实使用HTTP Servlet来拦截传入的请求。您始终可以使用普通的servlet来实现自己的REST服务,但是使用大量的样板代码会花费更多的时间。

答案 2 :(得分:-2)

  • RESTeasy具有专有的@Form,可将表单参数(例如HTTP正文中的[BuildVersion]&[BuildVersion] ...)绑定到Java对象。如果要处理表单内容,则将花费大量精力将@formparam绑定到Java对象
  • RESTeasy的URL或查询专有缓存

RESTeasy易于进行EJB 3.0和SEAM集成,而Jersey易于进行Spring和JSON集成。