文档章节

【2016-05-08】Jersey vs. SpringMVC

rathan0
 rathan0
发布于 2016/05/08 10:08
字数 675
阅读 2050
收藏 6

当前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中配置

@Controller

@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

© 著作权归作者所有

rathan0
粉丝 4
博文 66
码字总数 36282
作品 0
程序员
私信 提问
【2016-05-09】SpringMVC结构简介(half done)

前面写了篇文章Jersey vs. SpringMVC从使用角度简单写了下两者的区别,写完后发现对两个框架都不了解,于是搜集了SpringMVC的资料,本文为整理的内容。 一、SpringMVC中重要的概念: Dispat...

rathan0
2016/05/09
47
0
WebApplicationContext 为什么会startup 两次????

2016-08-05 01:46:11,301 INFO [servlet.mvc.method.annotation.RequestMappingHandlerAdapter] - Looking for @ControllerAdvice: WebApplicationContext for namespace 'dispatcher-servle......

张明楠
2016/08/05
794
1
SpringCloud Eureka 源码解析 —— 应用实例注册发现(六)之全量获取

SpringCloud Eureka 源码解析 —— 应用实例注册发现(六)之全量获取 Harries Blog™2017-12-311 阅读 ACESpringAppcacheAPIbuildAtombug 摘要: 原创出处 http ://www. ioc oder.cn/ Eureka...

Harries Blog™
2017/12/31
0
0
网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化

网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化 Harries Blog™2017-12-135 阅读 SpringAppclasspathcatbeanAPIbuildbug 本文主要基于 Spring-Cloud-Gateway 2.0.X M4 摘要: 原创出处 ......

Harries Blog™
2017/12/13
0
0
Ignite客户端启动时间过长

@李玉珏 你好,想跟你请教个问题: 我在windows开发机上执行Ignite ignite = Ignition.start("config_poc.xml")这个条语句时,每次耗时都要10s以上。远端Ignite集群是在两台高性能的物理机上...

happycool333
2016/06/23
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
14分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
20分钟前
2
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
28分钟前
2
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
30分钟前
3
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部