zoukankan      html  css  js  c++  java
  • 五、Chain链的作用

    Chain是一个链,是Handler的链。也就是说一次请求可能要执行多个Handler。

    1、下面我们就编写一个Handler,让它用chain的方法执行。

    代码
    package com.hoo.service.chain;

    import org.apache.axis.SimpleChain;
    import com.hoo.service.handler.RequestHandler;
    import com.hoo.service.handler.ResponseHandler;

    /**
    * <b>function:</b>用chain实现调用多个handler
    *
    @author hoojo
    * @createDate Dec 15, 2010 11:25:27 PM
    * @file HandlerChain.java
    * @package com.hoo.service.chain
    * @project AxisWebService
    * @blog
    http://blog.csdn.net/IBM_hoojo
    * @email hoojo_@126.com
    *
    @version 1.0
    */
    public class HandlerChain extends SimpleChain {

    private static final long serialVersionUID = 1226195692055911394L;

    public HandlerChain() {
    RequestHandler request
    = new RequestHandler();
    ResponseHandler response
    = new ResponseHandler();

    this.addHandler(request);
    this.addHandler(response);
    }
    }

    上面的HandlerChain继承了SimpleChain,在构造器中创建了RequestHandler、ResponseHandler,然后用addHandler添加到chain的handler中。特别说明下,这里的chain其实也是一个handler,为什么这样说?我们继承的SimpleChain就继承了BsaicHandler这个抽象类,所以chain也是一个handler。有人想既然是handler那它的配置也应该和handler差不多,没错chain的配置可以引用handler的配置。

    2、配置chain的wsdd文件

    先看配置方式1:

    代码
    <?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">
    <chain name="HandlerChain">
    <handler type="java:com.hoo.service.chain.HandlerChain"/>
    </chain>

    <service name="HelloWorldWSDDHandlerChain" provider="java:RPC">
    <requestFlow>
    <chain type="HandlerChain"/>
    </requestFlow>
    <parameter name="className" value="com.hoo.service.HelloWorldWSDD" />
    <parameter name="allowedMethods" value="*" />
    <parameter name="scope" value="request" />
    </service>
    </deployment>

    在chain元素中配置了一个handler标签,这个标签的type就是classpath类路径,然后在requestFlow标签中配置chain元素标签,用type引用上面的chain即可。

    配置方式2:

    代码
    <?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="hchain" type="java:com.hoo.service.chain.HandlerChain"/>

    <chain name="handlerChain">
    <handler type="hchain"/>
    </chain>

    <service name="HelloWorldWSDDHandlerChain2" provider="java:RPC">
    <parameter name="className" value="com.hoo.service.HelloWorldWSDD" />
    <parameter name="allowedMethods" value="*" />
    <parameter name="scope" value="request" />
    <responseFlow>
    <chain type="handlerChain"/>
    </responseFlow>
    </service>
    </deployment>

    上面先配置了handler,刚才说过chain也是一种特别的handler。所以用handler标签配置chain,然后在chain标签中用handler的type引用hchain,最好在responseFlow标签中用chain引用上面配置好的chain。

    注意:chain标签中只能配置handler、chain这2种元素,chain里面可以嵌套配置chain;

    3、发布wsdd配置过chain的WebService

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

    在浏览器中请求:http://localhost:8080/AxisWebService/servlet/AxisServlet

    就可以看到发布的服务了。

    4、编写客户端代码,请求刚才发布的WebService。客户端的代码和上面的HelloWorldWSDDClient几乎引用,只是请求的服务换成刚才我们发布的那个服务路径就可以了。运行后服务器端控制台效果如下:

    state: null, count: 1, requestCount: 1

    state: null, count: 1, RESPONSE_COUNT: 1

    state: null, count: 2, requestCount: 2

    state: null, count: 2, RESPONSE_COUNT: 2

  • 作者:hoojo
    出处:
    blog:http://blog.csdn.net/IBM_hoojo
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权所有,转载请注明出处 本文出自:
分享道版权所有,欢迎转载,转载请注明出处,谢谢
收藏
关注
评论
查看全文
  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/hoojo/p/1911375.html
  • Copyright © 2011-2022 走看看