当前位置:  开发笔记 > 编程语言 > 正文

为什么要使用JAX-RS/Jersey?

如何解决《为什么要使用JAX-RS/Jersey?》经验,为你挑选了2个好方法。

对不起,这个问题听起来很愚蠢,但在使用Jersey开发我的一些RESTful服务后,我问自己一个问题 - 如果REST只是一个架构,而不是像SOAP这样的协议,为什么我们需要像JAX-RS这样的规范?

我实际上搜索了诸如"通过HTTP在servlet和RESTful服务之间有什么区别"之类的问题,并总结了社区的答案,我得到了:

    RESTful服务开发(在Jersey上)是一种体系结构,它本质上使用servlet.

    像Jersey这样的JAX-RS兼容工具提供了简单的编组 - 解组XML/JSON数据,帮助开发人员.

    REST帮助我们以比普通servlet更高效的方式使用GET/POST/PUT/DELETE.

根据这些答案,我想如果我编写一个使用JAXB的servlet(用于处理自动序列化),并且我在servlet代码中有效地使用GET/POST/PUT/DELETE,我不使用像Jersey这样的工具,因此JAX-RS.

我知道通过这个声明我非常错误,请纠正我.

PS:当我不得不在PHP中开发一些RESTful服务时,实际上出现了这种疑问.在继续浏览一些RESTful PHP代码之后,我意识到它们只是相同的旧PHP脚本,并且有一些辅助方法来处理XML/JSON.



1> bdoughan..:

为什么要使用JAX-RS/Jersey?

简答

因为在使RESTful服务的开发更容易.

答案很长

JAX-RS是一种标准,可以轻松创建可部署到任何Java应用程序服务器的RESTful服务:GlassFish,WebLogic,WebSphere,JBoss等.

JAX-RS是Java EE的一部分,当JAX-RS与其他Java EE技术一起使用时,创建RESTful服务变得更加容易:

EJB - 会话bean用作服务实现,还处理事务语义.

JAX-RS - 用于将会话bean公开为RESTful服务

JPA - 用于将POJO持久保存到数据库中.注意如何将EntityManager注入到会话bean中.

JAXB - 用于将POJO转换为XML或从XML转换(在GlassFish中它也可用于将POJO转换为JSON或从JSON转换).默认情况下,JAX-RS处理与JAXB实现的交互.

JAX-RS服务示例

package org.example;

import java.util.List;

import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {

    @PersistenceContext(unitName="CustomerService",
                        type=PersistenceContextType.TRANSACTION)
    EntityManager entityManager;

    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public void create(Customer customer) {
        entityManager.persist(customer);
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{id}")
    public Customer read(@PathParam("id") long id) {
        return entityManager.find(Customer.class, id);
    }

    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    public void update(Customer customer) {
        entityManager.merge(customer);
    }

    @DELETE
    @Path("{id}")
    public void delete(@PathParam("id") long id) {
        Customer customer = read(id);
        if(null != customer) {
            entityManager.remove(customer);
        }
    }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("findCustomersByCity/{city}")
    public List findCustomersByCity(@PathParam("city") String city) {
        Query query = entityManager.createNamedQuery("findCustomersByCity");
        query.setParameter("city", city);
        return query.getResultList();
    }

}

欲获得更多信息:

http://blog.bdoughan.com/2010/08/creating-restful-web-service-part-45.html



2> Don Roby..:

REST是一种体系结构,本质上使用servlet.

不它不是.REST是一种体系结构样式,可以使用servlet实现,但本身并不使用它们,也不一定与Java有任何关系.

JAX-RS是一个JSR规范,用于为RESTful Web服务定义Java API.

Jersey是JAX-RS的特定实现.

至于是否使用Jersey或尝试符合JAX-RS规范,这取决于您.如果它让你的工作更轻松,那太好了!如果不是没有人强迫你.


+1附加说明:使用JAX-RS几乎可以保证比使用servlet滚动自己的ReSTful实现容易得多.这就是它的全部意义.
@WinOrWin:我们也可以在汇编中做所有事情,那么为什么要使用Java呢?我只能说两种方式都写一个ReSTful API,并决定你一遍又一遍地做什么.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有