五、Chain链的作用
Chain是一個(gè)鏈,是Handler的鏈。也就是說(shuō)一次請(qǐng)求可能要執(zhí)行多個(gè)Handler。
1、下面我們就編寫一個(gè)Handler,讓它用chain的方法執(zhí)行。
?
代碼 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實(shí)現(xiàn)調(diào)用多個(gè)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,在構(gòu)造器中創(chuàng)建了RequestHandler、ResponseHandler,然后用addHandler添加到chain的handler中。特別說(shuō)明下,這里的chain其實(shí)也是一個(gè)handler,為什么這樣說(shuō)?我們繼承的SimpleChain就繼承了BsaicHandler這個(gè)抽象類,所以chain也是一個(gè)handler。有人想既然是handler那它的配置也應(yīng)該和handler差不多,沒(méi)錯(cuò)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元素中配置了一個(gè)handler標(biāo)簽,這個(gè)標(biāo)簽的type就是classpath類路徑,然后在requestFlow標(biāo)簽中配置chain元素標(biāo)簽,用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,剛才說(shuō)過(guò)chain也是一種特別的handler。所以用handler標(biāo)簽配置chain,然后在chain標(biāo)簽中用handler的type引用hchain,最好在responseFlow標(biāo)簽中用chain引用上面配置好的chain。
注意:chain標(biāo)簽中只能配置handler、chain這2種元素,chain里面可以嵌套配置chain;
?
3、發(fā)布wsdd配置過(guò)chain的WebService
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployChain.wsdd
在瀏覽器中請(qǐng)求:http://localhost:8080/AxisWebService/servlet/AxisServlet
就可以看到發(fā)布的服務(wù)了。
?
4、編寫客戶端代碼,請(qǐng)求剛才發(fā)布的WebService。客戶端的代碼和上面的HelloWorldWSDDClient幾乎引用,只是請(qǐng)求的服務(wù)換成剛才我們發(fā)布的那個(gè)服務(wù)路徑就可以了。運(yùn)行后服務(wù)器端控制臺(tái)效果如下:
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
轉(zhuǎn)載于:https://www.cnblogs.com/hoojo/archive/2010/12/20/1911375.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的五、Chain链的作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET系列 之 开源和不开源的背后
- 下一篇: 朋友帮忙写的代码