关于Java EE:Servlet与RESTful

Servlet vs RESTful

今天,我读到了Restful服务。 基本上,我了解的是Restful Web服务将对HTTP请求方法起作用,而不是普通Web服务将对SOAP请求起作用。

Restful服务有什么需求,因为普通的servlet也可以在HTTP方法上工作?


RESTful更是一种体系结构风格,而不是另一种技术。从服务器角度来看,它被设计为完全无状态,并且在每个请求的基础上都是独立的(即没有会话)。从客户端的角度来看,它是一种通过具有(自记录)路径参数而不是请求参数的URL通过不同格式获取信息的方法。

当然,您可以使用普通的香草servlet来执行此操作,但是它将引入一些样板代码来收集路径参数并生成所需的响应。 JAX-RS只是一个方便且自包含的API,无需您自己编写所有样板代码,从而使代码最少且具有更多自记录性。

假设您具有一个JAXB实体作为模型,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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资源,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@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);
    }

}

然后,您可以通过以下方式以正确的格式获取所需的内容:

  • http://example.com/rest/data/text/123
  • http://example.com/rest/data/xml/123
  • http://example.com/rest/data/json/123

而已。尝试使用一个简单的普通Servlet来做同样的事情:)请注意,SOAP本质上也通过HTTP进行。它基本上是HTTP上的额外XML层,而不是其他网络协议。

也可以看看:

  • REST教程
  • JAXB教程
  • 球衣教程


我认为,为了更好地理解,我们需要剖析混淆我们的组件,这些组件是,

  • REST概念
  • Fielding used REST to design HTTP 1.1 and Uniform Resource Identifiers
    (URI)

  • HTTP协议-
    超文本传输??协议
  • javax.servlet.http.HttpServlet
  • REST with Java-JAX-RS及其实现(例如Jersey等)
  • 其他不符合JAX-RS的REST实现(例如Spring REST)
    JAX-RS和Spring Rest之间的区别
  • 然后,如果您引用此答案来理解这些实现如何使用Servlet(具体的javax.servlet.http.HttpServlet)来拦截所有传入的请求。重要的报价是,

    These REST service classes are simple POJOs annotated to tell the
    jersey framework about different properties such as path, consumes,
    produces etc.

    然后,您可以进一步了解-REST和HTTP协议有什么区别? &HTTP和REST有什么区别?并得出一个结论,即如果您使Web服务RESTFul(即(从一个答案复制而来)),会带来什么好处,

    REST不必绑定到HTTP。 RESTful Web服务只是遵循RESTful体系结构的Web服务。

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

    使用REST而不是非REST HTTP有什么优势?

    但是,我不想讨论优点-缺点(优点和缺点)辩论,因为那是非常主观的。

    通过以上阅读,现在您的问题,

    What is the need for Restful services as normal servlet can also work
    on the HTTP methods?

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