Spring MVC与JAX-RS的比较

介绍 在过去的几年中,REST已成为影响Web框架,Web协议和应用程序设计的重要概念。 如果你还没有接触过它,看到这个简短的介绍中许多人,你可以找到。 考虑到公司需要公开应该尽可能简单并且植根于Web体系结构中的Web API,REST的重要性日益增长就不足为奇了。 通过Ajax进行通信的富浏览器客户端也寻求相同的条件。 而且没有任何理由为什么任何Web应用程序都不能从帮助扩展万维网...
摘要由CSDN通过智能技术生成

介绍

在过去的几年中,REST已成为影响Web框架,Web协议和应用程序设计的重要概念。 如果你还没有接触过它,看到这个简短的介绍许多人,你可以找到。

考虑到公司需要公开应该尽可能简单并且植根于Web体系结构中的Web API,REST的重要性日益增长就不足为奇了。 通过Ajax进行通信的富浏览器客户端也寻求相同的条件。 而且没有任何理由为什么任何Web应用程序都不能从帮助扩展万维网的体系结构原理中受益。

JAX-RS (JSR 311)是用于RESTful Web服务的Java API。 JAX-RS是在Roy Fielding (他的论文中定义REST)的参与下创建的。 它为寻求构建RESTful Web服务的用户提供了JAX-WS(JSR-224)的替代产品。 当前有4种JAX-RS实现可用,所有这些实现都支持使用Spring。 Jersey是参考实现,是本文中使用的参考实现。

如果您是使用Spring的开发人员,您可能想知道(或者可能已经有人问过)Spring MVC与JAX-RS相比如何? 此外,如果您已有使用控制器类层次结构(SimpleFormController和朋友)的现有Spring MVC应用程序,则可能不知道Spring MVC中现在提供了全面的REST支持。

本文将带您逐步了解Spring 3中提供的REST功能,并将它们与JAX-RS相关联。 希望该练习将帮助您理解两种编程模型之间的相似之处和不同之处。

在开始之前,指出JAX-RS是针对Web服务(而不是HTML Web应用程序)的开发可能会有所帮助,而Spring MVC则源于Web应用程序开发。 Spring 3为Web应用程序和Web服务添加了全面的REST支持。 但是,本文将重点介绍与Web服务开发有关的功能。 我相信这种方法将使在JAX-RS上下文中讨论Spring MVC更容易。

需要说明的第二点是,我们将要讨论的REST功能是Spring框架的一部分,并且是现有Spring MVC编程模型的延续。 因此,不存在您可能会想说的“ Spring REST框架”。 这只是Spring和Spring MVC。 实际上,这意味着,如果您有现有的Spring应用程序,则可以期望能够使用Spring MVC来创建HTML Web层和RESTful Web服务层。

关于代码片段

贯穿本文显示的代码段采用一个简单的域模型,该模型具有两个JPA注释的实体,分别称为AccountPortfolio ,其中一个Account有许多Portfolio。 持久层是用Spring配置的,并且包含一个JPA存储库实现,用于检索和持久化实体实例。 泽西岛和Spring MVC将用于构建Web服务层,以通过调用底层的Spring托管应用程序来满足客户请求。

引导和连线Web层

我们将假定在Spring MVC和JAX-RS场景中都使用Spring进行依赖项注入。 Spring MVC DispatcherServlet和Jersey SpringServlet将请求委托给Spring管理的REST层组件(控制器或资源),这些组件又将与业务或持久性组件进行连接,如下所示:

Jersey和Spring MVC都将依靠Spring的ContextLoaderListener来加载业务和持久性组件,例如JpaAccountRepository:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:META-INF/spring/module-config.xml
    </param-value>
</context-param>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

ContextLoaderListener可以在任何Web或REST框架的上下文中使用。

在Jersey中设置Spring-Managed JAX-RS资源

Jersey提供了在REST层中使用Spring的支持。 可以通过两个简单步骤启用它(如果您包括在Maven工件com.sun.jersey.contribs:jersey-spring上添加构建依赖项,则实际上是三个步骤)。

第一步:将以下内容添加到您的web.xml中,以确保可以使用Spring创建JAX-RS根资源:

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.spring.container.servlet.SpringServlet
    </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>

第二步:使用一些Spring和一些JAX-RS注释声明根JAX-RS资源类:

@Path("/accounts/")
@Component
@Scope("prototype")
public class AccountResource {

    @Context
    UriInfo uriInfo;

    @Autowired
    private AccountRepository accountRepo
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念。如果你还不了解REST,那这个简短的介绍将有助你快速掌握REST,此外还可以点击这里了解关于REST的更多信息。 相关厂商内容 高速下载:Adobe Flash Builder 4 简体中文正式版 for Windows 高速下载:Adobe Flash Builder 4 简体中文正式版 for Mac 利用Flex SDK创建易于访问的Adobe AIR应用程序 Adobe和英特尔联手推新服务帮助开发者发行AIR应用 构建更加完善的Adobe AIR应用程序之十大秘诀 相关赞助商 汇集最新RIA技术相关资源,提供Flash开发平台相关工具高速下载,免费获得Adobe软件的产品序列号。 现在有越来越多的公司希望能以简单而又贴合Web架构本身的方式公开Web API,因此REST变得越来越重要也就不足为奇了。使用Ajax进行通信的富浏览器端也在朝这个目标不断迈进。这个架构原则提升了万维网的可伸缩性,无论何种应用都能从该原则中受益无穷。 JAX-RS(JSR 311)指的是Java API for RESTful Web Services,Roy Fielding也参与了JAX-RS的制订,他在自己的博士论文中定义了REST。对于那些想要构建RESTful Web Services的开发者来说,JAX-RS给出了不同于JAX-WS(JSR-224)的另一种解决方案。目前共有4种JAX-RS实现,所有这些实现都支持Spring,Jersey则是JAX-RS的参考实现,也是本文所用的实现。 如果你使用Spring进行开发,那可能想知道(或者有人曾问过你)Spring MVCJAX-RS有何异同点?更进一步,如果你手头有一个Spring MVC应用,使用了控制类继承(SimpleFormController等),你可能还意识不到现在的Spring MVC对REST广泛的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值