浅谈WebService之JAX-RS与spring整合
- 背景:首先谈一下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,以上内容仅供参考,如有雷同,纯属巧合^-^.
浅谈WebService之JAX-RS与spring整合的更多相关文章
- 浅谈WebService SOAP、Restful、HTTP(post/get)请求
http://www.itnose.net/detail/6189456.html 浅谈WebService SOAP.Restful.HTTP(post/get)请求 2015-01-09 19:2 ...
- 浅谈WebService开发三(动态调用WebService)转
在前两讲里,我已经向大家演示了如何使用WebService.同步, 异步调用WebService,而在实际开发过程中,可能会有多个WebService接口供你选择,而在程序执行过程中才决定使用哪一个 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈WebService返回数据效率对比
原文链接 http://www.dotnetgeek.cn/xuexiwebservice1.html 一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问 ...
- 浅谈WebService的调用<转>
0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...
- 浅谈WebService开发(一)
一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使 用WebSer ...
- 浅谈WebService的调用
0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...
- 浅谈IDEA集成SSM框架(SpringMVC+Spring+MyBatis)
前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...
- 浅谈WebService开发二(同步与异步调用)转
上文 <http://www.dotnetgeek.cn/xuexiwebservice1.html>已经跟大家说了,如果创建一个webservice和简单的调用,本文将注重webserv ...
随机推荐
- Logstash IIS日志采集
Logstash IIS 日志采集,跟Linux上运行差不多,都需要java运行环境,装个jdk就好了,对于IIS日志暂时未处理X-forward-for,纠结怎么弄当中,貌似要装个插件,慢慢研究. ...
- Oracle 中wmsys.wm_concat拼接字符串,结果过长报错解决
备忘:这个函数最大是4000,根据拼接列的长度,通过限制拼接条数来防止拼接字符串过长错误 --这个情况是从子表中读取出具,这里直接把它当做查询字段处理,在子表中有所有数据 select info.id ...
- 2016级算法第一次练习赛-C.斐波那契进阶
870 斐波那契进阶 题目链接:https://buaacoding.cn/problem/870/index 思路 通过读题就可以发现这不是一般的求斐波那契数列,所以用数组存下所有的答案是不现实的. ...
- 如何在NSDocumentDirectory内新建一个文件夹
iOS下载文件一般保存到NSDocumentDirectory内,但是为了更好整理文件内容,那就要自定义的生成一些文件夹,和做一些删除文件夹的操作. - (NSString *)pathToPatie ...
- 如何高度自定义CollectionView的header和foot
最近在研究CollectionView,突然发现觉得他的HeaderSection和FootSection也可以高度自定义. 国外有详细的教程:http://www.appcoda.com/ios-c ...
- Maven web项目(简单的表单提交) 搭建(eclipse)
我们将会搭建一个,基于Maven管理的,具有简单的表单提交功能的web项目,使用DAO--service--WEB三层结构,服务器使用Tomcat 1 项目基本结构的搭建 左上角File---> ...
- logo back 日志 发送邮件
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--<pr ...
- 更改Android编译软件版本(make/gcc/bision)
一.make版本 1.下载make的压缩包 ftp://ftp.gnu.org/gnu/make/ 2.解压,安装 cd make-x.x ./configuration sh build.sh su ...
- [转] 在Jenkins Pipeline DSL中 遍历 groovy list
[From] https://stackoverflow.com/questions/36360097/iterating-a-groovy-list-in-jenkins-pipeline-dsl ...
- 【Python】批量检测百度权重
挖洞过程中收集了站点后,我一般习惯查看站点的百度权重值,为了方便,写了一个简单的脚本, 至于结果如何显示,看个人需求吧,我这里只是简单的列一下,脚本如下: #coding:utf-8 import r ...