RESTful风格的webservice越来越流行了,sun也推出了RESTful WebService的官方规范:JAX-RS。全称:Java API for RESTful WebService。该规范定义了一系列的注解

RESTful简化了web service的设计。它不再须要wsdl。也不再须要soap协议,而是通过最简单的http协议数据传输(包含xml或json)。既简化了设计,也降低了网络传输量(由于仅仅传输代表数据的xml或json,没有额外的xml包装)

以下为大家介绍使用cxf开发RESTful WebService

Cxf2.7实现了大部分的jax-rs规范。从cxf3.0開始实现jax-rs的全套规范

服务端

Spring3+cxf开发RESTfulweb service

服务端jar包

上面的jettison jar包是用来将jaxb扩展为为json支持的jar

实体类

package com.tgb.cxf.server;import javax.xml.bind.annotation.XmlRootElement;//一定要使用XmlRootElement注解进行标注
@XmlRootElement(name="user")
public class User {private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

WebService接口

@Path("/userservice/")
public interface IMyService {@Path("/addUser/")@POSTResponse addUser(User user);@Path("/delUser/{id}/")@DELETEResponse delUser(@PathParam("id") String id);@Path("/updateUser/")@PUTResponse updateUser(User user);@Path("/getUserById/{id}/")@GET@Produces("application/json")//返回json数据格式User getUserById(@PathParam("id") String id);@Path("/")@GET@Produces("application/json")//返回json数据格式List<User> findAllUsers();
}

WebService实现类

public class MyServiceImpl implements IMyService {private HashMap<String, User> users = new HashMap<String,User>();public MyServiceImpl(){init();}public Response addUser(User user) {users.put(user.getId(), user);System.out.println("加入用户成功");System.out.println(users.size());System.out.println(users.get("2").getName());return Response.ok().build();}public Response delUser(String id) {users.remove(id);System.out.println(users.size());return Response.ok().build();}public Response updateUser(User user) {users.put(user.getId(), user);System.out.println(users.get("1").getName());return Response.ok().build();}public User getUserById(String id) {return users.get(id);}private void init(){User user = new User();user.setId("1");user.setName("温欢");users.put(user.getId(), user);}public List<User> findAllUsers() {List<User> userlist = new ArrayList<User>();userlist.add(users.get("1"));return userlist;}}

spring-cxf.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-2.0.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"><!-- 注意这里的jaxrs命名空间须要大家手动加入 --><!-- 公布webservice --><bean id="serviceBean" class="com.tgb.cxf.server.MyServiceImpl"/><jaxrs:server id="userService"  address="/myservice"><jaxrs:serviceBeans><ref bean="serviceBean"/></jaxrs:serviceBeans></jaxrs:server></beans>

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_3_0.xsd" id="WebApp_ID" version="3.0"><!-- 配置spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/spring-cxf.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置cxf servlet --><servlet><servlet-name>cxf</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>cxf</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping></web-app>

client

所需jar包

由于RESTful就是利用最原始的http协议数据传输。所以client事实上就是一个httpclient。有下面几种实现方式

JAX-RS Client API--cxf3.0+

Proxy【使用起来简单。代理封装通信细节】

Apache HttpClient

WebClient

为了简单我使用了Proxy方式

代码例如以下

  public class MyClient {/** @MethodName : main* @Description   : JaxRs測试client* @param args*/public static void main(String[] args) {IMyService myService = JAXRSClientFactory.create("http://localhost:8096/cxf02/services/myservice",IMyService.class);User user = myService.getUserById("1");System.out.println(user.getName());User user = new User();user.setId("2");user.setName("委座");myService.addUser(user);/*User user = new User();user.setId("1");user.setName("123");myService.updateUser(user);*/myService.delUser("1");System.out.println(myService.findAllUsers().get(0).getName());}}

大家能够使用TCPMON这个工具监控下面。能够看到http body中仅仅是简单的json串,没有像soap协议那样的“信封”包装

使用RESTful设计风格+传输json数据格式 能够大大的简化web service的设计 并提高传输效率

事实上springMVC也採用了RESTful的设计风格。只是它使用的是spring自己的注解,这些注解和jax-rs中的注解惊奇的类似。假设大家有兴趣能够研究一下springMVC的RESTful特性。

开发RESTful WebService相关推荐

  1. 推荐一个Talend ESB的学习资源,适合入门初学了解和学习Talend ESB开发Restful WebService的方法

    采用渐进式的讲解方式,由浅入深,对刚开始接触Talend ESB,希望深入学习的朋友很有帮助,一共十节视频,5-10分钟一节,简单扼要,强烈推荐. 视频内容介绍链接地址:https://www.tou ...

  2. 用cxf开发restful风格的WebService

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

  3. 使用Jersey来创建RESTful WebService

    RESTful Web Service是轻量级的service,可以通过HTTP的方式来实现对后台数据库的CRUD, 在Web开发和移动开发时使用的比较广泛,非常方便. 在Java世界里, JAX-R ...

  4. CXF发布RestFul WebService和SOAP WebService

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

  5. spring boot 开发soap webservice

    介绍 spring boot web模块提供了RestController实现restful,第一次看到这个名字的时候以为还有SoapController,很可惜没有,对于soap webservic ...

  6. WCF实现RESTFul Web Service(三):RESTful WebService VS SOAP WebService

    SOAP SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等).但是随着SOAP作为WebService的广泛应用, ...

  7. c#调用java开发的webservice_用C#.NET调用Java开发的WebService传递int,double问题

    用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...

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

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

  9. java调用net_Java调用C#.net开发的WebService

    1.开发C#.net的WebService服务 1.1点击"开始"->"程序"-> "Microsoft Visual Studio 20 ...

最新文章

  1. [TypeScript][文档]变量
  2. 袁隆平院士在湖南农业大学新生典礼上的致辞
  3. 海量数据处理:两个大文件中的相同记录
  4. java aio为什么不稳定_为什么我不提倡在Java中使用static
  5. 函数包装器,函数私有类处理
  6. java aac rtp封装_分享一段H264视频和AAC音频的RTP封包代码
  7. 前后端分离项目如何部署_前后端分离项目,如何解决跨域问题?
  8. 为什么一个字节定义成8位?
  9. 这个开源组织里的项目都是精品
  10. MEncoder的基础用法—6.8. 从多个输入图像文件进行编码(JPEG, PNG, TGA等)
  11. 汉语中的通用量词:个,块
  12. 【iOS-iap防护】验证用户付费收据!拒绝iap Cracker!!
  13. C语言-基础例题55道
  14. 中国移动MM如何助力网络视频反盗版
  15. 中国人民大学与加拿大女王大学金融硕士——在这里,打开精彩“识界”
  16. 2020年 初赛真题
  17. web手动进行Form表单提交
  18. 树莓派串口通信python,【树莓派Pico测评】- AD采集示例及串口通信
  19. Android App Initializer 实现方案
  20. HTML网页开发手册

热门文章

  1. Directed Roads CodeForces - 711D (基环外向树 )
  2. Django的自带认证系统——auth模块
  3. IOS - IPhone或IPAD,如何恢复出厂操作系统?
  4. Mysqli面向对象操作数据库
  5. shell之九九乘法表
  6. hibernate 数据处理
  7. 表变量与临时表的优缺点
  8. linux进程控制命令
  9. searchindexer.exe占cpu使用率高
  10. php xml 格式化,php简单处理XML数据的方法示例