早起的鸟儿

一个苦逼的码农

WebServiceCXF的使用入门

 什么是WebService  

WebService是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

很多个系统,进行分布的部署,分布的系统数据通信,解决技术就是WebService

 什么是CXF

Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXFCXF 继承了 Celtix XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding DataBindingTransport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

CXF是目前最主流WebService开发框架,由Apache提供

CXF WebService开发,主要分为两种服务提供方式WSRS

两种传输数据的方式

1JAX-WS 传输数据,就是XML格式,基于SOAP协议(Simple Object Access protocol,简单对象访问协议)

2JAX-RS传输数据,传输XML格式或者JSON格式,基于HTTP协议

其中rs应用的比较广泛

而rs也是基于Restful风格编写的

1.什么是Restful风格

Representational State Transfer

一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GETPUTPOST DELETE

2、 Restful风格好处

1) 基于这种风格架构,软件编写可以更简洁

2) 基于HTTP协议,支持多种消息格式,比如XMLJSON

3)更容易实现缓存机制(第一次访问资源缓存到本地,第二次访问资源,返回304,客户端调用本地)200500 404304

关于restful注解

1.请求方式的注解
@POST请求方式访问 保存操作
@DELETE请求方式访问 删除操作
@PUT请求方式访问     修改操作

@GET请求方式访问 查询操作

2.访问资源路径的注解:@Path 

如果访问saveUser方法 服务地址+/userService/user

3.请求参数和返回值的注解:@Produces生成(方法返回值)@Consumes消费(方法参数)

   @Consumes 指定能够处理客户端传递过来数据格式     与WebClient的type方法对应
   @Produces 指定能够生成哪种格式数据返回给客户端   与WebClient的accept方法对应

@PathParam http://localhost:9997/userService/user/1 @Path("/user/{id3}")与@PathParam("id3")对应

@QueryParam  http://localhost:9997/userService/user?id2=1 参数名id2与@QueryParam("id2")对应

@Consumes与@PathParam和@QueryParam的区别:
@PathParam和@QueryParam处理简单参数类型,如String、Integer等

@Consumes处理自定义对象类型,如User、Car等

如果实体类有泛型需要加上

@XmlSeeAlso({Promotion.class})

没有的话只需要加上下面一个就可以了

@XmlRootElement(name="pageBean")

CXF整合spring开发步骤

第一步:准备服务

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

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-rt-rs-extension-providers</artifactId>
			<version>3.0.1</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.1.7.RELEASE</version>
		</dependency>

配置web.XML

<!-- 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>
	
	<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>

配置applicationContext.xml

<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">

	<jaxrs:server id="userService" address="/userService" >
		<jaxrs:serviceBeans>
			<bean class="类路径" />
		</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>

编写服务接口及实现类

@Produces("*/*")
public interface IUserService {

	@POST
	@Path("/user")
	@Consumes({ "application/xml", "application/json" })
	public void saveUser(User user);

	@PUT
	@Path("/user")
	@Consumes({ "application/xml", "application/json" })
	public void updateUser(User user);

	@GET
	@Path("/user")
	@Produces({ "application/xml", "application/json" })
	public List<User> findAllUsers();

	@GET
	@Path("/user/{id}")
	@Consumes("application/xml")
	public User finUserById(@PathParam("id") Integer id);

	@DELETE
	@Path("/user/{id}")
	@Consumes("application/xml")
	public void deleteUser(@PathParam("id") Integer id);
}

第二步:发布服务

第三步:调用服务

        浏览器调用

WebClient调用

最基本的使用搞定了

阅读更多
上一篇关于FreeMarker的使用入门
下一篇springDataJpa的基本使用
想对作者说点什么? 我来说一句

ARM MCU开发工具MDK使用入门

2013年10月04日 33.95MB 下载

没有更多推荐了,返回首页

关闭
关闭