以下引用与网络中!!!
一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,无论是对URL的处理还是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并没有一个明确的标准,而更像是一种设计的风格。
REST是REST之父Roy Thomas创造的,当时提出来了REST的6个特点:客户端-服务器的、无状态的、可缓存的、统一接口、分层系统和按需编码。其具有跨语言和跨平台的优势。
对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词有下面五个(括号里是对应的SQL命令)
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
下面是一些例子
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
通过 REST 风格体系架构,请求和响应都是基于资源表示的传输来构建的。资源是通过全局 ID 来标识的,这些 ID 一般使用的是一个统一资源标识符(URI)。客户端应用使用 HTTP 方法(如,GET、POST、PUT 或 DELETE)来操作一个或多个资源。通常,GET 是用于获取或列出一个或多个资源,POST 用于创建,PUT 用于更新或替换,而 DELETE 则用于删除资源。

例如,GET http://host/context/employees/12345 将获取 ID 为 12345 的员工的表示。这个响应表示可以是包含详细的员工信息的 XML 或 ATOM,或者是具有更好 UI 的 JSP/HTML 页面。您看到哪种表示方式取决于服务器端实现和您的客户端请求的 MIME 类型。

RESTful Web Service 是一个使用 HTTP 和 REST 原理实现的 Web Service。通常,一个 RESTful Web Service 将定义基本资源 URI、它所支持的表示/响应 MIME,以及它所支持的操作。

参考资料:
1)、使用 Spring 3 来创建 RESTful Web Services(http://www.ibm.com/developerworks/cn/web/wa-spring3webserv/)
2)、Apache CXF与Spring集成实现Soap Webservice与RESTFul WebService(http://blog.csdn.net/javacloudfei/article/details/38555803)
本人的实例:
配置pom.xml
<properties><spring.version>4.0.5.RELEASE</spring.version><jackson.version>1.9.2</jackson.version><cxf.version>3.0.3</cxf.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--spring核心包--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--JSTL标签类--><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version></dependency><!--cxf--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>${cxf.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxrs</artifactId><version>${cxf.version}</version></dependency><!--json--><dependency>  <groupId>org.codehaus.jackson</groupId>  <artifactId>jackson-core-asl</artifactId>  <version>${jackson.version}</version>  </dependency>  <dependency>  <groupId>org.codehaus.jackson</groupId>  <artifactId>jackson-mapper-asl</artifactId>  <version>${jackson.version}</version>  </dependency> <dependency>  <groupId>org.codehaus.jackson</groupId>  <artifactId>jackson-jaxrs</artifactId>  <version>${jackson.version}</version>  </dependency>  <dependency>  <groupId>org.codehaus.jackson</groupId>  <artifactId>jackson-xc</artifactId>  <version>${jackson.version}</version>  </dependency></dependencies>

配置application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"   xmlns:context="http://www.springframework.org/schema/context"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-4.0.xsd ">  <!--扫描器--><context:component-scan base-package="com.wangzhu"/></beans>

配置applicationWebService.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:jaxws="http://cxf.apache.org/jaxws"xmlns:jaxrs="http://cxf.apache.org/jaxrs"xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">  <!--<import resource="classpath:META-INF/cxf/cxf.xml"/><import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/><import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/><import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>--><jaxrs:server id="webService" address="/"><!--输入拦截器设置--><jaxrs:inInterceptors></jaxrs:inInterceptors><!--输出拦截器设置--><jaxrs:outInterceptors></jaxrs:outInterceptors><!--serviceBeans:暴露的WebService服务类--><jaxrs:serviceBeans><ref bean="studentService"/></jaxrs:serviceBeans><!--支持的协议--><jaxrs:extensionMappings><entry key="json" value="application/json"/><entry key="xml" value="application/xml"/></jaxrs:extensionMappings><!--编码格式--><jaxrs:languageMappings></jaxrs:languageMappings><!--对象转换--><jaxrs:providers><bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/></jaxrs:providers></jaxrs:server>
</beans>

备注:注意以上文件中的标记的地方!其中address可以用于指定Web Service的版本!

配置web.xml

<!--全局配置文件--><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的Servlet--><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>

实体类StudentVo .java

package com.wangzhu.vo;import java.io.Serializable;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement
public class StudentVo implements Serializable {/*** */private static final long serialVersionUID = -5481609827444603990L;private Integer id;private String name;private Integer age;private String desc;private Boolean status;public StudentVo() {}public StudentVo(Integer id, String name, Integer age, String desc,Boolean status) {this.id = id;this.name = name;this.age = age;this.desc = desc;this.status = status;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public Boolean getStatus() {return status;}public void setStatus(Boolean status) {this.status = status;}@Overridepublic String toString() {return "{id=" + id + ", name=" + name + ", age=" + age + ", desc="+ desc + ", status=" + status + "}";}}

实体类StudentListVo.java

package com.wangzhu.vo;import java.io.Serializable;
import java.util.List;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement
public class StudentListVo implements Serializable {/*** */private static final long serialVersionUID = -2200047544608641662L;private List<StudentVo> studentList;public StudentListVo() {}public StudentListVo(List<StudentVo> studentList) {this.studentList = studentList;}public List<StudentVo> getStudentList() {return studentList;}public void setStudentList(List<StudentVo> studentList) {this.studentList = studentList;}@Overridepublic String toString() {return "{studentList=" + studentList + "}";}}

数据生成器StudentDateSet.java

package com.wangzhu.dataset;import java.util.ArrayList;
import java.util.List;import org.springframework.stereotype.Component;import com.wangzhu.vo.StudentVo;@Component
public class StudentDateSet {private static List<StudentVo> list;static {StudentDateSet.list = new ArrayList<StudentVo>();for (int i = 0; i < 10; i++) {StudentVo vo = new StudentVo(i, "name" + i, Math.round(100.0f),"desc" + i, (i & 1) == 0);StudentDateSet.list.add(vo);}}public static List<StudentVo> getList() {return StudentDateSet.list;}}

Web Service的接口StudentService.java

package com.wangzhu.service;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;import com.wangzhu.vo.StudentListVo;
import com.wangzhu.vo.StudentVo;@Path("/studentService")
@Produces(MediaType.APPLICATION_JSON)
public interface StudentService {@GET@Path("/status")public String getStatus();@GET@Path("/students/{index}")public StudentVo getStudentById(@PathParam("index") Integer id);@GET@Path("/students")public StudentListVo getStudentList();
}

Web Service的实现类StudentServiceImpl.java

package com.wangzhu.service.impl;import java.util.List;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.wangzhu.dataset.StudentDateSet;
import com.wangzhu.service.StudentService;
import com.wangzhu.vo.StudentListVo;
import com.wangzhu.vo.StudentVo;@Component("studentService")
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentDateSet studentDateSet;/*** url:http://<host>:<port>/<appcontext>/services/studentService/status*/@Override@GET@Path("/status")public String getStatus() {return "getStatus";}/*** url:http://<host>:<port>/<appcontext>/services/studentService/students/{* index}*/@Override@GET@Path("/students/{index}")public StudentVo getStudentById(@PathParam("index") Integer id) {List<StudentVo> studentList = StudentDateSet.getList();StudentVo vo = null;if (studentList.size() > id) {vo = studentList.get(id - 1);}return vo;}/*** url:http://<host>:<port>/<appcontext>/services/studentService/students*/@Override@GET@Path("/students")public StudentListVo getStudentList() {List<StudentVo> studentList = StudentDateSet.getList();StudentListVo listVo = new StudentListVo(studentList);return listVo;}}

备注:注意以上有标记的studentService与applicationWebService.xml中有同名的标记。

测试:

在浏览器的地址栏中输入:

1、http://<host>:<port>/<appcontext>/services/studentService/students

2、http://<host>:<port>/<appcontext>/services/studentService/students/1

转载于:https://www.cnblogs.com/xiaoxian1369/p/4332390.html

使用CXF与Spring集成实现RESTFul WebService相关推荐

  1. Spring集成CXF发布WebService并在客户端调用

    Spring集成CXF发布WebService 1.导入jar包 因为官方下载的包里面有其他版本的sprring包,全导入会产生版本冲突,所以去掉spring的部分,然后在项目根目录下新建了一个CXF ...

  2. wsld2java_脱离spring集成cxf(基于nutz框架)

    什么是webService cxf 简单的说就是实现webService的一个比较流行的框架 http://blog.sina.com.cn/s/blog_6182547f01017pak.html ...

  3. CXF发布RestFul WebService和SOAP WebService

    CXF发布RestFul WebService和SOAP WebService Apache CXF可以发布多种协议的WebService,Spring支持整合cxf到项目中,可以简化后台构架,以下是 ...

  4. 使用Apache cxf 和Spring在Tomcat下发布Webservice指南

    转载 http://blog.csdn.net/zhangzhaokun/article/details/4750021 最近学习了如何使用apache cxf和Spring发布webservice, ...

  5. springboot 集成jpa_基于Spring Boot+JPA Restful 风格的数据

    第一章 Restful简介 Restful是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服 务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次, ...

  6. CXF发布restful WebService的入门例子(服务器端)

    研究了两天CXF对restful的支持.    现在,想实现一个以  http://localhost:9999/roomservice 为入口,  http://localhost:9999/roo ...

  7. CXF整合Spring开发WebService

    刚开始学webservice时就听说了cxf,一直没有尝试过,这两天试了一下,还不错,总结如下: 要使用cxf当然是要先去apache下载cxf,下载完成之后,先要配置环境变量,有以下三步: 1.打开 ...

  8. Spring boot集成axis2开发webservice 服务

    Spring boot集成axis2开发webservice 服务 1.新建Spring boot 项目 此处省略... 项目结构如下: 2.添加Axis2依赖 <!--axis2版本信息--& ...

  9. CXF:是一个开源Service框架支持多种协议:SOAP、XML/HTTP、RestfulHTTP和CORBA,同时可以和Spring集成。

    CXF:是一个开源Service框架 支持多种协议:SOAP.XML/HTTP.RestfulHTTP和CORBA,同时可以和Spring集成.

最新文章

  1. 可怕!Facebook竟能识别出性工作者!你怎么看?
  2. oracle 安装grid补丁,安装oracle 11.2.0.4.4的psu补丁过程
  3. 锐界机器人_看着就很酸爽,2.7T V6双涡轮,车则试驾新福特锐界ST
  4. android studio安装中出现Failed to install Intel HAXM错误的解决方法
  5. ASP.NET MVC 上传大文件时404
  6. 在ASP.NET MVC中实现Select多选
  7. python-matplotlib学习(1)
  8. 红外接收头图片_常见红外接收头引脚型号及测量代换
  9. portlet_Portlet Servlet JSP
  10. 2021年58个最佳个人WordPress博客主题
  11. iOS逆向-day1:逆向内容的简介与越狱环境搭建
  12. 扣费克星-您的话费守护神 v1.42 新增联网程序管理扩展插件发布
  13. 应用计算机测量伏安特性实验报告,传感器原理与应用实验报告(共10篇).doc
  14. Ubuntu20.04、22.04安装nvidia显卡驱动——超详细、最简单
  15. 【Docker系列】 Docker secrets
  16. python基础知识学习_python学习(一) 基础知识
  17. column ‘_id‘ does not exis报错
  18. Twitter赢在开放,三年创造奇迹
  19. 读代码比写代码难,真的?
  20. 怎么用java实现直角三角形,java技术支持 输出一个直角三角形(下三角)

热门文章

  1. Adaboost算法原理分析和实例+代码(简明易懂)
  2. TNN MatConvertParam参数scale和bias设置
  3. HDFS写入和读取过程
  4. Java中的Runtime类详解
  5. SDNU 1048.石子合并2(区间dp)
  6. HihoCoder - 1175 拓扑排序·二
  7. android开发 RecyclerView 瀑布列表布局
  8. [.net]webform 版本冲突
  9. 【锋利的Jquery】读书笔记五
  10. Surf特征提取分析