Servlet与RESTful

Dil*_*lip 48 servlets jax-rs java-ee

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

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

Bal*_*usC 65

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

和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);
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

也可以看看:

  • 不完全是这样,你也可以使用普通的servlet做同样的事情.现有的JAX-RS API只是最小化了样板.Restful更多的是关于URL格式.它允许您基于URL路径而不是请求参数执行操作. (2认同)