加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

谈谈WebService开发-基础篇

发布时间:2020-12-16 22:52:49 所属栏目:安全 来源:网络整理
导读:??????? 最近经常有些网上的朋友问起WebService的开发,这里就我个人的理解做个简明介绍与总结。该篇主要介绍WebService涉及的一些基础: WebService的必要性; Schema规范与Http协议 重要述语; 开发WebService的步骤; WebService的必要性 ? ? ?? 对于这个

??????? 最近经常有些网上的朋友问起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规范中需要掌握以下几点:

  1. 所有的标签与属性均需要在Schema文件中定义,schema标签本身是由w3c组织来定义的;
  2. 每个Schema文件都必须有一个ID,这里称为namespace即命名空间;
  3. targetnamespace 用以标识当前schema的namespace;?
  4. 由xmlns 来引用schema,xmlns的值是引用的schema的namespace,当引用N个schema时需要有至少N-1个别名,别名的格式如“xmlns:ddd” ;?
  5. 对于非w3c组织定义的schema,需要指定引用的schema的位置,schemaLocation就是 用以说明引用的schema的位置信息。


Http协议,需要理解以下几点:

  1. 请求的组成,一个请求行[请求方法(post/get),path,协议版本(http1.1)];多个请求头;请求体(只有post方法有);
  2. 响应的组成,响应状态行[需要了解常用的状态码200,404,500,302等];
  3. 请求响应的过程,了解一下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的步骤

? ? ? ?开发手段可以采用源生的JDK进行开发,建议1.6以上JDK;当然工作中一般可能会借助其它webservice框架来进行开发,常用的有CXF,AXIS2等;这里先以源生的JDK来进行开发一个简单demo以示步骤:
? ? ? ?1.创建服务器端工程Webservice-jdk-server,并新建接口ISayHello.java,即创建SEI。
package com.devins.ws.server.service;

import javax.jws.WebMethod;
import javax.jws.WebService;

/**
 * 
 * SEI定义
 *
 */
@WebService
public interface ISayHello {
	@WebMethod
	public String sayHello(String name);

}

? ? ? 2.新建接口实现类:
package com.devins.ws.server.service.impl;

import javax.jws.WebService;

import com.devins.ws.server.service.ISayHello;

/**
 * SEI实现
 */
@WebService
public class SayHelloImpl implements ISayHello{

	@Override
	public String sayHello(String name) {
		// TODO Auto-generated method stub
		System.out.println("Server: Hello! "+name);
		return "Hello: "+name;
	}

}

以上两步注意点以@WebService注解SEI及SEI实现类,以@WebMethod注解SEI方法;

? ? ? 3.发布服务:
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服务发布成功!");
	}

}

server工程结构如下:



完成以上编码,运行发布服务的main方法,此时即可在浏览器中输入?
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的知识。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读