【2016-05-08】Jersey vs. SpringMVC

當前Web Service 經常使用的風格有兩種,RESTful風格和RPC風格。html

 
1、RESTful與RPC簡介

RPC的中心是方法,REST的中心是資源。前端

RPC:其中RPC風格中常見的有XML-RPC和JSON-RPC,JSON以其簡潔、傳輸高效見長。java

RESTful:若是一個Web Service知足REST的幾個條件,那麼就稱他們是RESTful的。程序員

這裏提到的條件包括:(來自參考資料1)web

  • C/S結構 (這是Internet服務的一個基本特徵)spring

  • 無狀態 (很熟悉吧,呵呵)json

  • 能夠cache (想起了瀏覽器?)api

  • 分層系統 (想起了無數的架構?)瀏覽器

  • 統一的接口 (若是這是可能的,程序員有福了, :D)安全

  • code on demand(可選, 實際上是一種擴展性的要求)

以上幾個特徵和HTTP如此相像,

RESTful之於RPC之優勢:(來自參考資料1)

根據經驗,建議可以使用REST就儘可能使用REST, 主要基於下面幾個考慮:

  • 易擴展

  • 鬆耦合(意味着,不用強制要求客戶端去更新相應的代碼)

  • 客戶端實現語言無關

  • 性能

  • 安全性(例如HTTPS)

固然上述的幾點也並不是 RPC 都不知足,不過相對而言, REST 更加清晰和簡潔, 再輔以 JSON 相應的服務會在性能和穩定性(簡單一般意味着robust)方面有很大的提升.

 

2、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    
       
       
       

 

參考資料:

一、Web Service實踐之REST vs RPC(轉):http://www.cnblogs.com/Tim-Yi/archive/2011/11/03/2234230.html

二、JAX-RPC vs JAX-WS(一) 簡介:http://chxiaowu.iteye.com/blog/1287745

三、SpringMVC入門示例詳解:http://www.importnew.com/15141.html

四、servlet/filter/listener/interceptor區別與聯繫:http://blog.csdn.net/sundenskyqq/article/details/8549932

相關文章
相關標籤/搜索