快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
的处理,比如输入转换、准备 响应、设定响应代码等等。此外,将Web Services逻辑与业务逻辑分隔开来的实践需要将业务逻辑包装到 单独的方法中以作为事务边界。

创建Spring MVC @Controller类

对于Spring MVC来说,我们需要创建DispatcherServlet,同时将contextConfigLocation参数指定为 Spring MVC配置:

<servlet>    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet- class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>        /WEB-INF/spring/*.xml      </param-value>    </init-param> </servlet>

要想在Spring MVC(@MVC)中使用基于注解的编程模型还需要少量的配置。下面的component-scan元 素会告诉Spring去哪里寻找@Controller注解类。

<context:component-scan base-package="org.springframework.samples.stocks" />

接下来,我们声明了AccountController,如下代码所示:

@Controller @RequestMapping("/accounts") public class AccountController {    @Autowired    private AccountRepository accountRepository; }

@RequestMapping注解会将该控制器映射到所有以“/accounts”开头的请求上。AccountController中 的方法如getAccount()只需声明针对“/accounts”的相对地址即可。

@RequestMapping(value = "/{username}", method = GET) public Account getAccount(@PathVariable String username) { }

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

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

Spring MVC则没有根资源与子资源的概念,这样每个控制器都是由Spring而非应用来管理的:

@Controller @RequestMapping("/accounts/{username}/portfolios") public class PortfolioController {    @Autowired    private AccountRepository accountRepository; }

对“/accounts/{username}/portfolios”的请求会被直接代理给 PortfolioController, AccountController则完全不会参与其中。需要注意的是,该请求也可以直接由 AccountController处理 ,这样就不需要PortfolioController了。

Web层组件范围

在JAX-RS中,AccountResource是通过前请求(per-request)语义声明的,这也是JAX-RS默认的推荐 设置。这么做可以将特定于请求的数据注入并存储到资源类本身当中,这适用于由JAX-RS所管理的根级别 资源。子资源由应用实例化,并不会直接从这种方法中获益。

在Spring MVC中,控制器永远都是单例的,他们将特定于请求的数据作为方法参数。JAX-RS也可以这 么做,以单例的方式创建资源。

将请求映射到方法上

接下来,我们看看Spring MVC和JAX-RS如何将请求映射到方法上。@Path和@RequestMapping都可以从 URL中抽取出路径变量:

@Path("/accounts/{username}") @RequestMapping("/accounts/{username}")

这两个框架也都可以使用正则表达式抽取路径变量:

@Path("/accounts/{username:.*}") @RequestMapping("/accounts/{username:.*}"

Spring MVC的@RequestMapping可以根据查询参数的有无来匹配请求:

@RequestMapping(parameters="foo") @RequestMapping(parameters="!foo")

或是根据查询参数值进行匹配:

@RequestMapping(parameters="foo=123")

@RequestMapping还可以根据头

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号