谈谈WebService开发-基础篇
来源:互联网 发布:erp系统数据录入 编辑:程序博客网 时间:2024/05/20 13:07
最近经常有些网上的朋友问起WebService的开发,这里就我个人的理解做个简明介绍与总结。该篇主要介绍WebService涉及的一些基础:
- WebService的必要性;
- Schema规范与Http协议
- 重要述语;
- 开发WebService的步骤;
WebService的必要性
对于这个能回答以下面两个问题,个人觉得就能理解它的必要性了:
1.什么是WebService;
顾名思义,WebService就是基于Web的服务,服务器端提供一些资源可以让应用访问;是一个跨语言,跨平台的规范;多个跨平台,跨语言的应用间通信的解决方案;
2.为什么要用WebService;
试想下以下应用场景 A应用---用java开发,运行在windows平台,List<Address> getAllAddress();
B应用---用C语言开发,运行在linux平台,B应用现在要获取A应用的所有的Address信息;
总结:WebService可以解决跨语言,跨平台,远程调用。
Schema规范与Http协议
Schema规范是用来约束XML文件的书定格式的,Schema文件是以.xsd作为后缀的,Schema规范中需要掌握以下几点:
- 所有的标签与属性均需要在Schema文件中定义,schema标签本身是由w3c组织来定义的;
- 每个Schema文件都必须有一个ID,这里称为namespace即命名空间;
- targetnamespace 用以标识当前schema的namespace;
- 由xmlns 来引用schema,xmlns的值是引用的schema的namespace,当引用N个schema时需要有至少N-1个别名,别名的格式如“xmlns:ddd” ;
- 对于非w3c组织定义的schema,需要指定引用的schema的位置,schemaLocation就是 用以说明引用的schema的位置信息。
Http协议,需要理解以下几点:
- 请求的组成,一个请求行[请求方法(post/get),path,协议版本(http1.1)];多个请求头;请求体(只有post方法有);
- 响应的组成,响应状态行[需要了解常用的状态码200,404,500,302等];
- 请求响应的过程,了解一下http1.0与http1.1的区别,1.0一个连接只能请求一个资源,现在已经基本不用了,具体过程如下图:
重要述语
- WSDL:Web Service Definition Language 对应一种后缀为.wsdl文件,一个webservice对应一个唯一的wsdl文档,它定义了客户端与服务器端进行交互的请求与响应的数据格式;
- SOAP:Simple Object Access Protocal 简单对像访问协议;实际上就是http+xml片断;依赖于WSDL文档的定义;
- SEI:Service EndPoint Interface web service的终端接口,就是服务器端用来处理请求的接口(其中的方法就是处理请求的方法);
开发WS的步骤
package com.devins.ws.server.service;import javax.jws.WebMethod;import javax.jws.WebService;/** * * SEI定义 * */@WebServicepublic interface ISayHello {@WebMethodpublic String sayHello(String name);}
2.新建接口实现类:
package com.devins.ws.server.service.impl;import javax.jws.WebService;import com.devins.ws.server.service.ISayHello;/** * SEI实现 */@WebServicepublic class SayHelloImpl implements ISayHello{@Overridepublic String sayHello(String name) {// TODO Auto-generated method stubSystem.out.println("Server: Hello! "+name);return "Hello: "+name;}}
以上两步注意点以@WebService注解SEI及SEI实现类,以@WebMethod注解SEI方法;
package com.devins.ws.server.publish;import javax.xml.ws.Endpoint;import com.devins.ws.server.service.impl.SayHelloImpl;public class ServicePublishTest {public static void main(String[] args) {String address = "http://132.122.239.74:8089/ws/sayhello";//利用EndPoint类来进行发布Endpoint.publish(address, new SayHelloImpl());System.out.println("WebService服务发布成功!");}}
http://132.122.239.74:8089/ws/sayhello?wsdls 查看wsdl信息,表示服务发布成功。如下图:
<img src="http://img.blog.csdn.net/20150506084914075?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9zb25yaWNr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
4.创建客户端工程,通过jdk工具wsimport.exe来生成客户端调用代码,通过命令行进入到客户端工程的src目录,命令如下:
wsimport -keep url 这里的url即服务器端发布的wsdl地址,执行如下:
执行完成后刷新客户端工程,工程生成如下代码:
5.编写客户端调用代码:
package com.devins.ws.client;import com.devins.ws.server.service.impl.SayHelloImpl;import com.devins.ws.server.service.impl.SayHelloImplService;/* * 通过远端wsdl地址生成客户端代码的方式 */public class ClientTest {public static void main(String[] args) {SayHelloImplService factory = new SayHelloImplService();SayHelloImpl sayHelloImpl = factory.getSayHelloImplPort();String result = sayHelloImpl.sayHello("devins");System.out.println("client :"+result);}}至此,通过JDK实现webservice的开发已经完成,右键运行客户端代码结果如下:
客户端控制台:
服务器端控制台:
通过以上方式实现客户端,我们会发现对于开发编码实现阶段,不方便查看soap消息,即请求消息与响应消息,Eclipse已经帮我们开发人员想到了,Eclipse 提供了监控TCP/IP的工具,进行以下配置步骤:
1.生成本地wsdl文档,可以浏览器运行 http://132.122.239.74:8089/ws/sayhello?wsdls 将相关内容保存成wsdl文件,如service.wsdl;
2.修改本地service.wsdl的发布端口为8080,可以根据需要设置其它的空闲端口也可以;
<service name="SayHelloImplService"><port name="SayHelloImplPort" binding="tns:SayHelloImplPortBinding"><soap:address location="http://132.122.239.74:<span style="color:#ff0000;">8080</span>/ws/sayhello" /></port></service>
3.根据本地wsdl文档生成客户端代码,这里建了另一个客户端工程Webservice-jdk-client2,命令行进入src目录方法如下图:
其它代码与第一个client工程相同。
4.配置Eclipse TCP/IP监听,配置如下图:
完成以上几步后即可右键运行客户端调用代码,运行后在控制台会同时出现以下TCP/IP监听视窗,如下图:
从上图中可以较方便的看到请求消息与响应消息,便于开发过程中的查看与调试。至此,使用JDK开发webservice的过程已经完成。后续还将逐步深入的介绍有关webservice的知识。
- 谈谈WebService开发-基础篇
- 谈谈WebService开发-应用篇(二)-基于CXF-天气预报
- 谈谈WebService开发-应用篇(三)-教你如何看WSDL文档
- 谈谈WebService开发-应用篇(三)-教你如何看WSDL文档
- 谈谈WebService开发-应用篇(一)---手机归属地查询
- 谈谈WebService开发-应用篇(四)-CXF基于Spring的应用
- Web开发基础--WebService
- webservice基础开发文档---什么是webservice
- 谈谈 webservice -- 概念
- 谈谈JAVA程序的反编译-Java基础-Java-编程开发
- leo谈谈写简历之基础篇
- WebService从零到项目开发使用1—技术研究之基础篇 XML
- WebService从零到项目开发使用1—技术研究之基础篇 WSDL
- WebService从零到项目开发使用1—技术研究之基础篇 SOAP
- WebService从零到项目开发使用1—技术研究之基础篇 SOAP
- WebService从零到项目开发使用1—技术研究之基础篇 XML
- WebService从零到项目开发使用1—技术研究之基础篇 WSDL
- webservice基础
- 解决 Failed connect to github.com:8087
- 烦啊
- Shiro Spring url 控制访问
- [solved] g++ 模板类中的友元函数 链接出错
- oracle数据库导入、导出
- 谈谈WebService开发-基础篇
- 视图拖动返回原位和高斯模糊效果
- iOS开发个人独立博客收集
- Solar energy enjoys a glowing outlook
- Hadoop错误集锦(持续更新)
- Letter Combinations of a Phone Number
- 第8周-项目0-简单C++学生信息管理系统
- Android-百度地图的调用(检索功能)
- 在IOS中设置文本框字体自适应高度