使用NetBeans进行B/S结构的商业应用开发(五)

第四章  故障排除

使用NetBeans进行开发有时我们也会遇到一些故障(或许是BUG)。在这里我介绍其中一些故障的排除方法(非官方的方法,自己摸索的哦)。

故障之一:运行NetBeans后,尚未打开程序的主界面就报告IDE的致命错误,选择确定后系统退出,但实际上NETBEANS的实例还存在于系统进程中。

排除方法:如果你没有更改系统配置的话,打开操作系统的资源管理器,打开你系统盘(一般是C盘)中的如下目录Documents and Settings/你的操作系统登录用户名/ .netbeans/3.6/system/HTTPMonitor,将其中的current目录删除,然后,在系统的任务管理器中杀掉所有runide.exe进程(记住一般它有两个,你如果先杀掉内存使用大的那个,则两个都会被杀掉;如果你杀除内存使用小的那个,切记还有手工杀掉另一个),然后,重新运行NETBEANS,故障就排除了。

故障之二:在编辑某个JAVABEAN代码时,保存后,编译报告某行某某变量没有声明,去查找没有发现该变量,只是发现报告中变量比在出错行的一个变量少了某个字母,关闭JAVABEAN的编辑界面,然后打开,编译还是同样错误,查看发现确实在这行上有这个变量没有定义,但我们还会发现,其实这时由于变量名缺少了某个字母,我们将它缺少的字母补充上去,保存编辑还是同样错误,再关闭,再打开,发现还是少了这个字母。

排除方法:关闭打开的该JAVABEAN的编辑界面,使用WINDOWS中的记事本程序打开此JAVABEAN编辑,找出错行中的出错变量,将其该正确,然后保存,再到NETBEANS中编译此JAVABEAN,成功。接下来选中此文件,使用鼠标右键,签入文件就可以了。

故障之三:现象类似故障之二,同样是系统自动丢失字母或符号,有时是改好一个地方另一个地方又报告错误,而你再去改好第二个地方,原来改好的第一个地方又错误还原了。

排除方法:同故障之二的排除方法。

 

 

第五章  开发WEB SERVICES

随着计算机网络的发展, WEB应用获得了巨大成功和发展,它已经渗透到了商业领域和个人生活的方方面面,现在人们只有使用浏览器就可以享受各种各样的WEB服务。WEB服务(WEB SERVICES)的好处是显而易见的。它使企业应用集成(EAI,特别使异构系统的集成成为可能,并且越加方便,它使应用程序与应用程序可以了相互对话,它使系统从原来面向对象的体系结构过度到面向服务的体系结构(SOA),使应用的开发及集成成本迅速下降。

Web Services是通过一系列标准和协议来保证程序之间的动态连接。这些协议包括:SOAP, WSDL, UDDIWeb Services的工作原理图如下图28

这里需要了解一些概念:

1、什么是SOAPSOAP就是简单对象访问协议(Simple Object Access Protocol),它规定了Web Services之间是如何传递消息的。其中传递的消息又是使用XML来定义的。

2、什么是WSDLWSDL就是WEB服务描述语言(Web Services Description Language),它定义了WEB服务的接口,如服务名、服务所在机器、监听端口、方法的参数顺序等信息。

3、什么是WSDDWSDD就是WEB服务分布描述(Web Service Deployment Descriptor, 它定义了WEB服务的接口,如服务名、提供的方法、方法的参数等信息。

4、什么是UDDIUDDI就是统一描述、发现和集成(Universal Description, Discovery, and Integration)。UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。

Web Services并不是万能的,它也要一定的局限性,一般来说对于基于WANInternet的应用、基于异构平台的应用、需要强安全特性的应用、EAI(企业应用集成)和行业内部B2B应用比较适合。

第一节  准备开发Web Services

你首先需要下载Apache AXIS,最新的是AXIS1.2测试版,下载地址如下:

http://archive.apache.org/dist/ws/axis/1_2alpha/

下载完后,展开压缩包中的AXIS目录到TOMCATWebApps目录下。这里要求TOMCAT4.X及之后版本,要求JDK1.4及以后版本。关于JDK的安装可以参考第一章的相关内容。TOMCAT的安装可以参考相关文章或TOMCAT的相关手册。在本文中不介绍独立安装的TOMCAT如何配置AXIS来开发Web Services,因为我们是专门针对NETBEANS开发来讲的,但其实方法类似。

 

 

第二节  NETBEANS中安装AXIS并启动服务

首先保证你的NETBEANS已经安装成功(安装方法参加第一章中的相关内容)。然后你打开WINDOWS的资源管理器,找到NETBEANS的安装目录,这时你会看到一个叫jakarta-tomcat- 5.0.19的目录,进入这个目录下的webapps目录,有压缩软件打开刚刚下载的AXIS安装包,找到其中的AXIS目录,将该目录释放到刚刚找到的webapps目录中。如果你打算TOMCAT上发布的所有站点都支持Web Services的话,接下来你还要到刚刚释放的AXIS目录下的WEB-INF/lib目录下的所有的JAR文件拷贝到jakarta-tomcat-5.0.19目录下的common/lib目录下。如果你使用的JAVA 2J2SE则还有拷贝另外两个文件分别到common/lib(同上理,这不是必须的,除非你打算TOMCAT中的站点都要支持Web Services)和axis/WEB-INF/lib目录下,这两个文件的下载路径分别是:javamail(http://java.sun.com/products/javamail/index.jsp)JAFhttp://java.sun.com/products/javabeans/glasgow/jaf.html),如果你安装的是J2EE,这两个文件就不需要安装了。然后你在NETBEANS中选择“运行环境” 标签,出现如图29的界面。如果你看不到“运行环境”标签,可以在系统菜单上选择“窗口”下的“运行环境”子菜单(如图31所示),就可以看到这个标签,只是有可能这个标签不是出现在这个地方,你可以用鼠标拖动它到指定位置(在NETBEANS中许多的标签都可以使用鼠标拖动到指定位

置显示)。在图29中,你选择“服务器注册”下面的“TOMCAT 5服务器”下的“http://localhost:8084(一般情况下只有这一个,而且默认是8084端口,除非你改变了端口号,或你和我一样安装了两个TOMCAT服务,并在这里注册了它,你才会在这里看到有两个服务器,如我上面显示的“http://localhost:8090),鼠标右键,弹出如图30的右键菜单,选择“启动/停止服务器”菜单,在弹出的图32界面中选择“启动服务器”(如果服务已经启动,在这里将看到图33所示的界面,选择“停止服务器”后,再通过此方法来启动服务器),这时等待一会儿,如果没有出现错误,则TOMCAT服务器启动成功。

第三节  测试AXIS是否安装成功

现在,我们的TOMCAT服务器已经启动,但AXIS是否安装成了呢?我们可以通过测试知道AXIS是否安装成功。

打开IE,在地址栏中输入http://localhost:8084/axis,出现图34界面。然后点击页面上的Validate连接,如果出现页面上有图35所示内容就表示AXIS安装成功了。如果没有出现这个界面,此页面上会提示你缺少什么JAR文件的,而且会给出下载路径,直接下载它们,然后复制到axis/WEB-INF/lib目录和jakarta-tomcat- 5.0.19/common/lib(记得拷贝到这个目录下不是必须的)目录下。然后再重复前面的验证过程,直到页面上出现图35所示的内容。

 

 

第四节  开发Web Services

AXIS安装成功之后,你就可以开始开发自己的Web Services了。在NetBeans中开发Web Services其实十分简单,它就是一个建立JAVABEAN的过程。换句话说,原则上每一个你编写的JAVABEAN都可以作为一个Web Services。关于在NetBeans中编写JAVABEAN中的方法请参考第三章第三节的内容。

第五节  发布Web Services

要发布Web Services首先要编写WSDD文件。有些开发工具可以帮助我们,在这里我介绍如何手工发布Web Services。手工发布有三种方法。

第一种:将你的JAVABEAN拷贝到TOMCATwebapps目录下的axis目录下,然后你可以通过http://localhost:8080/axis/你的JAVABEAN的类名.jws来访问。哈哈,你的一个Web Services发布成功。不过有一点需要注意,JWS Web Services只能发布简单的Web Services,你不可以在这个Web Services中包含包信息,并且JWS Web Services是运行时编译的,所以编译错误要在运行时才能发现。

第二种:按照AXIS帮助文档中介绍的手工定制方法发布,它要求为每个需要发布成Web ServicesJAVABEAN编写一个deploy.wsdd文件,并将这个文件放置在JAVABEAN的同级目录下。deploy.wsdd文件的简单格式如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="服务名" provider="java:RPC">

        <parameter name="className" value="对应的完整类名(包括包信息)"/>

        <parameter name="allowedMethods" value="*"/>

    </service>

</deployment>

你可以参考这个编写你自己的deploy.wsdd文件。然后,你需要使用下面的方法向AXIS服务器进行分发,首先在DOS命令下进入需要发布的JAVABEAN所在目录,然后使用如下命令进行发布:

java org.apache.axis.client.AdminClient deploy.wsdd

当你看到DOS命令窗口中出现Done processing字样时,表示已经发布成功。不过这个官方方法我没有发布成过,具体原因我也不明白,如果哪位知道还请告诉我。

第三种:使用server-config.wsdd文件进行发布(我喜欢这种方法,方便快捷)。首先这个文件必须放置在你需要发布站点的WEB-INF目录下。这个文件从哪里获得呢?如果你已经成安装了AXIS系统并测试通过,这时你可以在你的TOMCAT目录下的work/Catalina/localhost/axis/loader/org/apache/axis/server目录下找到它,然后你拷贝它到你需要发布的站点的WEB-INF目录下。最后你可以使用记事本程序打开这个文件,在这个文件中查找“<service name=”字符串,然后你可以看到有两个这样的XML节点,现在你可以按照它们的样式编写自己的配置了。下面我对它的格式做个简单介绍:

<service name="服务名" provider="java:RPC">

  <parameter name="allowedMethods" value="*"/>

  <operation name="方法名" returnType="方法返回数据类型"/>

  <operation name="方法名" returnType="方法返回数据类型">

        <parameter name="参数名" type="参数的数据类型" mode="参数的模式"/>

  </operation>

  <parameter name="className" value="对应的JAVABEAN的类名(包含包信息)"/>

 </service>

大家看上面列出来的格式应该可以明白一二了,这里我重点讲解几个要点。

1、在“<parameter name="allowedMethods" value="*"/>”这一段用于表明这个JAVABEAN中的所有方法(这些方法一定是JAVABEANPUBLIC类型的)都公开成为服务的方法,使其它应用程序可以调用这些方法。如果用户不希望公开所有JAVABEAN中的方法,可以在这里指定需要公开的方法,方法是修改value的值,将需要公开的函数名列举在这里,每个方法之间使用“,”分隔。举个例子来说明,比如我需要公开这个JAVABEAN中的saygetEmplNosetEmplNorun方法,则它的写法为“<parameter name="allowedMethods" value="say,getEmplNo,setEmplNo,run"/>”。

2、“operation”节点用于对方法进行描述,如果方法没有参数则只要写成“<operation name="方法名" returnType="方法返回数据类型"/>”;如果方法有一个参数则写成如下形式:

<operation name="方法名" returnType="方法返回数据类型">

        <parameter name="参数名" type="参数的数据类型" mode="参数的模式"/>

</operation>

如果方法有多个参数则要注意参数描述的顺序必须和方法中定义的参数的顺序和数据类型相同。

3、数据类型的描述方法。谈到数据类型的描述你就需要注意你的server-config.wsdd文件开头的定义:

<deployment name="defaultClientConfig"

            xmlns="http://xml.apache.org/axis/wsdd/"

            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"

            xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler">

大家注意到没有,在这儿有这么一段文字xmlns:java="http://xml.apache.org/axis/wsdd/providers/java",这段文字就是告诉你在使用数据类型描述时要使用JAVA的数据类型。你可以这样写返回类型为String的定义<operation name="方法名" returnType="java:String"/>,你也可以写成<operation name="方法名" returnType="xsd:string"/>但最好要在deployment元素中定义xmlns:xsd="http://www.w3.org/2001/XMLSchema"

当然,在WSDD中还有其它的元素可以定义,具体可以参考http://www.osmoticweb.com/axis-wsdd/网站。

在你定义好WSDD文件后,你就可以启动TOMCAT,然后,我们来做个检验,在IE中键入

http://localhost:8090/你的站点名/services/服务名?wsdl,如果返回同图36相似的界面就表示你的Web Services发布成功了。

第六节  使用Java调用Web Services

我在这里使用一个简单JSP页面来调用Web Services。我先给出代码:

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<%@page  import="org.apache.axis.client.Call,org.apache.axis.client.Service"%>

<%@page  import="org.apache.axis.encoding.XMLType,org.apache.axis.utils.Options"%>

<%@page  import="javax.xml.rpc.ParameterMode,javax.xml.namespace.QName"%>

<html>

<head><title>JSP Page</title></head>

<body>

<%

String endpoint = "http://localhost:8090/WEBServicesTest/services/HelloWorld";//这里为你的WEB SERVICES的访问路径;

String method = "hello";

Object[] param=null;

String myFund="";

 

 

try{

    Service service = new Service();

    Call call = (Call) service.createCall();

 

 

    call.setTargetEndpointAddress(new java.net.URL(endpoint));

 

 

    call.setOperationName(method);

 

 

    myFund = (String) call.invoke(param);

}

catch(Exception e){

    myFund=e.getMessage();

}

%>

<%=myFund%>

</body>

</html>

这个代码不是很复杂,相信大家都能够自己看懂,所以我在此不在讲解。在JSP中调用Webservice的关键是要引入六个包文件——org.apache.axis.client.Callorg.apache.axis.client.Serviceorg.apache.axis.encoding.XMLTypeorg.apache.axis.utils.Optionsjavax.xml.rpc.ParameterModejavax.xml.namespace.Qname。其它代码可以参考相关文档。在下载的AXIS安装包中的doc目录下的apidoc目录下都有相关帮助文档。

第七节  使用异构系统调用Web Services

Web Services在很多情况下是被异构系统调用的,这些系统有些使用VB开发,有些使用DELPHI开发,有些使用VC开发,而有些使用PB开发,总之它可能是任何语言开发的。这些异构系统的应用万变不离其中,都有相通性。下面我以VB为例讲解在异构系统中如何调用JAVA编写的Web Services

VB中调用Web Services的实现方法很多,我只介绍其中一种。首先,去下载PocketSOAPSDK,下载地址是http://www.pocketsoap.com/pocketsoap/。为什么我们使用PocketSOAP而不使用微软的SOAP TOOL KIT 3.0呢?哈哈,我告诉你,微软的SOAPSDK调用JAVA编写的Web Services会报告错误,不知到这是BUG呢还是不兼容,总之用不了。当你下载完成PocketSOAP后运行安装它。然后启动VB

在一个按钮事件中写入以下代码

'创建pocketSOAP.Envelope对象

Dim env

    Set env = CreateObject("pocketSOAP.Envelope.11")

   

    ' 设置方法名和方法名的命名空间

    env.SetMethod "hello", "http://localhost:8090/WEBServicesTest/services/HelloWorld"

   

    ' 创建函数使用的参数

    env.Parameters.Create "name", "Web Services"

   

    ' 创建pocketSOAP.HTTPTransport对象用于发送SOAP请求

    Dim http

    Set http = CreateObject("pocketSOAP.HTTPTransport")

   

    ' 设置SOAPAction

    http.SoapAction = "http://localhost:8090/WEBServicesTest/services/HelloWorld#hello"

    ' 发送HTTP 请求

    http.send "http://localhost:8090/WEBServicesTest/services/HelloWorld", env

   

    ' 解析SOAP的返回信息

    env.parse http

   

    MsgBox "结果为: " & env.Parameters.Item(0).Value

然后运行此程序,哈哈,结果返回了。现在看看是不是使用SOAPSDK开发很简单,呵呵,本来就简单。好了,你现在可以写个自己的Web Services来做测试了。

 

 

关于使用NetBeans开发B/S结构的商业应用我就讲解到这里,由于本人的知识有限,在文章中可能会有一些错误,还请各位多多指正。本人的联系方式email:zhaowenbinmail@163.com。这篇文章适合于刚刚入门使用NETBEANS开发的JAVA程序员。最后希望本文章对大家有帮助。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页