四、handler的作用及特性

Axis中有一个basicHandler的抽象类,这个类可以供我们继承。可以完成很多复杂的功能,如:统计当前服务被调用的次数、验证服务调用信息等待

1、下面我们继承这个类,完成统计服务调用次数的功能;

RequestHandler代码如下:

 

代码
 
   
package com.hoo.service.handler;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

/**
* <b>function:</b>继承抽象类BasicHandler完成服务的调用统计功能
*
@author hoojo
* @createDate Dec 15, 2010 11:00:20 PM
* @file RequestHandler.java
* @package com.hoo.service.handler
* @project AxisWebService
* @blog
http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
*
@version 1.0
*/
public class RequestHandler extends BasicHandler {

private static final long serialVersionUID = 2128841024713159133L ;
private static long COUNT = 0L ;
private static int REQUEST_COUNT = 0 ;

public void invoke(MessageContext msgContext) throws AxisFault {
/**
* MessageContext相当于当前Services的一个上下文,
* 里面存储的是当前服务和调用的一些信息
*/
COUNT
++ ;
REQUEST_COUNT
++ ;
String state
= (String) this .getOption( " state " );
System.out.println(
" state: " + state + " , count: " + COUNT + " , requestCount: " + REQUEST_COUNT);
}
}

 

 

 

BasicHandler是一个抽象类,继承这个类需要实现invoke签名方法,上面的代码很简单,就是一个累加统计,MessageContext是当前WebService的一个上下文,可以得到当前服务的公共信息和请求信息。这里的this.getOption("state");是和wsdd中的parameter对应的。

 

2、编写wsdd文件,加入RequestHandler配置信息,wsdd配置如下:

deployHandler.wsdd:

 

代码
 
   
<? xml version="1.0" encoding="UTF-8" ?>
< deployment xmlns ="http://xml.apache.org/axis/wsdd/"
xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java" >
< handler name ="RequestHandler" type ="java:com.hoo.service.handler.RequestHandler" >
< parameter name ="state" value ="success" />
</ handler >
< service name ="HelloWorldWSDDHandler" provider ="java:RPC" >
< requestFlow >
< handler type ="RequestHandler" />
</ requestFlow >
< parameter name ="className" value ="com.hoo.service.HelloWorldWSDD" />
<!-- * 代表所有的方法都暴露 -->
< parameter name ="allowedMethods" value ="*" />
< parameter name ="scope" value ="request" />
< responseFlow >
< handler type ="RequestHandler" />
</ responseFlow >
</ service >
</ deployment >

 

 

handler元素配置的就是在上面编写的RequestHandler,type就是classpath;里面的parameter和上面RequestHandler中的this.getOption(“state”)的对应。

service元素中的requestFlow handler是请求的时候调用的handler、responsHandler是响应的时候调用的handler。

 

3、发布当前WebService,和前面的一样运行命令行:

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployHandler.wsdd

看到下面的就表示执行成功

Processing file undeploy.wsdd

<Admin>Done processing</Admin>

然后在浏览器中请求:

http://localhost:8080/AxisWebService/servlet/AxisServlet

就可以看到发布的服务,下面编写客户端代码

 

4、客户端和上面HelloWorldWSDDClient一样,这里就不写了。

调用后可以看到服务器端的控制台输出:

state: success, count: 5, requestCount: 5

state: success, count: 6, requestCount: 6

state: success, count: 7, requestCount: 7

state: success, count: 8, requestCount: 8

why? 为什么是4次?首先请求的时候执行一次handler,响应执行一次。然后调用2个方法,那就响应了2次,所以是4次。可以注销一个方法看看是不是少了2次,state是配置文件中的消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值