[评论]
作者:刘国栋 (dev2dev ID: yahoo163)
引言
Web服务作为下一代网络服务的一个标准已经得到了大家的认同,很多主要的厂商都在自己的技术平台上实现了对Web服务的支持。作为一种基于Web的分布式应用,Web服务可以被多种客户端程序使用,如果你把自己开发的一个应用实现为Web服务,那么,无论将来使用你这个应用的客户端是Java、VB、C++还是C#都不必再写专门的接口就可以调用这个服务。为了实现Web服务可以被任何客户端调用,它使用了以下的技术:
- 服务发布/发现:UDDI
- 服务描述:WSDL
- XML消息:SOAP
- 传输协议:HTTP、SMTP、FTP、HTTPs、TCP/IP
从上面列出的一系列概念和技术我们不难看出,要实现并发布一个Web服务需要的东西还真不少。我以前写过一个服务的实现使用的是Apache SOAP,经过应用实现,服务描述到最后部署最终完成了一个打印HelloWold消息的服务,但是非常的复杂繁琐。不过,现在如果使用Weblogic WorkShop8.1开发Web服务,你会发现开发一个Web服务将是非常简单的,甚至给你的感觉就像再搭积木那么容易。好了,废话少说,现在就让我们一起来使用优秀的Weblogic WorkShop8.1结合Weblogic Server8.1来开发我们的第一个Web服务吧。
文中的例子
在开始这篇文章之前我先大概介绍一下,我们将要实现的服务是作什么的。我们的第一个服务非常简单,只是在Weblogic WorkShop8.1环境下写一个在控制台上打印“HelloWorld”字符串的服务,紧接着我会进一步的讲解如何编写一个运行于Weblogic WorkShop之外的客户端来调用这个服务。
准备工作
为了运行我们将要讲的例子,我们需要从Bea站点上下载最新版本的WebLogic Platform8.1。Bea的dev2dev中文站点提供了下载的链接,你可以从这里下载它的中文版http://dev2dev.bea.com.cn/。之后的安装步骤非常简单,因为是中文版你只要按照它的提示(一般选择默认的设置)一步一步安装就完成了。
另外,为了能够更好的运行和调试文中的例子,建议你的计算机配置最好在CPU:P4,内存512M以上,我的开发平台是Windows2000。当然这不是必须的。
编写HelloWorld服务
几乎大多数入门性介绍文章都喜欢使用HelloWorld来开头,我也用它来开头给大家介绍一下如何使用Weblogic WorkShop8.1快速开发Web服务。
在安装完WebLogic Platform8.1之后,在程序菜单里可以看到Weblogic WorkShop的链接,单击打开它。我们会看到下面的界面。界面是完全中文版的而且它的帮助也汉化了,而且写的非常好。
现在新建一个工程,选择建立“空应用程序”,取名为myWeb,保存在E: myWeb文件夹下面:
在这个应用程序下面我们可以建立Web服务了,在应用程序目录上点击“新建->项目”新建一个WebServices项目取名为myWebServices,如图:
在这个新建的WebServices项目上点击右键“新建->WebServices”新建一个Web服务取名为HelloWorld,它是一个以.jws为后缀的文件。一会我们将在这个服务上添加我们自己的方法和功能。创建完之后你会看到下面的画面,它代表我们有了一个Web服务名叫”HelloWorld”
虽然有了一个服务但是它现在什么都不作,就让我们来给它添加一个方法实现在Weblogic控制台打印”HelloWorld”字符串。在HelloWorld服务的面板上单击右键,选择添加方法:
我们添加的方法名为“SayHello”,添加完之后点击“源代码视窗”我们可以看到下面几行代码:
public class HelloWorld implements com.bea.jws.WebService
{
static final long serialVersionUID = 1L;
/**
* @common:operation
*/
public void SayHello()
{
System.out.println("HelloWorld");
}
}
代码说明:WebLogicWorkShop的.jws文件和一般的java文件格式相同使用标准的java类的写法,所有java语言的规范也同样适用预.jws,在这里Weblogic WorkShop 对Java的javadoc进行了扩展。注意注释标记中的@common:operation它将告诉Weblogic WorkShop这是一个方法操作,这个SayHello方法被作为服务向客户端暴露的一个方法。如果去掉这个标记,那么这个方法被当作是Java的一个内部方法不会向客户端暴露。
其中System.out.println("HelloWorld");一行是我们自己增加的向控制台打印的功能。
当然作为Web服务的一部分,我们还可以为这个服务生成一个描述文件。完成这一步只要在HelloWorld.jws文件上点击“生成WSDL文件”就可以了,工具会自动为我们生成描述这个服务的WSDL文件:
运行并测试服务
现在一个最简单的WebServices就完成了,要测试这个服务是否能够正常运行非常简单,Weblogic WorkShop提供了强大的调试功能,我们要测试这个服务只需要单击工具栏里的 按钮就可以了,这时候如果你的WeblogicServer没有启动,它会提示是否启动服务器,选择“是:启动应用服务器(这以过程可能会比较慢,具体情况要看你的计算机配置高低),你将看到下面的画面。
Weblogic WorkShop在启动应用服务器的同时还会编译并打包这个服务,自动生成一个测试这个服务的客户端,并自动打开浏览器显示一个测试网页:
现在点击那个“SayHello“按钮。看看WeblogicServer控制台发生了什么?没错在我们的控制台上显示了”helloWorld“字符串。
好了,一个最简单的Web服务完成了。是不是非常容易,虽然容易但这并不表示功能会有什么欠缺,我们现在生成的Web服务可以被任何WeblogicWorkShop意外的程序访问。下面我就来讲一讲如何发布服务以及如何编写一个Java客户端访问这个服务。
服务的发布
在Weblogic WorkShop中大包并发布一个服务非常简单。在菜单中点击“生成->生成EAR文件“。把这个服务大包为一个.ear文件。
打包后的文件可以在E:myWeb目录下找到,默认使用工程名myWeb.ear。
现在就可以发布你的Web服务了,WeblogicPaltform8.1中发布web服务非常简单,你只要把刚才那个myWeb.ear复制到你的WeblogicServer的应用程序目录下,我的是在D:eauser_projectsapplicationsmydomainDefaultWebApp目录下。下面我将讲述如何编写一个客户端访问这个服务。
编写客户端
如果读者中以前有写过web服务调用的人的话,你一定还记得哪种可怕的精力,因为你必须关心具体服务的位置,WSDL描述信息等。而在WeblogicWorkShop中这一切讲非常简单。还记得我们在测试helloworld服务是WeblogicWorkShop打开的那个测试页面吗?在这个页面上点击那个“概述“的链接,在页面上有一个”java 代理“和”代理支持Jar“。把他们下载下来:
这两个类为我们提供了,访问服务的代理类。现在要把他们复制到D:eauser_projectsapplicationsmydomainDefaultWebAppWEB-INFlib下面,这样一会儿我写的JSP客户端就可以访问这两个包中的类了。就像在上面那个页面中看到的描述一样,“您可以使用其中包含的类访问此 web service,就好像它是本地 Java 类一样“。现在就让我们来写一个JSP客户端来访问这个服务。我给出这个JSP的源代码如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import ="weblogic.jws.proxies.*"%>//导入代理类
<%
HelloWorld_Impl helloimp;//服务类的代理实现
HelloWorldSoap hellosoap;
try {
helloimp=new HelloWorld_Impl();
hellosoap=helloimp.getHelloWorldSoap();//获得这个服务的对象
hellosoap.SayHello();//调用方法,打印“HelloWorld“
}
catch (Exception ex) {
ex.printStackTrace();
}
%>
这个客户端什么也不作,只是简单的调用HelloWorld服务中的SayHello方法,使其在服务器控制台上答应“HelloWorld “字符串。你可以看到,虽然这个服务在远程的服务器上但是我在这里调用它和调用一个普通的Java类没什么分别。
结论
我向大家展示了如何在WeblogicWorkShop8.1中开发、部署、调试一个服务,并最终使用JSP作为客户端调用这个服务。你可以看到这一过程非常简单,你无需编写繁琐的WSDL文件,也不必亲自编写客户端调用的代理类,大部分事情WeblogicWorkShop都为你完成了。这确实为我们的开发工作节省了大量的时间。我们可以把更多的精力放到实际的业务流程描述上。好了,希望这篇文章能够作为一个入门,把你带入到Web 服务的世界,使你能够利用WeblogicWorkShop带来的便捷性开发下一代的Web服务技术。
作者:刘国栋
个人介绍:
2000年大学毕业之后一直从事软件开发。先后参与开发了多个项目,使用技术包括EJB,Selvlet,JSP,Struts,JDO,Web Services等。