0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

Web Service Apache CXF介绍和一个简单的使用例子

1、CXF介绍

CXF 框架是一种基于 Servlet 技术的 SOA 应用开发框架,要正常运行基于 CXF 应用框架开发的企业应用,除了 CXF 框架本身之外,还需要 JDK 和 Servlet 容器的支持。

Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

JAX-RS: Java API for RESTful Web Services is a Java programming language API that provides support in creating web services according to the Representational State Transfer (REST) architectural style.

CXF supports JAX-RS (JSR-311), the Java API for RESTful Web Services. JAX-RS standardizes the way RESTful services can be developed in Java.

2、下载CXF:

可以从官网上进行下载:

http://cxf.apache.org/download.html

3、下面是一个JAX-RS实现的简单例子:

3.1、首先在Eclipse中创建一个Web项目。

把需要的Jar包引入到Web项目中,所有的JAR包都位于CXF解压文件的lib文件目录下。

3.2、添加部署描述符:

在web.xml文件中添加如下配置信息:

CXFServlet org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet jaxrs.serviceClasses com.itzhai.book.BookService jaxrs.providers 1 CXFServlet /bookService/*

这个配置其实就是配置一个Servlet,这个Servlet是CXF的核心处理类,负责处理所有的请求。当请求的URL和servlet-mapping中的url-pattern中的url匹配时,则找到服务器中对应的Service进行处理。

这里配置了拦截以/bookService/开头的链接进行使用Service服务。

关于CXF在项目中的部署详细可以参考这篇文章:https://cwiki.apache.org/confluence/display/CXF20DOC/Servlet+Transport

3.3、接下来是编写服务器端的Service:

这里使用到了一个实体类Book:

public class Book {

private String bookName;
private String bookPrice;
private String author;

public String getBookName() {
    return bookName;
}
public void setBookName(String bookName) {
    this.bookName = bookName;
}
public String getBookPrice() {
    return bookPrice;
}
public void setBookPrice(String bookPrice) {
    this.bookPrice = bookPrice;
}
public String getAuthor() {
    return author;
}
public void setAuthor(String author) {
    this.author = author;
}

}

接下来是Service服务的编写:

@Path("/bookService")
public class BookService {

// private static Logger logger = LoggerFactory
// .getLogger(QuestionnaireService.class);

@POST
@Path("/getBookById/{id}")
@Produces("application/json")
public String getBookById(@PathParam("id") String id) {
    return "Core Java!";
}

@GET
@Path("/{qnid}/{name}")
@Produces("application/json")
public void addBook(
        @PathParam("qnid") String qnid, @PathParam("name") String name) {
}

}

这里以注解的形式把服务注册到Tomcat容器中,各注解的基本解释如下:

**@Path:**访问该Service的Service名
**@POST @GET:**访问该Service的某个方法时使用的HTTP请求方式
**@Produces:**访问Service中某个具体方法时需要提供的路径
**@PathParam:**从URL中传递过来的参数信息

如上面的Service如果需要访问getBookById方法则需要提供如下格式的链接:

bookService/getBookById/123

3.4、接下来就是在页面中获取请求了,我们可以使用Ajax请求,这里就使用YUI的Ajax请求作为例子:

获取您需要的图书
请输入图书编号:

关于YUI的使用可以参考这篇文章:YUI介绍以及快速入门 Yahoo的JS框架

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法