WebService(一) JDK实现WebService

重点:

1.WebService简介
2、JDK开发WebServrice
3、Web项目发布WebService

重点解析:

1.概述

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。

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

XML+XSD、SOAP和WSDL就是构成WebService平台的三大技术。
在这里插入图片描述

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

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

1.2.WebService的开发手段
使用JDK开发(1.6以上版本) ✔
使用Axis2框架开发(工作中使用)

2.JDK开发WebServrice
在JDK1.6时,Oracle公司就将Web Service集入到了JDK,通过Endpoint类来实现。
2.1.开发WebService服务器端

第一步:创建Java工程 ,创建相应的包(服务端)
第二步:建一个接口Person,创建方法:

/**
 *  定义SEI(WebService EndPoint Interface(终端))
 */
@WebService		//使用@WebService注解标注WebServiceI接口
public interface WebServiceI{
@WebMethod	      //使用WebMethod注解标注WebService接口中的方法
public String say(String what);
}

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

/**
 *  SEI的具体实现
 */
@WebService    //使用@WebService注解标注WebServiceI接口的实现类
public class PersonImpl implements WebServiceI{
@Override
public String say(String what){
System.out.println("服务端:"+what);
return "正在说"+what;
}
}

第四步:写发布类WebServicePublish,使用Endponit(终端)类发布WebService
将eat()方法暴露出去,确保客户端可以访问eat()方法:

/**
 *  发布WebService
 */
public class WebServicePublish{

	public static void main(String[] args){
	    /**
* 发布服务:
* 通过Endpoint类提供的publish()方法发布WebService,
* 发布时要保证使用的端口号没有被其他应用程序占用。
* Endpoint类是端点类,用来标识网络地址。
*/
	    String address = "http://172.20.10.5:6868/WS_Service/webService";
//IP地址是本机动态地址
	    Endpoint.publish(address, new WebServiceImpl());
	    System.out.println("服务端发布WebService成功....");
	}
}

运行测试类,即将编写好的WebService发布好了。
WebService的访问URL是:http://172.20.10.5:6868/WS_Service/webService

第五步:使用Eclipse自带的工具测试服务端
MyEclipse集成了Web Service,在地球的小图标旁边。
在这里插入图片描述
打开后,如果想要看上面发布的,就在右上角找到WSDL page,点击后看右侧

输入http://172.20.10.5:6868/WS_Service/webService?wsdl,开发文件后发现是xml文件。

在这里插入图片描述

输入服务端的地址后,显示暴露出来的say()方法:
在这里插入图片描述

点击say()方法,在显示项中选择Add:
在这里插入图片描述
在下面的输入框中输入文字,Body处就显示结果。

在这里插入图片描述

2.2.客户端(终端)访问WebService
借助JDK的wsimport.exe工具生成客户端代码,wsimport.exe工具位于JDK的bin目录下,如下图所示:
在这里插入图片描述

在cmd命令窗口执行下述命令生成客户端代码:
wsimport -keep url(url为wsdl文件的路径)

wsimport -keep url(url为wsdl文件的路径)

具体步骤:
第一步:创建终端工程,主要用来实现接收服务端的暴露。
第二步:找到客户端源代码路径,如果不知道显示 在此处打开命令窗口 ,就按住shift 加鼠标右键 ,就ok了
在这里插入图片描述
在命令框中输入:
wsimport -keep http://172.20.10.5:6868/WS_Service/webService?wsdl
在这里插入图片描述
回车后会解析产生很多的文件,在客户端com/…下面
建议:在src中右击操作输入命令,让产生的文件都生成在src中。

第三步:创建Test.java测试类,在main方法中:

PersonImpService  personImpService =new  PersonImpService();
PersonImp personImp=personImpService.getPersonImpPort();
String str=personImp.eat("米田共");
System.out.println(str);

3.Web项目发布WebService

如果是Web项目,我们可以使用监听器或Servlet来发布WebService。

3.1.使用ServletContextListener监听器发布WebService

/**
* 用于发布WebService的监听器
*/
//使用Servlet3.0提供的@WebListener注解将实现了ServletContextListener接口WebServicePublishListener类标注为一个Listener
@WebListener
public class WebServicePublishListener implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
	
	}
	
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		//WebService的发布地址
		String address = "http://192.168.1.100:8080/WS_Server/WebService";
		//发布WebService,WebServiceImpl类是WebServie接口的具体实现类
		Endpoint.publish(address, new WebServiceImpl());
		System.out.println("使用WebServicePublishListener发布webservice成功!");
	}
}

将Web应用部署到服务器运行时,在初始化Web应用上下文时,就会发布WebService了。
接着我们可以使用发布的URL地址访问WebService,如下图所示:
在这里插入图片描述

3.2.使用Servlet发布WebService

/**
* 用于发布WebService的Servlet
*/
//使用Servlet3.0提供的@WebServlet注解将继承HttpServlet类的普通Java类标注为一个Servlet
//将value属性设置为空字符串,这样WebServicePublishServlet就不提供对外访问的路径
//loadOnStartup属性设置WebServicePublishServlet的初始化时机
@WebServlet(value="", loadOnStartup=0)
public class WebServicePublishServlet extends HttpServlet {

	/* 
	* 在WebServicePublishServlet初始化时发布WebService
	*/
	public void init() throws ServletException {
		//WebService的发布地址
		String address = "http://192.168.1.100:8888/WebService";
		//发布WebService,WebServiceImpl类是WebServie接口的具体实现类
		Endpoint.publish(address , new WebServiceImpl());
		System.out.println("使用WebServicePublishServlet发布webservice成功!");
	}
}

将Web应用部署到服务器运行时,在初始化WebServicePublishServlet时,就会发布WebService了。如下图所示:
在这里插入图片描述
接着我们可以使用发布的URL地址访问WebService,如下图所示:
在这里插入图片描述

关于发布WebService主要就是通过javax.xml.ws.Endpoint类提供的静态方法publish()进行发布,如果是普通的Java项目,那么可以专门写一个类用于发布WebService,如果是Web项目,那么可以使用ServletContextListener或者Servlet进行发布。

使用ServletContextListener进行发布:

public class InitListener implements ServletContextListener {  
	@Override 
	public void contextDestroyed(ServletContextEvent context) {  
   
	}  

	@Override 
	public void contextInitialized(ServletContextEvent context) {  
		// 上下文初始化执行  
		System.out.println("=======>[ServletContextListener]自动加载启动开始."); 
	}  
}

然后在web.xml文件配置该监听器:

<listener>
<listener-class>com.test.init.InitListener</listener-class>  
</listener>

猜你喜欢

转载自blog.csdn.net/cao_2000/article/details/84892368