各位阿猿们,在学习之前我们先大声地唱一首歌吧,《桃花庵--程序员版》,预备,走:写字楼里写字间,写字间中程序员;程序人员写程序,又将程序换酒钱;酒醒只在屏前坐,酒醉还来屏下眠;酒醉酒醒日复日,屏前屏后年复年;但愿老死电脑间,不愿鞠躬老板前;奔驰宝马贵者趣,公交自行程序员;别人笑我太疯癫,我笑自己命太贱;但见满街漂亮妹,哪个归得程序员。
这一节比较失败,我打算分成上、下集来写,上半部分直接学习达拉斯母牛的CXF实战之RESTFul服务(七),
博客地址:http://blog.csdn.net/accountwcx/article/details/47183429
由于时间有限,这一部分大体写一下,我把工程上传了,有不明白的地方可以下来看一下,然后自己再百度一下;下半部分另写的一个实例;
在学习之前,先学习一下什么是Rest,没说的,找度娘!好家伙,本来就不明白,看完这些介绍更糊涂了!英文的,中文的,怎么晦涩怎么来,不明觉厉!好流弊!好吧,请允许我说三个字,真是中国砖家啊!唉,经常加班熬夜的阿猿(媛)们有三个弊端:第一,记忆力越来越差;第二,数数经常会数错;第四,记忆力越来越差。
请原谅我这个最低层的阿猿吧,找一个最容易理解的,
REST即表述性状态传递(英文:Representational State Transfer,简称REST),是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful 。
REST本质上是使用URL来操作资源的一种方式。任何事物都是资源,每个资源都有唯一的资源标识,通过URL来操作资源,而不会改变资源标识符,所有的操作都是无状态的!对资源的操作无非是增、删、改、查四种操作,其实只要是软件开发都是这四种操作!
优点:降低开发的复杂度
提高系统的伸缩性
剩下的自己补充
缺点:安全性没有保证
首先还是要介绍一下开发工具和开发环境,jdk1.6.0_43+Tomcat6.0.29+MyEclipse10.5,没有使用Maven进行管理!
一、新建web工程,选择Java EE5.0
二、新建文件传输类Book.java
package com.pojo;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 类名: Book.java
* 作者: 张述飞
* 创建时间: 2016-1-13下午19:35:44
* 版本: V1.0
* 功能描述: 书籍实体类
*/
@XmlRootElement(name ="Book")
publicclass Book {
//id
private Stringid;
//书名
private StringbookName;
//作者
private Stringauthor;
//价格
private Doubleprice;
public String getId() {
returnid;
}
publicvoid setId(String id) {
this.id = id;
}
public String getBookName() {
returnbookName;
}
publicvoid setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
returnauthor;
}
publicvoid setAuthor(String author) {
this.author = author;
}
public Double getPrice() {
returnprice;
}
publicvoid setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return"Book[author=" +author +", id=" +id +",bookName=" +bookName +"]";
}
}
三、新建类LibrarySerive.java
package com.util;
importjava.util.HashMap;
importjava.util.Map;
importjavax.ws.rs.DELETE;
importjavax.ws.rs.GET;
importjavax.ws.rs.POST;
importjavax.ws.rs.PUT;
importjavax.ws.rs.Path;
import javax.ws.rs.PathParam;
importjavax.ws.rs.Produces;
importjavax.ws.rs.core.MediaType;
importjavax.ws.rs.core.Response;
importcom.pojo.Book;
/**
*
* 类名:LibrarySerive.java
* 作者: 张述飞
* 创建时间: 2016-1-14下午4:52:41
* 版本: V1.0
* 功能描述:图书馆服务
*/
@Path("/library")
@Produces("application/xml")
public classLibrarySerive {
private Map<String, Book> books =new HashMap<String, Book>();
public LibrarySerive() {
init();
}
/**
* 获取
*@param <Books>
*@param id 索引
*@return 书
*/
@GET
@Path("/books/")
public Map<String, Book> getBooks(){
System.out.println("得到所有书籍方法开始!!");
return books;
}
/**
* 获取
*@param id 索引
*@return 书
*/
@GET
@Path("/books/{id}/")
public BookgetBook(@PathParam("id") String id) {
System.out.println("查询方法开始!!");
return books.get(id);
}
/**
* 更新
*@param book
*@return
*/
@PUT
@Path("/books/")
public Response updateBook(Book book) {
System.out.println("更新方法开始!!");
Response r;
if (book == null) {
r =Response.noContent().build();
return r;
}
String id = book.getId();
Book b = books.get(id);
if (b != null) {
books.put(id, book);
r =Response.ok(true,MediaType.TEXT_PLAIN).build();
} else {
r =Response.notModified().build();
}
return r;
}
/**
* 添加
*@param book
*@return
*/
@POST
@Path("/books/")
public Response addBook(Book book) {
System.out.println("添加方法开始!!");
Response r;
if (book == null) {
r =Response.noContent().build();
return r;
} else {
books.put(book.getId(),book);
r = Response.ok(true,MediaType.TEXT_PLAIN).build();
}
return r;
}
/**
* 删除
*@param book
*@return
*/
@DELETE
@Path("/books/{id}/")
public ResponsedeleteBook(@PathParam("id") String id) {
System.out.println("删除方法开始!!");
Response r;
Book book = books.get(id);
if (book == null) {
r =Response.notModified("id 不存在!").build();
} else {
books.remove(id);
r =Response.ok(book,MediaType.APPLICATION_XML).build();
}
return r;
}
/**
* 初始化,在图书馆里添加图书
*/
public void init() {
Book book = null;
book = new Book();
book.setAuthor("CSDN");
book.setId("blog");
book.setBookName("如何使用博客");
book.setPrice(3.0);
books.put(book.getId(), book);
book = new Book();
book.setAuthor("MCXF");
book.setId("cxf");
book.setBookName("CXFWebService开发");
book.setPrice(26.0);
books.put(book.getId(), book);
book = new Book();
book.setAuthor("张述飞");
book.setId("web");
book.setBookName("Web开发实战");
book.setPrice(12.0);
books.put(book.getId(), book);
}
}
四、新建接口实现类Server.java
package com.util;
importorg.apache.cxf.jaxrs.JAXRSServerFactoryBean;
importorg.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
/**
* 发布服务
* 类名:Server.java
* 作者: 张述飞
* 创建时间: 2016-1-21下午1:56:57
* 版本: V1.0
* 功能描述:
*/
public classServer {
public static void main(String[] args)throws Exception {
JAXRSServerFactoryBean sf = newJAXRSServerFactoryBean();
sf.setResourceClasses(LibrarySerive.class);
sf.setResourceProvider(LibrarySerive.class,new SingletonResourceProvider(new LibrarySerive()));
sf.setAddress("http://localhost:8080/WbRest/");
sf.create();
}
}
五、新建客户端Client
package com.test;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.HashMap;
importjava.util.Map.Entry;
importjava.util.Set;
importcom.pojo.Book;
import com.util.LibrarySerive;
/**
* 感觉这个类调用的好像不是webservice,^_^
* 类名:Client.java
* 作者: 张述飞
* 创建时间: 2016-1-21下午1:51:52
* 版本: V1.0
* 功能描述:
*/
public classClient {
public static void main(String[] args)throws Exception {
URLConnection conn = newURL("http://localhost:8080/WbRest/library/books/blog/").openConnection();
HttpURLConnection con =(HttpURLConnection) conn;
con.setRequestMethod("GET");
int code = con.getResponseCode();
System.out.println(code);
InputStream is = con.getInputStream();
int len = 0;
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
while((len = is.read(b)) != -1){
String s = newString(b,0,len,"UTF-8");
sb.append(s);
}
System.out.println(sb.toString());
con.disconnect();
LibrarySerive library = newLibrarySerive();
/**
Book book =library.getBook("blog");
System.out.println("book::"+book.getBookName());
*/
Book book = new Book();
book.setId("test");
book.setAuthor("蒋百里");
book.setBookName("国防论");
book.setPrice(16.00);
library.addBook(book);
HashMap<String, Book> hmap =(HashMap<String, Book>) library.getBooks();
Set<Entry<String,Book>> set = hmap.entrySet();
for (Entry<String, Book>book1 : set) {
System.out.println(book1.getValue());
Book b1 = book1.getValue();
System.out.println(b1.getBookName());
}
/**
Book book1 =library.getBook("test");
System.out.println("book1::"+book1.getBookName());*/
}
}
=====================================================================
这里注意先要运行Server.java, 再运行Client.java,在客户端会显示:
200
<?xmlversion="1.0" encoding="UTF-8"standalone="yes"?><Book><author>CSDN</author><bookName>如何使用博客</bookName><id>blog</id><price>3.0</price></Book>
添加方法开始!!
得到所有书籍方法开始!!
Book [author=MCXF, id=cxf,bookName=CXF WebService开发]
CXF WebService开发
Book [author=蒋百里, id=test,bookName=国防论]
国防论
Book [author=张述飞, id=web,bookName=Web开发实战]
Web开发实战
Book [author=CSDN, id=blog,bookName=如何使用博客]
如何使用博客
在服务器端会显示
查询方法开始!!
六、这里写一个异常
警告:
java.lang.NoClassDefFoundError:javax/servlet/AsyncContext
atorg.eclipse.jetty.server.AbstractHttpConnection.<init>(AbstractHttpConnection.java:162)
...... ... ... ...
...12 more
2016-1-21 14:20:07org.eclipse.jetty.io.nio.SelectorManager$SelectSet doSelect
这个异常需要导入javax.servlet-3.0.jar,这个是在servlet3.0以后才有的方法
七、使用Spring, applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd
http://cxf.apache.org/transports/http/configurationhttp://cxf.apache.org/schemas/configuration/http-conf.xsd
http://cxf.apache.org/jaxrshttp://cxf.apache.org/schemas/jaxrs.xsd">
<importresource="classpath:META-INF/cxf/cxf.xml"/>
<importresource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<beanid="libraryServiceBean"class="com.util.LibrarySerive"></bean>
<jaxrs:serverid="libraryServer"address="/">
<jaxrs:serviceBeans>
<ref bean="libraryServiceBean"/>
</jaxrs:serviceBeans>
</jaxrs:server>
</beans>
八、web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--Spring刷新Introspector防止内在泄露-->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
九、需导入的jar包
aopalliance-1.0.jar
asm-3.3.1.jar
commons-logging-1.1.3.jar
cxf-core-3.0.7.jar
cxf-manifest.jar
cxf-rt-bindings-soap-3.0.7.jar
cxf-rt-databinding-jaxb-3.0.7.jar
cxf-rt-frontend-jaxrs-3.0.7.jar
cxf-rt-frontend-jaxws-3.0.7.jar
cxf-rt-frontend-simple-3.0.7.jar
cxf-rt-transports-http-3.0.7.jar
cxf-rt-transports-http-jetty-3.0.7.jar
cxf-rt-ws-addr-3.0.7.jar
cxf-rt-ws-policy-3.0.7.jar
cxf-rt-wsdl-3.0.7.jar
geronimo-javamail_1.4_spec-1.7.1.jar
geronimo-jaxws_2.2_spec-1.2.jar
javax.servlet-3.0.jar
javax.ws.rs-api-2.0.1.jar
jaxb-api-2.2.11.jar
jaxb-core-2.2.11.jar
jaxb-impl-2.2.11.jar
jetty-continuation-8.1.15.v20140411.jar
jetty-http-8.1.15.v20140411.jar
jetty-io-8.1.15.v20140411.jar
jetty-security-8.1.15.v20140411.jar
jetty-server-8.1.15.v20140411.jar
jetty-util-8.1.15.v20140411.jar
neethi-3.0.3.jar
slf4j-api-1.7.9.jar
slf4j-jdk14-1.7.9.jar
spring-aop-3.2.14.RELEASE.jar
spring-beans-3.2.14.RELEASE.jar
spring-context-3.2.14.RELEASE.jar
spring-core-3.2.14.RELEASE.jar
spring-expression-3.2.14.RELEASE.jar
spring-web-3.2.14.RELEASE.jar
stax2-api-3.1.4.jar
woodstox-core-asl-4.4.1.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.2.1.jar
十、新建ClientWithSpring测试类
package com.test;
import org.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
import com.util.LibrarySerive;
publicclass ClientWithSpring {
publicstaticvoid main(String[] args) {
System.out.println("aaaaa");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
LibrarySerive ls = context.getBean("libraryServiceBean",LibrarySerive.class);
System.out.println(ls.getBook("web").getBookName());
}
}
启动Tomcat服务器,再运行ClientWithSpring,在客户端会显示: aaaaa
……………
2016-1-21 14:30:28org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be /
查询方法开始!!
Web开发实战
在IE浏览器中输入http://localhost:8080/WbRest/library/books/web/
会显示
<?xml version="1.0" encoding="UTF-8"standalone="yes" ?>
- <Book>
<author>张述飞</author>
<bookName>Web开发实战</bookName>
<id>web</id>
<price>12.0</price>
</Book>
十一、 运行完这个以后,手贱又随手运行了一个以前做一个s2sm的实例,这是意外出现了,好好的项目竟然不能运行了,在IE浏览器中显示
HTTP ERROR 404
Problem accessioin/tksm. Reason
Not Found
Power by Jetty ://
What?
于是,找度娘,天啊,基本上全是英文的,又是设置这,又是改那,不行!我没用Jetty服务器啊。差点把MyEclipse 10, Tomcat卸了重新安装一遍,最后想是不是虚拟目录下的某个工程引起的啊,把tomcat文件夹下的work文件夹清理了一下,奇迹居然行了!
代码下载地址:http://download.csdn.net/detail/zhangshufei8001/9413177
相关推荐
【CXF3.0.2+Spring3.2.14 WebService入门实例四】的知识点解析 在本文中,我们将深入探讨如何使用Apache CXF 3.0.2版本和Spring 3.2.14框架来创建一个基于WebService的文件传输应用。Apache CXF是一个流行的开源...
简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...
以上是CXF+Spring实现Web Service的基本流程和关键知识点。实际应用中,还需要根据具体的需求和环境进行适当的调整和扩展。例如,如果涉及到大型分布式系统,可能还需要考虑服务治理、负载均衡等问题。通过熟练掌握...
在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...
当我们谈论"CXF3.0.9+SPRING开发webservice例子"时,这意味着我们将探讨如何结合这两个强大的工具来创建和消费Web服务。 首先,让我们深入了解CXF。Apache CXF是基于Java的,它支持多种Web服务标准,如SOAP、...
总的来说,"cxf+spring的webservice实例"是一个实践性的教程,旨在帮助开发者理解如何在Spring环境中利用CXF快速构建和部署Web服务。通过这个实例,你可以掌握从创建服务到发布、测试的整个流程,进一步提升你的Java...
本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 首先,让我们理解这两个组件的基本概念。Apache CXF是一个全面的服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。它提供了...
【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。CXF不仅可以用作服务提供者,还可以作为客户端来消费其他服务,这在Spring的管理下变得更加...
这里少了一个类,是根据实体类生成xml的文件下载地址为:http://download.csdn.net/detail/qq_14996421/9495688
web项目使用spring和cxf的一个开发实例,有简单的代码样例和jar。是一个完整的项目,最终发布完成时访问 http://ip:port/项目名称/webservices/ 就会发现你发布的webservice服务。
描述中提到的"利用CXF3.0.2+Spring3.2.14发布WSSecurity"意味着该压缩包可能包含了一个演示或者教程,展示了如何配置和使用这两个版本的软件来启用Web服务的安全特性。"需要源代码可以下载"则暗示这个压缩包里可能...
【标题】"CXF+Spring+Tomcat发布WebService"涉及的是使用Apache CXF框架与Spring框架结合,在Tomcat服务器上部署和消费Web服务的过程。这是一个常见的企业级应用开发场景,特别是对于实现基于SOAP协议的Web服务。...
Spring + cxf = webservice 完整实例源码免费下载 完全免费。此资源仅为文档提供。 版权为百度文档 "Spring + cxf = webservice 完整实例源码免费下载" 所有。
本实例将详细阐述如何利用CXF和Spring来构建Web服务的客户端和服务端。 一、CXF简介 CXF是一个开源的Java框架,专门用于构建和消费Web服务。它支持SOAP、RESTful等多种服务模型,并且可以方便地与Spring框架集成,...
本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...
Web项目中基于Maven与Spring整合的WebService之cxf的实现⬇️ 详情请参考如下链接: https://locqi.github.io/locqi.com/2018/09/05/Eclipse+Maven+Spring+CXF-create-WebService/
- **依赖注入(DI)**:Spring的DI允许CXF组件轻松地接收来自Spring容器的依赖,无需硬编码实例化。 - **配置简化**:通过Spring配置文件,可以集中管理Web服务的生命周期和配置。 - **测试友好**:Spring的单元...
在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...
综上所述,"cxf+spring=webservice CXF 应用开发"的主题涵盖了从基础的Web服务概念,到CXF和Spring的集成,再到实际的应用开发、测试和部署等多个方面。通过深入学习这些知识点,开发者可以高效地构建和管理高质量的...
【xfire+Spring+WebService 入门实例详解】 在IT行业中,Web服务是一个重要的通信方式,它允许不同系统间的应用程序进行数据交换。本入门实例将深入探讨如何使用XFire框架与Spring集成来构建和消费Web服务。XFire是...