`

CXF3.0.2+Spring3.2.14 WebService入门实例五(上)

 
阅读更多

各位阿猿们,在学习之前我们先大声地唱一首歌吧,《桃花庵--程序员版》,预备,走:写字楼里写字间,写字间中程序员;程序人员写程序,又将程序换酒钱;酒醒只在屏前坐,酒醉还来屏下眠;酒醉酒醒日复日,屏前屏后年复年;但愿老死电脑间,不愿鞠躬老板前;奔驰宝马贵者趣,公交自行程序员;别人笑我太疯癫,我笑自己命太贱;但见满街漂亮妹,哪个归得程序员。

这一节比较失败,我打算分成上、下集来写,上半部分直接学习达拉斯母牛的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入门实例四

    【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简单的webservice+Cxf+Spring数据对接实例以及jar.rar...

    cxf+spring实现webservice

    以上是CXF+Spring实现Web Service的基本流程和关键知识点。实际应用中,还需要根据具体的需求和环境进行适当的调整和扩展。例如,如果涉及到大型分布式系统,可能还需要考虑服务治理、负载均衡等问题。通过熟练掌握...

    CXF2+Spring2.5开发WebService实例

    在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...

    CXF3.0.9+SPRING开发webservice例子

    当我们谈论"CXF3.0.9+SPRING开发webservice例子"时,这意味着我们将探讨如何结合这两个强大的工具来创建和消费Web服务。 首先,让我们深入了解CXF。Apache CXF是基于Java的,它支持多种Web服务标准,如SOAP、...

    cxf+spring的webservice实例

    总的来说,"cxf+spring的webservice实例"是一个实践性的教程,旨在帮助开发者理解如何在Spring环境中利用CXF快速构建和部署Web服务。通过这个实例,你可以掌握从创建服务到发布、测试的整个流程,进一步提升你的Java...

    Apache CXF2+Spring2.5轻松实现WebService

    本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 首先,让我们理解这两个组件的基本概念。Apache CXF是一个全面的服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。它提供了...

    CXF2.1.3+spring3.0+struts2.3.4

    【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。CXF不仅可以用作服务提供者,还可以作为客户端来消费其他服务,这在Spring的管理下变得更加...

    CXF+Spring+自定义拦截器 WebService实例源码下载

    这里少了一个类,是根据实体类生成xml的文件下载地址为:http://download.csdn.net/detail/qq_14996421/9495688

    cxf+spring开发webservice实例(java)

    web项目使用spring和cxf的一个开发实例,有简单的代码样例和jar。是一个完整的项目,最终发布完成时访问 http://ip:port/项目名称/webservices/ 就会发现你发布的webservice服务。

    CXF3.0+Spring3.2 WSSecurity

    描述中提到的"利用CXF3.0.2+Spring3.2.14发布WSSecurity"意味着该压缩包可能包含了一个演示或者教程,展示了如何配置和使用这两个版本的软件来启用Web服务的安全特性。"需要源代码可以下载"则暗示这个压缩包里可能...

    CXF+Spring+Tomcat发布WebService

    【标题】"CXF+Spring+Tomcat发布WebService"涉及的是使用Apache CXF框架与Spring框架结合,在Tomcat服务器上部署和消费Web服务的过程。这是一个常见的企业级应用开发场景,特别是对于实现基于SOAP协议的Web服务。...

    Spring + cxf = webservice 完整实例源码免费下载

    Spring + cxf = webservice 完整实例源码免费下载 完全免费。此资源仅为文档提供。 版权为百度文档 "Spring + cxf = webservice 完整实例源码免费下载" 所有。

    cxf+spring开发webservice客户端与服务端实例

    本实例将详细阐述如何利用CXF和Spring来构建Web服务的客户端和服务端。 一、CXF简介 CXF是一个开源的Java框架,专门用于构建和消费Web服务。它支持SOAP、RESTful等多种服务模型,并且可以方便地与Spring框架集成,...

    cxf+spring发布webservice和restservice

    本项目“cxf+spring发布webservice和restservice”专注于利用Apache CXF框架与Spring框架结合,实现这两种服务的发布。Apache CXF是一个开源的、功能丰富的服务栈,它使得开发者能够轻松地构建和部署SOAP和RESTful ...

    使用Eclipse+Maven+Spring+CXF构建的WebService服务

    Web项目中基于Maven与Spring整合的WebService之cxf的实现⬇️ 详情请参考如下链接: https://locqi.github.io/locqi.com/2018/09/05/Eclipse+Maven+Spring+CXF-create-WebService/

    CXF2.7+Spring3 Java WebService 集成用例

    - **依赖注入(DI)**:Spring的DI允许CXF组件轻松地接收来自Spring容器的依赖,无需硬编码实例化。 - **配置简化**:通过Spring配置文件,可以集中管理Web服务的生命周期和配置。 - **测试友好**:Spring的单元...

    CXF3.0+Spring3.2 HelloWorld实例

    在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...

    cxf+spring=webservice CXF 应用开发

    综上所述,"cxf+spring=webservice CXF 应用开发"的主题涵盖了从基础的Web服务概念,到CXF和Spring的集成,再到实际的应用开发、测试和部署等多个方面。通过深入学习这些知识点,开发者可以高效地构建和管理高质量的...

    xfire+spring+webservice入门例子

    【xfire+Spring+WebService 入门实例详解】 在IT行业中,Web服务是一个重要的通信方式,它允许不同系统间的应用程序进行数据交换。本入门实例将深入探讨如何使用XFire框架与Spring集成来构建和消费Web服务。XFire是...

Global site tag (gtag.js) - Google Analytics