webservice通信 服务端 客户端简单实现

schema规范中:

1.所有标签和属性都需要有schema文件来定义。

2.所有schema文件都需要有一个唯一标识id,单在xml文件中它叫namespace。

3.namespace的值由targetNamespace属性来指定,它的值是一个url(很可能不存在)。

4.如何引入一个schema约束?

1).属性?:用xmlns属性。

2).属性值?:对应schema文件的id即(namespace值)。

5.如果引入的schema约束不是w3c提供的,必须指定schema文件的位置。

6.schema文件的位置由什么属性来指定

1).属性?:用schemaLocation属性。

2).属性值?:引入文件的namespace+空格+path

7.如果引入了n个schema约束,需要给n-1个取别名。

同时取别名的schema定义的标签在引用之前都得先加上别名。

http协议:

请求的组成:

请求行:(请求方式(get/post),请求路径(不包含主机名),请求所用协议(http1.1))

请求头:

请求体:只有post请求才有请求体

响应组成:

响应状态行:(200请求成功,404路径错误,500服务器端异常情况,302客户端跳转)

响应头:

响应体:

8.webservice中的几个重要术语

1.WSDL:web service definition language(webservice定义语言)

1-1).对应一种类型的文件 xxx.wsdl

1-2).定义了webservice的服务器端与客户端应用交互传递请求和响应数据的格式和方式

1-3).一个webservice对应一个唯一的wsdl文件

2).SOAP:Simple Object Access Protocal

2-1).简单对象访问协议

2-2).是一种简单的、基于http和xml的协议,用于在web上交换结构化的数据

2-3).SOAP消息请求消息和响应消息

2-4).http+xml片段

3).SEI:webservice Endpoint Interface

3-1).webservice的终端接口

3-2).webservice服务器端用来处理请求的接口

4).CXF:Celtix +Xfire

4-1).一个apache的用于开发webservice服务器端和客户端的框架

4-2).

4-3).

9.webservice服务端代码实现

1)创建一个java工程作为webservice服务端,如创建java工程hello_ws

2)在该项目的src项目下创建包 cn.bsxy.ws.server(任意取一个包名,遵循java包名定义的规则)

用于存放server端测试类 如 public class TestHelloWs(){}

创建包名cn.bsxy.ws.sei 用于存放webservice的SEI webservice终端接口public interface HelloWs(){}

创建包名cn.bsxy.ws.sei.impl 用于存放webservice的SEI的实现类,public class HelloWsImpl implements HelloWs(){}

以上各包中类的具体代码如下:

//webservice发布代码

package cn.bsxy.ws.server;

import javax.xml.ws.Endpoint;

import cn.bsxy.ws.sei.impl.HelloWsImpl;

/**

*

* @author smartluobo

*该类用来发布服务器端的wsdl文件

*/

public class TestHelloWs {

public static void main(String[] args) {

String address = "http://192.168.0.116:8888/hello_ws/hellows";

Endpoint.publish(address, new HelloWsImpl());

System.out.println("发布webservice成功");

}

}

//webservice终端接口定义

package cn.bsxy.ws.sei;

import javax.jws.WebMethod;

import javax.jws.WebService;

/**

*

* @author smartluobo

*该类用来定义webservice的终端接口,即对外提供的访问方法

*/

@WebService

public interface HelloWs {

@WebMethod

String sayHello(String name);

}

//webservice终端接口类的实现类,完成webservice对外提供接口的具体实现

package cn.bsxy.ws.sei.impl;

import javax.jws.WebService;

import cn.bsxy.ws.sei.HelloWs;

/**

* webservice终端接口实现类。对webservice对外提供接口的具体实现

* @author smartluobo

*

*/

@WebService

public class HelloWsImpl implements HelloWs {

@Override

public String sayHello(String name) {

System.out.println("hello web server"+name);

return "hello client"+name;

}

}

在TestHelloWs.java中运行该类当控制台打印发布成功后说明webservice已经发布成功。

webservice发布成功后打开浏览器,将在TestHelloWs.java中定义的address

复制到浏览器地址栏并在后面追加"?wsdl",就能看到发布后生成的wsdl文件。到此webservice服务端就已经ok

对webservice服务端的简单总结两个注解加上一个类

注解[email protected](该注解表示定义的该类是一个webservice终端接口,

但是在该终端接口类的实现类上任然需要加上该注解)

在上述的HelloWs.java和HelloWsImpl.java上都需加上@WebService注解

注解[email protected](该注解用在方法上表示该方法是webservice对外提供的一个方法,只需在接口定义方法上加该注解即可)

类.Endpoint(调用该类的Endpoint.publish方法发布webservice)

Endpoint.publish(String address, Object implementor)

address:webservice发布的地址。

implementor:webservice终端接口实现的类的对象。

10.webservice客户端实现:

1.创建一个普通的java项目作为客户端项目hello_ws_client(项目名称任意)。

2.根据wsdl文件发布地址借助jdk的wsimport.exe生成客户端代码。

path wsimport -keep url

path:表示生成的代码放在哪个路径下。

-keep:表示保存生成的代码的。

url:wsdl文件发布的url地址。

如:我想把通过wsdl文件生成代码放在hello_ws_client项目的src目录下。

进入hello_ws_client项目的src目录:我本地的路径为 D:\lmb\workspace\hello_ws_client\src在D盘下

2.1打开命令窗口 输入d: 切换盘符进入D盘

2.2 输入cd D:\lmb\workspace\hello_ws_client\src 进入到需要存放生成代码的路径下

2.3 输入 wsimport -keep http://192.168.0.116:8888/hello_ws/hellows?wsdl

2.4 上述三步完成后即完成了根据wsdl文件生成java代码的工作,此时刷新hello_ws_client项目即可看到生成的java代码。

3.在hello_ws_client项目中新建包cn.bsxy.ws.client.test(包名随意)

3.1创建一个测试类 public class ClientTest(){}(类名随意)

package cn.bsxy.ws.client.test;

import cn.bsxy.ws.sei.impl.HelloWsImpl;

import cn.bsxy.ws.sei.impl.HelloWsImplService;

public class ClientTest {

public static void main(String[] args) {

//使用wsimport生成的一个工厂类(名字为XxxxService)

HelloWsImplService factory = new HelloWsImplService();

//使用wsimport生成的一个类(名字和服务端webservice终端接口实现类的名称一致。但是在本地是一个接口)

//factory.getHelloWsImplPort()返回的是一个动态代理对象

HelloWsImpl helloWs = factory.getHelloWsImplPort();

String result = helloWs.sayHello("smartluobo");

System.out.println(result);

}

}

4.webservice客户端简单访问也到此结束。

时间: 2024-10-26 09:37:32

webservice通信 服务端 客户端简单实现的相关文章

WebService 服务端客户端 实例(一)

Delphi中WebService包含的组件解释(有7个)     (1) THTTPRIO-------:使用Http消息来调用远程使用SOAP的接口对象     (2) THTTPReqResp---:给服务器发送一个SOAP消息, THTTPReqResp在可调用接口上执行一个方法请求.       (3) TOPToSoapDomConvert ----:TOPToSoapDomConvert处理Soap方法请求的组合与分发     (4) TSoapConnection:TSoapCo

PHP-Socket服务端客户端发送接收通信实例详解

Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. Socket连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认.

linux 网络编程之最简单的tcp通信服务端

编写一个最为简单的tcp通信服务端.代码如下: #include <iostream> #include <cstring> using namespace std; #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <uni

Netty实例-简单的服务端-客户端实现,注释详细

       书籍推荐:                                       实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 Netty Server端实现 /** * * <p> * Netty Server Simple * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class NettyServer

手写一个模块化的 TCP 服务端客户端

前面的博客 基于 socket 手写一个 TCP 服务端及客户端 写过一个简单的 TCP 服务端客户端,没有对代码结构进行任何设计,仅仅是实现了相关功能,用于加深对 socket 编程的认识. 这次我们对整个代码结构进行一下优化,使其模块化,易扩展,成为一个简单意义上的“框架”. 对于 Socket 编程这类所需知识偏底层的情况(OS 协议栈的运作机制,TCP 协议的理解,多线程的理解,BIO/NIO 的理解,阻塞函数的运作原理甚至是更底层处理器的中断.网卡等外设与内核的交互.核心态与内核态的切

手机淘宝客应用(服务端+客户端+数据库)源码项目

欢迎大家光临我的个人网店:http://shop.662p.com/shop/view8.html 这是一款比较完整的应用源码,手机淘宝客应用(服务端+客户端+数据库),客户端是Java代码实现编程,另外服务端是采用了php的常见框架实现的,代码里面有一个sql文件是数据库导入文件 ,里面的apk是用来升级的版本 设置. 文件大小:10.94 MB 服务器:thinkphp 代码里面有一个sql文件是数据库导入文件 ,里面的apk是用来升级的版本 设置update.xml 用来跟之前安装的对比版

回显服务端/客户端

回显服务端/客户端 在这一章,我们将会实现一个小的客户端/服务端应用,这可能会是你写过的最简单的客户端/服务端应用.回显应用就是一个把客户端发过来的任何内容回显给其本身,然后关闭连接的的服务端.这个服务端可以处理任何数量的客户端.每个客户端连接之后发送一个消息,服务端接收到完成消息后把它发送回去.在那之后,服务端关闭连接. 因此,每个回显客户端连接到服务端,发送一个消息,然后读取服务端返回的结果,确保这是它发送给服务端的消息就结束和服务端的会话. 我们首先实现一个同步应用,然后实现一个异步应用,

企业运维之域控篇(十四)-域共享文件(服务端&客户端)设置

在公司我们这类杂工最多面对的也就是文件共享服务器.....这个是公司的重中之重,希望公司的领导与我们这类的杂工能够关注:免得一失足成千古恨!!!! 共享文件的作用:主要是在方便大家共同拥有. 共享服务器里的文件只能是暂时存放,而不是让它成为永久的仓库... 可能是人的懒性吧,所以每个公司的员工都是喜欢直接在共享文件里进行工作操作(如:编辑等等),其实这个是最点服务器资源与危险的事情. eg: 当你编辑好文件,保存后才发觉原来改错了,要恢复?那真是有些悲剧了(自己找不到需要的资料,同时也造成同事不

TCP/IP网络编程之基于TCP的服务端/客户端(二)

回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c --while ((str_len = read(clnt_sock, messag, 1024)) != 0) write(clnt_sock, messag, str_len);-- 接着,我们回顾客户端的代码 echo_client.c -- wr