快速业务通道

Spring MVC与JAX-RS比较与分析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Spring MVC与JAX-RS比较与分析

时间:2011-10-22 infoq 译:张龙

导言

过去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念。

现在有越来越多的公司希望能以简单而又贴合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 MVC与JAX-RS有何异同点? 更进一步,如果你手头有一个Spring MVC应用,使用了控制类继承(SimpleFormController等),你可能 还意识不到现在的Spring MVC对REST广泛的支持。

本文将介绍Spring 3中的REST特性并与JAX-RS进行对比,希望能帮助你理顺这两种编程模型之间的异 同点。

开始前,有必要指出JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目 标则是Web应用开发。Spring 3为Web应用与Web Services增加了广泛的REST支持,但本文则关注于与Web Services开发相关的特性。我觉得这种方式更有助于在JAX-RS的上下文中讨论Spring MVC。

要说明的第二点是我们将要讨论的REST特性是Spring Framework的一部分,也是现有的Spring MVC编 程模型的延续,因此,并没有所谓的“Spring REST framework”这种概念,有的只是Spring和Spring MVC。这意味着如果你有一个Spring应用的话,你既可以使用Spring MVC创建HTML Web层,也可以创建 RESTful Web Services层。

关于文中的代码片段

文中的代码片段假想了一个简单的领域模型:两个JPA注解实体,分别是Account和Portfolio,其中一 个Account对应多个 Portfolio。持久层使用Spring配置,包含了一个JPA仓储实现,用于获取和持久化实 体实例。Jersey和Spring MVC用于构建Web Services层,通过调用底层的Spring托管应用来服务客户端请 求。

引导程序与Web层包装

我们会在Spring MVC和JAX-RS中都使用Spring实现依赖注入。Spring MVC DispatcherServlet和 Jersey SpringServlet会把请求代理给Spring管理的REST层组件(控制器或资源),后者会由业务或持久 层组件包装起来,如下图所示:

Spring MVC与JAX-RS比较与分析(2)

时间:2011-10-22 infoq 译:张龙

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管理的JAX-RS资源

Jersey支持在REST层中使用Spring,两个简单的步骤就能搞定(事实上有3步,还需要将构建依赖加到 maven artifact com.sun.jersey.contribs:jersey-spring中)。

步骤一:将如下配置片段加到web.xml中以保证Spring能够创建JAX-RS根资源:

<servlet>

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号