浅谈WebService之JAX-RS与spring整合

时间:2024-06-11 11:35:02
 背景:首先谈一下webservice:
1.Web service是一个平*立的,低耦合的,自包含的、基于可编程的web的应用程序,
可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,
用于开发分布式的互操作的应用程序。
其中最有分量的莫过于CXF框架了
  2.cxf框架又包含jax-ws和jax-rs这两类
 今天我们主要来研究一下jax-rs这种基于HTTP协议的(REST)架构风格创建与spring结合使用的Web服务:
一:服务器端:
1.导入对应的JAR包在你的pom.xml文件中如下:     
<dependencies>
<!-- cxf 进行rs开发 必须导入 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 日志引入 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<!-- 客户端 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 扩展json提供者 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 转换json工具包,被extension providers 依赖 -->
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.7</version>
</dependency>
<!-- spring 核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- spring web集成 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- spring 整合junit -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- junit 的测试开发包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<!-- 配置启动maven项目的服务端口为9996 -->
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<port>9996</port>
</configuration>
</plugin>
</plugins>
</build>
2.配置web.xml中的CXFService-servlet
<!-- spring配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- spring核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- CXF基于web的访问路径的配置servlet -->
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/services/★</url-pattern>
</servlet-mapping>
3.编写服务的接口、实现类、Dao以及实体类
接口
public interface IXxxService{
@Path
@Produces | @Consumes
@GET|@POST|@PUT|@DELETE
public 返回类型 method(@PathParam("")参数 || @QueryParam("")参数);
...
}
实现类
public class XxxServiceImpl implements IXxxService{
public 返回类型 method(参数){
业务操作
return 返回值
}
...
}
Dao层
public interface XxxDao implements JpaRepostory<T,String>();
实体类
@XmlRootElement//定义根元素 4.配置applicationContext.xml <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
<!--
address 发布服务地址
servicesBeans 服务实现类
-->
<jaxrs:server id="userService" address="/userService" >
<jaxrs:serviceBeans>
<bean class="cn.itcast.cxf.service.UserServiceImpl" />
</jaxrs:serviceBeans>
<jaxrs:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
</jaxrs:outInterceptors>
</jaxrs:server>
</beans> 5.发布服务器生成访问地址是: http://ip:port/项目/services(web.xml CXFServlet url-pattern)/address/path(method)[/参数] 二:客户端
1.直接使用WebClient调用相关属性进行操作:
WebClient.create(url)//创建连接
.type(MediaType.APPLICAITON_XML)//设置参数传递类型
.accept(MediaType.APPLICATION_JSON) //设置接收返回值的类型
.get(模型类.class) //设置查询 并设置模型类类型
.getCollection(模型类.class) //设置批量查询 并设置模型类类型
.put(带参数对象) //修改操作
.post(带参数对象) //新增操作
.delete(带参数对象) //删除操作
  三:提供第三方的接口(通过http协议进行不同系统之间的访问)
    常用的是:HTTPClient
OK,以上内容仅供参考,如有雷同,纯属巧合^-^.