当前Web Service 常用的风格有两种,RESTful风格和RPC风格。
一、RESTful与RPC简介
RPC的中心是方法,REST的中心是资源。
RPC:其中RPC风格中常见的有XML-RPC和JSON-RPC,JSON以其简洁、传输高效见长。
RESTful:如果一个Web Service满足REST的几个条件,那么就称他们是RESTful的。
这里提到的条件包括:(来自参考资料1)
-
C/S结构 (这是Internet服务的一个基本特征)
-
无状态 (很熟悉吧,呵呵)
-
可以cache (想起了浏览器?)
-
分层系统 (想起了无数的架构?)
-
统一的接口 (如果这是可能的,程序员有福了, :D)
-
code on demand(可选, 其实是一种扩展性的要求)
以上几个特征和HTTP如此相像,
RESTful之于RPC之优点:(来自参考资料1)
根据经验,建议能够使用REST就尽量使用REST, 主要基于下面几个考虑:
-
易扩展
-
松耦合(意味着,不用强制要求客户端去更新相应的代码)
-
客户端实现语言无关
-
性能
-
安全性(例如HTTPS)
当然上述的几点也并非 RPC 都不满足,不过相对而言, REST 更加清晰和简洁, 再辅以 JSON 相应的服务会在性能和稳定性(简单通常意味着robust)方面有很大的提高.
二、Jersey与SpringMVC比较
Java中的REST规范是JAX-RS,对应的RPC规范叫做JAX-WS。
Jersey与SpringMVC都是JAX-RS的参考实现。(与JAX-RS相对的是JAX-WS)
下面粗浅比较下两者的区别。
Jersey | SpringMVC | Struts2 | |
遵循JAX-RS协议 | 是,并提供了自己的扩展API | 完全不 | |
与Spring整合 |
<servlet> <servlet-name>jerseyServlet</servlet-name> <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.rathan</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
|
与Spring无缝结合
<servlet> <servlet-name>springWebMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springWebMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> |
|
UT | 利用Spring提供的Mock对象能够非常简单的进行Web层单元测试 | ||
web容器入口 | servlet | servlet | filter |
前端控制器 | com.sun.jersey.spi.spring.container.servlet.SpringServlet(jersey-spring包中) org.glassfish.jersey.servlet.ServletContainer(jersey-container-servlet-core包中) |
DispatcherServlet,需要在web.xml中配置 @RequestMapping(value = "/owner")
|
|
jersey和spring结合,可以使用spring的一些功能,比如注入、spring配置、单例、request scopes | |||
参考资料:
1、Web Service实践之REST vs RPC(转):http://www.cnblogs.com/Tim-Yi/archive/2011/11/03/2234230.html
2、JAX-RPC vs JAX-WS(一) 简介:http://chxiaowu.iteye.com/blog/1287745
3、SpringMVC入门示例详解:http://www.importnew.com/15141.html
4、servlet/filter/listener/interceptor区别与联系:http://blog.csdn.net/sundenskyqq/article/details/8549932
来源:oschina
链接:https://my.oschina.net/u/2266556/blog/671432