基于RESTful Web Service 的Jersey框架与Spring完美整合

http://minjiechenjava.iteye.com/blog/1571429

      前几天一时兴起,看到一个基于RESTful web Service的很不错的框架 jersey .并且做了一个小小的案例.

 说起jersey,应该首先简要的阐述一下REST,REST概念是由加州大学的Roy Fielding 在2000年提出,REST不是一种技术,它是一种开发方式和风格,REST 定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态,也已经普遍地取代了基于 SOAP 和 WSDL 的接口设计。而Jersey是一个REST 很好的轻量级实现框架.

     刚听说jersey的时候,我并不是很倾向,因为在此之前基于RESTful的实现框架有很多,比如XFire,Restlet,Resteasy等等,但我还是使用了之后,觉得它与Spring完美集成,让我们在开发中提高了很多小于,也相对的减少非法侵入.

    下面我们来搭建一个jersey的web service Project:

   我的IDE环境是myeclipse,jre 在jdk1.6上  web 服务器是tomcat 6

      一、第一步新建一个web project 。

      二、然后将相关的spring  jar包导入项目中, spring-core,aop,beans,jdbc,context,asm,orm,web等去官网下载http://www.springsource.org/download/  list  中所有的jar包

     三、下载jersey 相关的jar包

           

 

    四、 导入aopalliance.jar 不然会报错 找不到相关文件,log4j jar 和log4j.properties

    五、  创建自己的应用程序

 

 

 

 

我现在直接写一个helloworld对象 将helloworl 对象通过webservice 访问来返回相关数据格式的数据

 

 

Java代码   收藏代码
  1. package com.jerrys.jerseyrest.entity;  
  2.   
  3.   
  4. import java.io.Serializable;  
  5. import java.util.HashMap;  
  6. import java.util.Map;  
  7.   
  8. import javax.xml.bind.annotation.XmlRootElement;  
  9.   
  10. @XmlRootElement  
  11. public class Helloworld implements Serializable {  
  12.     private String content;  
  13.     private Map<String, Object> helloMap = new HashMap<String, Object>();  
  14.   
  15.     public Helloworld() {  
  16.         helloMap.put("xiaoming""我是小明:");  
  17.         helloMap.put("xiaoqiang""我是小强:");  
  18.     }  
  19.   
  20.     public Object getHelloByName(String name) {  
  21.         return helloMap.get(name);  
  22.     }  
  23.   
  24.     public String getContent() {  
  25.         return content;  
  26.     }  
  27.   
  28.     public void setContent(String content) {  
  29.         this.content = content;  
  30.     }  
  31.   
  32.     public Map<String, Object> getHelloMap() {  
  33.         return helloMap;  
  34.     }  
  35.   
  36.     public void setHelloMap(Map<String, Object> helloMap) {  
  37.         this.helloMap = helloMap;  
  38.     }  
  39.   
  40. }  
 

 

 

@XmlRootElement 是jax-rs中 提供将对象的属性绑定返回时将已json或者xml等数据返回.

 

 

 

Java代码   收藏代码
  1. package com.jerrys.jerseyrest.webservice;  
  2.   
  3. import javax.ws.rs.GET;  
  4. import javax.ws.rs.Path;  
  5. import javax.ws.rs.Produces;  
  6. import javax.ws.rs.core.MediaType;  
  7.   
  8. import org.apache.log4j.Logger;  
  9.   
  10. import com.jerrys.jerseyrest.entity.Helloworld;  
  11.   
  12. @Path("/helloService")  
  13. public class HelloRestService {  
  14.     public static Logger log = Logger.getLogger(HelloRestService.class);  
  15.   
  16.     /** 
  17.      * 获取helloworld 
  18.      */  
  19.     @GET  
  20.     @Path("/hello")  
  21.     @Produces( { MediaType.APPLICATION_JSON })  
  22.     public Helloworld getHelloworld() {  
  23.         Helloworld hi = null;  
  24.         try {  
  25.             hi = new Helloworld();  
  26.   
  27.             hi.setContent((String) hi.getHelloByName("xiaoqiang"));  
  28.   
  29.         } catch (Exception e) {  
  30.             log.error(e.getMessage(), e);  
  31.             e.printStackTrace();  
  32.         }  
  33.         return hi;  
  34.     }  
  35. }  
 

 

       @Path("/helloWervice")  是你访问该HelloRestService 资源的uri 标识对应的url访问路径是: http://localhost:8080/projectName/helloWervice

 

      @Path(/hello) 是  HelloRestService  中getHelloworld()方法上是访问该方法资源的uri标识,对应的url路径是

http://localhost:8080/projectName/helloWervice/hello

 

我们可以定义该方法是用来获取资源数据的所以我们可以定义成@GET,如果是@PUT那就是更新,@DELETE是删除资源,@POST创建。也可以叠加

 

  @Produces({ MediaType.APPLICATION_JSON }定义了我们返回的数据格式.这边我们直接用的变量,我们也可以直接写"application/xml","application/json","text/html"

 

当然我们也可以定义参数@PathParam("name") 定义传值的参数

 

 

 

接下来我们来配置Web.xml  

 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.     <display-name>jax-rs</display-name>  
  7.     <!-- Helps locate the applicationContext.xml file -->  
  8.     <context-param>  
  9.         <param-name>contextConfigLocation</param-name>  
  10.         <param-value>classpath:applicationContext.xml</param-value>  
  11.     </context-param>  
  12.   
  13.     <listener>  
  14.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  15.     </listener>  
  16.   
  17.     <listener>  
  18.         <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
  19.     </listener>  
  20.     <filter>  
  21.         <filter-name>encodingFilter</filter-name>  
  22.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  23.         <init-param>  
  24.             <param-name>encoding</param-name>  
  25.             <param-value>UTF-8</param-value>  
  26.         </init-param>  
  27.         <init-param>  
  28.             <param-name>forceEncoding</param-name>  
  29.             <param-value>true</param-value>  
  30.         </init-param>  
  31.     </filter>  
  32.     <filter-mapping>  
  33.         <filter-name>encodingFilter</filter-name>  
  34.         <url-pattern>/*</url-pattern>  
  35.     </filter-mapping>  
  36.     <!-- Configuration for Jersey Web Services starts here -->  
  37.     <servlet>  
  38.         <servlet-name>jersey</servlet-name>  
  39.         <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
  40.         <init-param>  
  41.             <param-name>com.sun.jersey.config.property.packages</param-name>  
  42.             <!-- The package in which the Resource classes located-->  
  43.             <param-value>com.jerrys.jerseyrest.webservice</param-value>  
  44.         </init-param>  
  45.         <load-on-startup>1</load-on-startup>  
  46.     </servlet>  
  47.   
  48.     <servlet-mapping>  
  49.         <servlet-name>jersey</servlet-name>  
  50.         <!--  
  51.             Enables us to access the WS by pointing your browser to this URL :  
  52.             http://localhost:8080/any_name/{service-path}  
  53.         -->  
  54.         <url-pattern>/*</url-pattern>  
  55.     </servlet-mapping>  
  56.     <!-- Configuration for Jersey Web Services ends here -->  
  57.     <session-config>  
  58.         <session-timeout>10</session-timeout>  
  59.     </session-config>  
  60.     <welcome-file-list>  
  61.         <welcome-file>index.jsp</welcome-file>  
  62.     </welcome-file-list>  
  63. </web-app>  

 

加载jersey  和Srping 的servlet

 

 

然后在创建 applicationContext.xml 的spring配置文件

 

   <?xml version="1.0" encoding="UTF-8"?>

Xml代码   收藏代码
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  3.     xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  5.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  6.     http://www.springframework.org/schema/context   
  7.     http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  8.     http://www.springframework.org/schema/tx   
  9.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"  
  10.     default-lazy-init="true" >  
  11.     <!-- 使用Annotation(注解)自动注册Bean(自注入) ,并检查@Required,@Autowired的属性已被注入 -->  
  12.     <context:component-scan base-package="com.jerrys.jerseyrest"></context:component-scan>  
  13.     <!-- JOTM本地实例 -->  
  14.     <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />  
  15.   
  16.     <bean id="txManager"  
  17.         class="org.springframework.transaction.jta.JtaTransactionManager">  
  18.         <property name="userTransaction" ref="jotm"></property>  
  19.     </bean>  
  20.   
  21.   
  22.     <bean id="jta1Datasource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"  
  23.         destroy-method="shutdown">  
  24.         <property name="dataSrouce">  
  25.             <bean class="org.enhydra.jdbc.standard.StandardXADataSource"  
  26.                 destroy-method="shutdown">  
  27.                 <property name="transactionManager" ref="jotm" />  
  28.                 <property name="driverName" value="com.mysql.jdbc.Driver" />  
  29.                 <property name="url" value="jdbc:mysql://192.168.1.20:3306/jtatest1" />  
  30.   
  31.             </bean>  
  32.         </property>  
  33.         <property name="user" value="root"></property>  
  34.         <property name="password" value="zgjf168"></property>  
  35.     </bean>  
  36.   
  37.   
  38.   
  39.     <bean id="jta2Datasource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"  
  40.         destroy-method="shutdown">  
  41.         <property name="dataSrouce">  
  42.             <bean class="org.enhydra.jdbc.standard.StandardXADataSource"  
  43.                 destroy-method="shutdown">  
  44.                 <property name="transactionManager" ref="jotm" />  
  45.                 <property name="driverName" value="com.mysql.jdbc.Driver" />  
  46.                 <property name="url" value="jdbc:mysql://192.168.1.20:3306/jtatest2" />  
  47.   
  48.             </bean>  
  49.         </property>  
  50.         <property name="user" value="root"></property>  
  51.         <property name="password" value="zgjf168"></property>  
  52.     </bean>  
  53.   
  54.     <bean id="jta1Template" class="org.springframework.jdbc.core.JdbcTemplate">  
  55.         <property name="datasource" ref="jta1Datasource" />  
  56.     </bean>  
  57.     <bean id="jta2Template" class="org.springframework.jdbc.core.JdbcTemplate">  
  58.         <property name="datasource" ref="jta2Datasource" />  
  59.     </bean>  
  60.   
  61.     <!-- 注解事务驱动 -->  
  62.     <tx:annotation-driven transaction-manager="txManager"  
  63.         proxy-target-class="true" />  
  64. </beans>  

 

 

  我在jersey与spring整合同时,我也提到了使用JTA分布式事务 的配置,但这边只是一个案例,仅提供参考,所以没有集成整合Hibernate  所以请包涵.

 

 

 

  对于JTA分布式事务  的详细概念  我在这就不一一阐述了.请参见http://www.ibm.com/developerworks/cn/webservices/ws-transjta/

 

 

 

功能还待完善,如有不正确的观点,请予以点评.

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值