• 五、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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权所有,转载请注明出处 本文出自:
分享道版权所有,欢迎转载,转载请注明出处,谢谢
收藏
关注
评论
  • 相关阅读:
    IEnumerable和IQueryable的区别
    最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂去吃翔
    JSON遍历方法
    将Sublime Text 2搭建成一个好用的IDE
    Linux入门教程
    apache如何配置默认的根目录
    Web移动端Fixed布局的解决方案
    node-创建模块
    关于文字内容溢出用点点点(…)省略号表示
    JavaScript设计模式与开发实践 | this、call和apply
  • 原文地址:https://www.cnblogs.com/hoojo/p/1911375.html
  • Copyright © 2020-2023  润新知