瀹炵幇鎷︽埅鍔熻兘鐨勭被鏈夛細
涓銆丮ainInteceptor錛屼富鎷︽埅鍣紝鎵浠WR鐨勮繙紼嬭皟鐢ㄩ兘浼氳鎷︽埅錛屽綋鐒訛紝 璋冪敤鏄粏鍒版柟娉曠駭鐨勶紝鍙厤緗殑錛岃綾誨疄鐜頒簡Spring AOP鐨凪ethodBeforeAdvice鎺ュ彛錛岃綾繪湁涓涓泦鍚堟垚鍛樺彉閲忥紝鎴愬憳涓篒Inteceptor銆?/font>
浜屻両Inteceptor錛屾槸涓涓帴鍙o紝浠呮湁涓涓猠xecute(AopContext context)鍑芥暟銆傝鎺ュ彛鏄嫤鎴櫒錛堜笌鍓嶉潰鐨勪富鎷︽埅鍣ㄤ笉鍚岋紝鏈帴鍙e畾涔夌殑鎷︽埅鍣ㄦ槸鍙互鐢辯敤鎴峰幓瀹炵幇錛屽茍涓斿彲浠ユ湁澶氫釜錛夈傚疄鐜版帴鍙e彧闇瑕佸疄鐜版柟娉曘傝繖浜?鎷︽埅鍣ㄤ細琚富鎷︽埅鍣ㄥ洖璋冦?姣斿瑕佸疄鐜頒竴涓韓浠介獙璇佺殑鎷︽埅錛孲ecuityInteceptor錛屽湪閰嶇疆鏂囦歡涓妸榪欎釜鎷︽埅鍣ㄨ緗負涓繪嫤鎴櫒鐨勫睘鎬у嵆鍙幏寰楀洖璋冦?/font>
涓夈丄opContext錛孉op涓婁笅鏂囥傚湪涓繪嫤鎴櫒璋冪敤IInteceptor鐨勫璞℃椂錛屾妸榪欎釜涓婁笅鏂囧璞′綔涓哄弬鏁版潵璋冪敤瀛愭嫤鎴櫒銆備粠璇ヤ笂涓嬫枃鍙幏寰椾竴緋誨垪淇℃伅錛屽HttpSession錛孒ttpRequest絳夈傜敋鑷充綘鍙互鑷凡璁劇疆灞炴с?nbsp;
涓嬮潰鐪嬩竴浜涗唬鐮佺墖鏂?
MainInteceptor:
private List<IInterceptor> interceptors;//瀹氫箟涓緋誨垪鐨勫瓙鎷︽埅鍣?/font>
public void setInterceptors(List<IInterceptor> interceptors) {
this.interceptors = interceptors;
}
鍦╞efore(Method method, Object[] params, Object target)鏂規硶閲岋細
WebContext ctx = WebContextFactory.get();//鍞竴琚獶WR姹℃煋鐨勫湴鏂?br /> HttpSession session = ctx.getSession();
AopContext context = new AopContext(); context.setSession(session);
for(Iterator it = interceptors.iterator(); it.hasNext();){
IInterceptor interceptor = (IInterceptor) it.next();
interceptor.execute(context);
}
IInterceptor錛?/font>
public interface IInterceptor {
public void execute(AopContext context);
}
AopContext灝變笉蹇呰創鍑烘潵浜嗭紝 闅忚嚜宸插畾涔変簺浠涔堝睘鎬э紝涓嶈繃灝卞唴緗簡涓涓狹ap錛岀敤鏉ヤ繚瀛樻暟鎹艦浜嗐?/font>
涓嬮潰鏉ョ湅鐪嬮厤緗枃浠訛細
<beans>
<!--灝嗚鏆撮湶緇橠WR鐨凷ervice-->
<bean id="bookManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>net.jf.ajax.business.BookManager</value>
</property>
<property name="target">
<ref local="bookManagerImpl"/>
</property>
<property name="interceptorNames">
<list>
<value>dwrAdvisor</value>
</list>
</property>
</bean>
<bean id="bookManagerImpl" class="net.jf.ajax.business.impl.BookManagerImpl"/>
<!--瑁呴厤鍣紵濡傛灉鐪嬩笉鎳傦紝鍏堢湅鐪婼pring鐨凙op鍚?錛歅-->
<bean id="dwrAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="dwrInterceptor"/>
</property>
<property name="patterns">
<list>
<value>.*.*</value>
</list>
</property>
</bean>
<!--涓繪嫤鎴櫒錛岀粰瀹冭緗瓙鎷︽埅鍣?->
<bean id="dwrInterceptor" class="net.jf.ajax.iterceptor.MainInterceptor">
<property name="interceptors">
<list>
<ref bean="test"/>
</list>
</property>
</bean>
<!--鍏朵腑涓涓瓙鎷︽埅鍣ㄧ殑瀹炵幇-->
<bean id="test" class="net.jf.ajax.iterceptor.TestInterceptor"/>
</beans>
灝?榪欐牱錛屽湪閰嶇疆DWR鐨勯厤緗枃浠舵椂錛岄厤緗?lt;creator>鏃朵嬌鐢⊿pring鐨凜reator灝卞彲浠ョ洿鎺ヤ嬌鐢ㄤ笂闈㈢殑Service浜嗐傚綋 DWR榪滅▼璇鋒眰鏃訛紝鍦ㄩ厤緗寖鍥村唴鐨勬柟娉曠殑璋冪敤閮戒細琚富鎷︽埅鍣ㄦ嫤鎴紝騫朵笖閬嶅巻銆佹墽琛屾墍鏈夊瓙鎷︽埅鍣ㄣ傚師鏈夌殑Service涓嶉渶瑕佹敼鍔紝鍙渶瑕佸鍔犱竴涓?Spring鐨勯厤緗枃浠訛紝灝嗗師鏈夌殑Service鍐嶅姞涓灞侫op鐨勮交綰便?/font>
榪欐槸涓縐嶅疄鐜版柟娉曘傚鏋滄湁鍒殑鏂規硶璁〥WR鏇村畨鍏ㄣ佹湁鏁堬紝璇蜂竴瀹氬憡鐭ャ傦細錛?
鍋氭硶鏄湪鏈嶅姟閲屽畾涔夋柟娉曠殑鏃跺欙紝鎶婁互涓婄殑鍏冪礌浣滀負鍙傛暟銆傚湪鏂規硶浣撳唴鐩存帴浣跨敤鍗沖彲銆傝屼笉蹇呮媴蹇冨畠鐨勬潵婧愶紝鏉ユ簮鏄疍WR浼氳嚜宸叉牴鎹弬鏁扮殑綾誨瀷娉ㄥ叆銆傚湪瀹㈡埛绔皟 鐢ㄧ殑鏃跺欎笉闇瑕佹彁渚涜繖涓弬鏁般係ervletContext涔嬬被鐨勪笢瑗夸綔涓篢hreadLocal鐨勫彉閲忎繚瀛樿搗鏉ョ殑銆傜畝鍗曠殑紺轟緥銆?/p>
1銆佹湇鍔′唬鐮?nbsp;
package net.jf.ajax.session;
import javax.servlet.http.HttpSession;
public class Store {
public void setAttribute(String name,String value,HttpSession session){
session.setAttribute(name,value);
}
public String getAttribute(String name,HttpSession session){
return (String) session.getAttribute(name);
}
}
2銆乻pring閰嶇疆鏂囦歡
<beans>
<bean id="store" class="net.jf.ajax.session.Store">
</bean>
</beans>
3銆乨wr.xml
<dwr>
<allow>
<create creator="spring" javascript="store">
<param name="beanName" value="store"/>
</create>
</allow>
</dwr>
浠?涓婄殑浠g爜鍙婇厤緗枃浠跺彲浠ヨ揪鍒扮洰鐨勶細DWR涓嶴pring緇撳悎錛孌WR鐩存帴浣跨敤Spring綆$悊鐨凚ean浣滀負鏈嶅姟錛屽綋鐒訛紝鍙桽pring綆$悊鐨凚ean鍔?鑳戒竴鐐歸兘涓嶅噺錛屽鏉傜殑濡傛湁鐫浜嬪姟綆$悊鐨凚ean鍚屾牱鏈夌敤銆?鑰屼笖灝界鏄疭pring綆$悊鐨凚ean錛屾柟娉曠殑鍙傛暟涓湁Servlet鐩稿叧鐨勫弬鏁幫紝DWR鍚屾牱鑷姩娉ㄥ叆銆?/font>
鐜板湪鍘昏皟璇曢〉闈㈢湅鐪嬫垜浠毚闇茬殑鎺ュ彛鍙婃晥鏋滃浣曪紒鍦ㄨ皟璇曢〉闈㈡壘鍒皊tore鐨勬湇鍔★紝鐐瑰嚮榪涘幓錛屽彲浠ヨ鍒版毚闇茬殑鏂規硶鏈変袱涓細
涓涓槸SetAttribute("","",AUTO)錛岀涓変釜鍙傛暟琛ㄦ槑鑷姩娉ㄥ叆錛屽鎴風鍙渶瑕佹彁渚涘墠涓や釜鍙傛暟鍗沖彲銆?/font>
涓涓槸GetAttribute錛?ldquo;”錛孉UTO錛夛紝絎簩涓弬鏁拌〃鏄庤嚜鍔ㄦ敞鍏ワ紝瀹㈡埛鍙渶瑕佹彁渚涗竴涓悕瀛楀弬鏁板彇鍊煎嵆鍙?/font>
鍦ㄦ祴璇曢〉闈㈡彁渚涚殑杈撳叆妗嗕腑嫻嬭瘯涓や釜鍑芥暟錛孲etAttribute濉叆name,jeff鎻愪氦鎴愬姛錛屽湪GetAttribute鍑芥暟涓~鍏ame鑾峰緱涓涓繑鍥炲鹼紝姝f槸jeff銆傝嚦姝わ紝灝濊瘯鎴愬姛錛?