使用Apache CXF开发REST风格的WebService

REST的概述:
REST(表现层状态转化),是一种新的软件架构风格,它以资源为核心,使用http,url,xml以及html等流行协议和标准来完成对资源的操作以及显示。这些操作包括获取,删除,修改,创建和删除资源。
(1)每一个URI代表一种资源
(2)客户端和服务器之间,传递这种资源的某种表现层
(3)客户端通过四个Http动词,对服务器端资源进行操作,实现“表现层状态转化”
(4)所有的操作都是无状态的
优点:
(1)对比SOAP和XML-RPC,REST服务更加简洁
(2)通过HTTP协议实现
(3)支持多种消息格式,如:XML,JSON
(4)可以利用缓存Cache来提高响应速度。

REST准则:
(1)网络上所有事物都被抽象为资源
(2)每个资源对应一个唯一的资源标识符
(3)通过通用的连接器接口,对资源进行操作
(4)对资源的各种操作不会改变资源标识符
(5)所有的操作都是无状态

REST风格的实现方式(Maven):

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zw</groupId><artifactId>WebServiceRest</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>WebServiceRest Maven Webapp</name><url>http://maven.apache.org</url><properties><spring-version>4.1.9.RELEASE</spring-version><cxf.version>3.1.7</cxf.version><jackson.version>2.8.1</jackson.version><junit.version>4.11</junit.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-rs-client</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-rs-service-description</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.jaxrs</groupId><artifactId>jackson-jaxrs-json-provider</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.1.9.RELEASE</version></dependency></dependencies><build><finalName>WebServiceRest</finalName></build>
</project>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><display-name>Archetype Created Web Application</display-name><welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<!-- 配置文件路径配置,可以使用默认值 "/WEB-INF/cxf-servlet.xml" -->
<init-param>
<param-name>config-location</param-name>
<param-value>classpath:cxf-servlet.xml</param-value></init-param></servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping></web-app>

其中:/service/*,对应的是service包下的类

cxf-servlet.xml(在src/resource下):

<?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"xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd "><!-- 上层的http用于配置Rest风格的WebService --><!-- <import resource="classpath:META-INF/cxf/cxf.xml"> --><context:annotation-config /><!-- 创建入门服务Bean --><bean id="userServiceRestFul" class="com.zw.service.impl.UserServiceRestFul"></bean><jaxrs:server id="restService" address="/s"><jaxrs:serviceBeans><ref bean ="userServiceRestFul"/></jaxrs:serviceBeans><jaxrs:extensionMappings><entry key="json"  value="application/json"/><entry key="xml"  value="application/xml"/></jaxrs:extensionMappings><jaxrs:providers ><bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" /></jaxrs:providers></jaxrs:server></beans>

创建一个实体类(Users):

package com.zw.bean;import java.util.Date;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="Users")
public class Users {private String name;private String id;private String sex;private String address;private Date birthday;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}}

@XmlRootElement:将对象转换成json

创建一个service 的包:
创建一个UserService接口:

package com.zw.service;import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;import com.zw.bean.Users;public interface UserService {@GET@Path("/get/{id}")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})public Users get(@PathParam("id")String id);@PUT@Path("/put/{id}")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})public Users put(@PathParam("id")String id,Users u);@POST@Path("/post/{id}")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})public Users post(@PathParam("id")String id,Users u);@DELETE@Path("/delete/{id}")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})public Users delete(@PathParam("id")String id);}

在service包下创建一个service 的实现类

UserServiceRestFul:

package com.zw.service.impl;import java.util.Date;import com.zw.bean.Users;
import com.zw.service.UserService;public class UserServiceRestFul implements UserService{@Overridepublic Users get(String id) {System.out.println("get方法中的id"+id);Users  users = new Users();users.setName("xaioxiao");users.setBirthday(new Date());users.setSex("nan");users.setAddress("guanz");return users;}@Overridepublic Users put(String id, Users u) {// TODO Auto-generated method stubreturn null;}@Overridepublic Users post(String id, Users u) {// TODO Auto-generated method stubreturn null;}@Overridepublic Users delete(String id) {// TODO Auto-generated method stubreturn null;}}

将项目放到tomcat中进行发布,在浏览器中输入地址:
localhost:8082/WebService/service

当出现这个界面就是成功了:

在浏览器中输入:
http://localhost:8082/WebServiceRest/service/s/get/a1


在浏览器中输入:
http://localhost:8082/WebServiceRest/service/s/get/a1?_type=json

这里将对象转换成了json串

使用Apache CXF开发REST风格的WebService相关推荐

  1. 用cxf开发restful风格的WebService

    我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...

  2. spring整合cxf开发rest风格的webservice接口(客户端服务端)

    前面文章记录了在spring中如何整合cxf开发webservice客户端和服务端,其实,相较于原生开发方式,已经有了不少优化.rest风格的开发,作为一种极为流行的开发规范,可以帮助我们更加简洁高效 ...

  3. cxf 服务端soap报文_使用Apache CXF开发SOAP Web服务

    cxf 服务端soap报文 在上一篇文章中,我逐步介绍了使用apache CXF开发简单的RESTFull服务的步骤. 在本文中,我将讨论使用CXF开发SOAP Web服务. 在继续前进之前,让我们先 ...

  4. 使用Apache CXF开发SOAP Web服务

    在上一篇文章中,我逐步介绍了使用apache CXF开发简单的RESTFull服务的步骤. 在本文中,我将讨论使用CXF开发SOAP Web服务. 在继续前进之前,让我们了解构成SOAP Web服务的 ...

  5. cxf restful_使用Apache CXF开发RESTful服务

    cxf restful 介绍 如您所知,有两种开发Web服务的方法 简单对象访问协议(SOAP) 代表性状态转移(REST) 在继续学习如何使用Apache CXF创建基于REST的Web服务之前,我 ...

  6. 使用Apache CXF开发RESTful服务

    介绍 如您所知,有两种开发Web服务的方法 简单对象访问协议(SOAP) 代表性状态转移(REST) 在继续学习如何使用Apache CXF创建基于REST的Web服务之前,我们将了解什么是REST. ...

  7. 【转】使用Apache CXF开发WebServices服务端

    原地址:http://cnjava.blog.51cto.com/1208887/335630 在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apach ...

  8. cxf开发基于web的webservice项目(转载)

    其实开发服务端, 大体分为2种方式: 一: 采用jdk给我们提供的jas-ws中的服务类来发布服务 二: 采用第三方框架来开发webservice. 那么为什么我们要选择第三方框架来发布一个webse ...

  9. cxf发布rest风格的webService

    第一步,创建工程并导入cxf jar包. 第二步,编写pojo. package com.scut.pojo;import java.util.Date;import javax.xml.bind.a ...

最新文章

  1. 联想发布首款自研工业机器人,用5G技术给国产大飞机喷漆
  2. CentOS 上安装MYSQL+Apache+PHP
  3. (转载)NET面向上下文、AOP架构模式(实现)
  4. VC内存泄露检查工具:Visual Leak Detector
  5. 朗读评价语言集锦_英语老师批改作业时的精彩评语集锦,超实用!
  6. leetcode 978. 最长湍流子数组(滑动窗口)
  7. pc wifi 软件 模拟串口_唐山现代新型物联网软件
  8. socket通信基础
  9. wxpython 优秀的界面剂_珠海界面剂
  10. 2016年度最受欢迎的100个Java库
  11. 构建之法读书笔记02
  12. WindowsServer2008R2系统版本升级
  13. 长沙开发者技术大会暨.NET技术社区成立大会倒数第13天
  14. mysql 嵌套查询多表_MySql嵌套查询+关联查询+多表查询+对应案例 超详细,一看就会!!!...
  15. 最新版微信小程序如何引入iconfont阿里矢量图库解决方案
  16. 读书《你能写出好故事:写作的诀窍、大脑的奥秘、认知的陷阱》
  17. 1024程序员节?我们整点AI绘图玩玩吧,一文教你配置stable-diffusion
  18. 蚁剑有时候连不上webshell
  19. [转] FileZilla Server超详细配置
  20. 服装品牌正向多元化全方面的发展

热门文章

  1. android应用程序开发(第二版)课后习题答案.doc,android移动应用开发习题答案.pdf
  2. 前端开发人员守则:如何避免浏览器兼容问题!
  3. JavaScript获取页面加载时间和页面停留时间
  4. 学二胡到底有没有用?感觉坚持不下去了该怎么办?
  5. 专访 | 清华大学朱军:深度学习“盛行”_传统方法何去何从?
  6. bat脚本对文件目录的复制和移动
  7. android 动态contextmenu,Android中ContextMenu用法实例
  8. 马宁关于Mango应用的Title的文章
  9. 裁判主导比赛【尼日利亚-希腊 德国-萨尔维亚】
  10. 查询mysql的服务名_数据库名实例名服务名