WebService(一)

绿林寻猫
2021-12-08 / 0 评论 / 265 阅读 / 正在检测是否收录...

Web Service——也叫XML Web Service WebService,是一种跨编程语言跨操作系统平台的远程调用技术

各个应用程序之间的交流就需要Web Service来作为相互交流的桥梁

Web Service是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。

Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。基本的 Web services 平台是 XML + HTTP。

WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。

UDDI:UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。

XML+XSD、SOAP和WSDL就是构成WebService平台的三大技术。

 

所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。

所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以Web Service服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率。

 

Web Service开发可以分两方面

服务端开发把公司内部系统的业务方法发布成Web Service服务,供远程合作单位和个人调用。

客户端开发调用别人发布的Web Service服务,大多数人从事的开发都属于这个方面。例如,调用天气预报Web Service服务。

 

JAVA使用jdk开发WebService服务器端

(注:使用jdk开发时,jdk版本为1.6及以上)

 

第一步:创建Java工程 ,创建相应的(服务端)

第二步:创建一个公开的接口,写方法

(注:使用@WebService注解标注接口,使用WebMethod注解标注接口中的方法)


package Test;

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

/** 
* @ClassName: Test_WebSweviceI 
* @Description: TODO(webservice终端) 
* @author Uncle
* @date 2018年9月18日 下午6:05:44 
*  
*/
@WebService
public interface Test_WebSweviceI {
	/**
	 * 
	* @Title: getUserById 
	* @Description: 通过uid得到用户信息
	* @param uid
	* @return String
	* @author Uncle
	* @date 2018年9月18日下午6:32:12
	 */
	@WebMethod
	public String getUserById(int uid);
}

第三步:编写接口的实现类使用@WebService注解标注实现类,并实现接口所有方法:

package Test;

import javax.jws.WebService;

/** 
* @ClassName: Test_WebService 
* @Description: TODO(webservice实现类) 
* @author Uncle
* @date 2018年9月18日 下午6:05:12 
*  
*/
@WebService
public class Test_WebServiceImpl implements Test_WebSweviceI{

	/* (非 Javadoc) 
	* <p>Title: getUserById</p> 
	* <p>Description: </p> 
	* @param uid
	* @return 
	* @see Test.Test_WebSweviceI#getUserById(int) 
	*/
	public String getUserById(int uid) {
		// TODO Auto-generated method stub
		//通过这个方法拿取的数据
		String str = "哈哈哈哈哈哈";
		return str;
	}

}

第四步:写发布类,使用Endponit(终端)类发布

(注:发布服务:

通过Endpoint类提供的publish()方法发布,

发布时要保证使用的端口号没有被其他应用程序占用,

Endpoint类是端点类,用来标识网络地址,

IP地址是本机动态地址。)

package Test;

import javax.xml.ws.Endpoint;

/** 
* @ClassName: Publish 
* @Description: TODO(发布) 
* @author Uncle
* @date 2018年9月18日 下午6:10:10 
*  
*/
public class Publish {

	public static void main(String[] args) {
		String url="http://本地ip地址:1999/web/webservice";
		Endpoint.publish(url, new Test_WebServiceImpl());
		System.out.println("ok");
	}
}

第五步:使用Eclipse自带的工具测试服务端

1.选择Luanch the Web Service Explorer

2.选择WSDL Page,打开WSDL

3.测试方法

 

打开浏览器也可通过http://本地ip地址:1999/web/webservice?wsdl 查看

 

客户端(终端)访问WebService

访问别人提供的方法,在http://www.webxml.com.cn网站上有很多公开的方法

我们就来测试一个天气的WEB服务

 

可以看到公开了很多可使用的方法,我们就拿getWeather测试

1.点击更多

点击选中的为wsdl结尾的链接

可以得到对应的xml,我个人一般情况下都是把此文件保存到本地再通过命令生成代码,因为某些情况下可能需要改此xml文件

在打开的页面:ctrl+s 保存到文件夹

 

可以看到文件已经保存下来

 

此时我们跑到Eclipse工作空间,找到对应的项目,下的文件夹中按住shift点击右键打开命令窗口

在cmd命令窗口执行下述命令生成客户端代码:

wsimport -keep -d D:\WorkSpace\Hibernate\Web_Service1\target\test-
classes\Test -s D:\WorkSpace\Hibernate\Web_Service1\src\test\java -verbose d:/WeatherWS.xml

 

-keep:是否生成java源文件

-d:指定.class文件的输出目录

-s:指定.java文件的输出目录

-p:定义生成类的包名,不定义的话有默认包名

-verbose:在控制台显示输出信息

-b:指定jaxws/jaxb绑定文件或额外的schemas

-extension:使用扩展来支持SOAP1.2

解析当中可能会报错:(根据错误提示删除xml对应的信息再解析)

再次解析可以看见

文件已生成

 

--------------测试------------

package Test;

import java.util.List;

import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;

/**   
* @Title: Test.java 
* @Package Test 
* @Description: TODO(用一句话描述该文件做什么) 
* @author Uncle  
* @date 2018年9月18日 下午9:56:57 
* @version V1.0   
*/
public class Test {

	public static void main(String[] args) {
		//找到xml中wsdl:service      <wsdl:service name="WeatherWS">
		//获得服务
		WeatherWS ws = new WeatherWS();
		//SOAP 指简易对象访问协议
		WeatherWSSoap soap = ws.getWeatherWSSoap();
		//soap.getWeather("长沙", "")的返回类型是ArrayOfString  用getString()转成list
		List<String> list = soap.getWeather("长沙", "").getString();
		for (String s : list) {
			System.out.println(s);
		}
	}
}

结果:可以看到控制台根据查询输出了对应信息

---------------------------------------------------------------------------

以上就是使用JDK开发WebService及客户端(终端)访问WebService,下次再写使用Axis2框架开发

 

 

 

0

评论 (0)

取消