Xml代码
requst:这个选项会让AXIS为每一个SOAP的请求产生一个服务对象,可以想像如果这个webservice的对象足够复杂,而且SOAP的请求过多,这个选项是非常耗费服务器性能的。 session:如果选择了session,程序就会给每个调用这个webservice的客户端创造一个服务对象。 application:这个选项最彪悍,程序只会在内存里new出来一个服务对象,然后为所有webservice客户端服务。很显然这个选项不能储存客户端的一些个性化数据。所以在功能性上很多时候不能满足要求。 3、高级特性Handler 接下来说一下Axis的Handler和Chain机制,Handler和Chain是Axis引擎提供的一个很强大的工具。假如现在客户有这样一个需求,需要记录某一个webservice被调用的次数,这个时候如果在service object里去实现这个功能不仅麻烦,而且侵入了原有的程序也会对增加原有程序的不稳定性。有了Handler我们就能见easy的解决这个问题。我们先来编写handler的代码。 Java代码 package com.chnic.handler; import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; public class HelloWorldHandler extends BasicHandler{ private static final long serialVersionUID = 1L; public void invoke(MessageContext context) throws AxisFault { String status = (String) this.getOption(\ System.out.println(\ } } package com.chnic.handler; import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; public class HelloWorldHandler extends BasicHandler{ private static final long serialVersionUID = 1L; public void invoke(MessageContext context) throws AxisFault { String status = (String) this.getOption(\ System.out.println(\ } } BasicHandler是一个抽象类,Axis提供了很多Handler的具体实现,BasicHandler只是其中最简单的一个。要实现一个自己的handler首先要从继承BasicHandler这个类开始并实现其中的invoke(MessageContext arg)这个方法。MessageContext可以看成是一个Axis的上下文,里面存储的是一些Axis和webservice的基本信息。想了解的朋友可以看一下Axis的API。编写完Handler代码之后我们连编写发布文件。 Xml代码 xmlns:java=\ 发布代码中有这样的一句,细心的朋友一定会发现。 Xml代码 String status = (String) this.getOption(\ String status = (String) this.getOption(\通过getOption(String)这个方法拿到了配置文件中我配置的属性值。而我们上述所做的所有工作对于原来的Webserivce来说都是透明的,不会对侵入原有的程序当中。 一个Handler可以被多个service所使用,通过 4、高级特性Chain 介绍完了Handler再来介绍Chain。从Chain的字面意思就能猜到他实现的一连串Handler的功能。假如某个service需要不止一个Handler,或者要根据Client的情况来选择需要那些Handler。特别是后一个需求,我们无法用一个或者几个Handler来解决,这个时候我们就需要 Java代码 package com.chnic.handler; import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; public class MyHandler extends BasicHandler { private static final long serialVersionUID = 1L; public void invoke(MessageContext context) throws AxisFault { System.out.println(\ } } 之后我们编写Chain的代码 Java代码 package com.chnic.chain; import org.apache.axis.SimpleChain; import com.chnic.handler.HelloWorldHandler; import com.chnic.handler.MyHandler; public class HelloWorldChain extends SimpleChain { private static final long serialVersionUID = 1L; public HelloWorldChain(){ HelloWorldHandler hwh = new HelloWorldHandler(); MyHandler mh = new MyHandler(); this.addHandler(hwh); this.addHandler(mh); } } 在Chain的构造函数中,把我要的两个Handler用addHandler()方法加载进去。之后我们来编写发布文件。 Xml代码 第二种是引用别的 因为我们这里的Handler并没有由BasicHandler来实现,而是由继承SimpleChain这个类来实现,严格意义上讲,SimpleChain也可以算是一个Handler,因为SimpleChain也是从BasicHandler继承而来,他同样实现了invoke()这个方法。下面回归正题,来看我们的发布代码。 Xml代码 xmlns:java=\ 从新发布webservice之后,运行我们的测试代码。会发现在应用服务器的本地控制台上打出两句Handler要输出的语句,说明测试成功。而且控制台打出语句的顺序是和我们加载handler的顺序一样的。 除了 Xml代码 最后简单提一下远程管理,也就是Remote Administration。要实现远程管理在发布文件的 Xml代码 一些高级部分就先说到这里,还有一些比如RPC docuement Wrapped Message的区别和使,如何传递一个Javabean,还有一些配置方面的的问题就留到下节说吧。
axis+webservice教程
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)