开发RESTful WebService
来源:互联网 发布:8年四钻淘宝店值多少钱 编辑:程序博客网 时间:2024/06/15 18:25
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.xsd http://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>
客户端
所需jar包
因为RESTful就是利用最原始的http协议传输数据,所以客户端其实就是一个http客户端,有以下几种实现方式
JAX-RS Client API--cxf3.0+
Proxy【使用起来简单,代理封装通信细节】
Apache HttpClient
WebClient
为了简单我使用了Proxy方式
代码如下
public class MyClient {/** @MethodName: main * @Description: JaxRs测试客户端 * @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
- 通过WCF开发RESTful webService
- 开发restful风格的webservice
- 使用cxf开发RESTful WebService
- RestFul(一)WebService之CXF的RestFul风格开发
- 使用Jersey开发RESTful的webservice服务
- 使用CXF开发RestFul WebService问题解决方案
- 使用CXF开发RestFul风格WebService
- Spring+CXF开发RESTful风格的WebService
- 开发基于CXF的 RESTful WebService web 项目 webservice发布
- 开发基于CXF的 RESTful WebService web 项目 webservice发布
- RESTful webservice
- ReSTful WebService
- RESTful Webservice
- 使用Apache cxf 开发restful webservice 服务的实例
- Android客户端访问使用Jersey开发RESTful的webservice服务器
- 应用CXF开发RESTful风格的WebService入门实例
- 浅谈restful webservice SOAP webservice
- vistual studio 2012 安装失败,提示Microsoft Vistual Studio 2012 Devenv找不到元素,等错误信息
- TOJ 3774. Calculation (栈操作计算表达式)
- ACM 矩阵乘法 SPOJ AMR10E Stocks Prediction
- 《STl源码剖析》疑问?
- 关于C++中野指针的说明
- 开发RESTful WebService
- 通过函数给指针赋值(一)
- Linux基础及常用命令(笔试面试必备)
- 二叉树的遍历
- win7 下硬盘安装 Centos6.3(6.5)
- PHP中include()与require()的区别说明
- POJ 1183 反正切函数的应用
- Esper事件处理引擎_1_JavaBean 数据结构处理
- 笔记本电池修复常见方法大全