Skip to main content
 首页 » 编程设计

jakarta-ee之Servlet 与 RESTful

2024年05月22日78bonelee

今天我读到了有关 Restful 服务的内容。基本上我的理解是 Restful Web 服务将在 HTTP 请求方法上工作,而不是普通的 Web 服务将在 SOAP 请求上工​​作。

普通 servlet 也可以在 HTTP 方法上工作,所以需要 Restful 服务吗?

请您参考如下方法:

RESTful 与其说是一种不同的技术,不如说是一种架构风格。从服务器的角度来看,它被设计为完全无状态并且基于每个请求是独立的(即没有 session )。从客户端的角度来看,它更像是一种通过带有(自文档化)路径参数而不是请求参数的 URL 获取不同格式信息的方法。

当然,您可以使用普通的 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); 
    } 
 
} 

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

就是这样。尝试对单个普通 Servlet 执行相同的操作:) 请注意,SOAP 本质上通过 HTTP 进行。它基本上是 HTTP 上的额外 XML 层,而不是不同的网络协议(protocol)。

另请参阅: