锘??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产亚洲一区二区三区在线观看,国产精品久久久久久亚洲影视,亚洲国产成人片在线观看无码http://m.tkk7.com/fantasy/category/38008.htmlWeb 2.0 鎶鏈偍澶?...........zh-cnMon, 02 Mar 2009 13:53:32 GMTMon, 02 Mar 2009 13:53:32 GMT60(杞?鎷︽埅鍣ㄦ繁鍏ュ疄璺?/title><link>http://m.tkk7.com/fantasy/articles/257349.html</link><dc:creator>Web 2.0 鎶鏈祫婧?/dc:creator><author>Web 2.0 鎶鏈祫婧?/author><pubDate>Mon, 02 Mar 2009 07:24:00 GMT</pubDate><guid>http://m.tkk7.com/fantasy/articles/257349.html</guid><wfw:comment>http://m.tkk7.com/fantasy/comments/257349.html</wfw:comment><comments>http://m.tkk7.com/fantasy/articles/257349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/fantasy/comments/commentRss/257349.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/fantasy/services/trackbacks/257349.html</trackback:ping><description><![CDATA[<div id="55vxb3z" class="content"><a >杞嚜錛歨ttp://www.javaeye.com/wiki/struts2/1397-deep-into-struts2-interceptors#top</a><br /> <br /> 鍦ㄤ箣鍓嶇殑鏂囩珷涓紝鎴戜滑宸茬粡娑夊強鍒頒簡鎷︽埅鍣紙Interceptor錛夌殑姒傚康銆?<br /> <br /> <div id="3fj35fp" class="quote_title">downpour 鍐欓亾</div> <div id="d3z35tp" class="quote_div">鎷︽埅鍣ㄦ槸AOP涓殑姒傚康錛屽畠鏈韓鏄竴孌典唬鐮侊紝鍙互閫氳繃瀹氫箟“緇囧叆鐐?#8221;錛屾潵鎸囧畾鎷︽埅鍣ㄧ殑浠g爜鍦?#8220;緇囧叆鐐?#8221;鐨勫墠鍚庢墽琛岋紝浠庤岃搗鍒版嫤鎴殑浣滅敤銆傛濡備笂闈?Struts2鐨凴eference涓榪扮殑錛孲truts2鐨処nterceptor錛屽叾鎷︽埅鐨勫璞℃槸Action浠g爜錛屽彲浠ュ畾涔夊湪Action浠g爜涔嬪墠鎴栬呬箣鍚庢墽琛屾嫤鎴櫒鐨勪唬鐮併?</div> <br /> <br /> 鎺ヤ笅鏉ワ紝鎴戜滑灝嗛噸鐐硅璁轟竴涓婼truts2涓殑鎷︽埅鍣ㄧ殑鍐呴儴緇撴瀯鍜屾墽琛岄『搴忥紝騫剁粨鍚堟簮鐮佽繘琛屽垎鏋愩?</div> <div class="vn5p5f5" id="wiki_menu"> <h4>鐩?褰?<a title="闅愯棌/鏄劇ず鐩綍" onclick="$$('#wiki_menu ol')[0].toggle();return false;" ><small>[ - ]</small></a></h4> <ol> <li><a >Interceptor緇撴瀯</a> <li><a >Interceptor鎵ц鍒嗘瀽</a> <li><a >婧愮爜瑙f瀽</a> </li> </ol> </div> <h2>Interceptor緇撴瀯 <a name="1678"><img alt="Top" src="http://www.javaeye.com/images/wiki/top.gif?1229402183" /></a> </h2> <div id="nrjplrx" class="content">璁╂垜浠啀鏉ュ洖欏句竴涓嬩箣鍓嶆垜浠浘緇忕敤榪囩殑涓寮燗ction LifeCycle鐨勫浘錛?<br /> <br /> <img alt="" src="http://www.javaeye.com/upload/attachment/68182/ae963ed3-fae7-3710-bfcf-2fc49942ee90.png" /> <br /> <br /> 鍥句腑錛屾垜浠彲浠ュ彂鐜幫紝Struts2鐨処nterceptor涓灞備竴灞傦紝鎶夾ction鍖呰9鍦ㄦ渶閲岄潰銆傝繖鏍風殑緇撴瀯錛屽ぇ姒傛湁浠ヤ笅涓浜涚壒鐐癸細 <br /> <br /> <strong>1. 鏁翠釜緇撴瀯灝卞鍚屼竴涓爢鏍堬紝闄や簡Action浠ュ錛屽爢鏍堜腑鐨勫叾浠栧厓绱犳槸Interceptor</strong> <br /> <br /> <strong>2. Action浣嶄簬鍫嗘爤鐨勫簳閮ㄣ傜敱浜庡爢鏍?鍏堣繘鍚庡嚭"鐨勭壒鎬э紝濡傛灉鎴戜滑璇曞浘鎶夾ction鎷垮嚭鏉ユ墽琛岋紝鎴戜滑蹇呴』棣栧厛鎶婁綅浜嶢ction涓婄鐨処nterceptor鎷垮嚭鏉ユ墽琛屻傝繖鏍鳳紝鏁翠釜鎵ц灝卞艦鎴愪簡涓涓掑綊璋冪敤</strong> <br /> <br /> <strong>3. 姣忎釜浣嶄簬鍫嗘爤涓殑Interceptor錛岄櫎浜嗛渶瑕佸畬鎴愬畠鑷韓鐨勯昏緫錛岃繕闇瑕佸畬鎴愪竴涓壒孌婄殑鎵ц鑱岃矗銆傝繖涓墽琛岃亴璐f湁3縐嶉夋嫨錛?<br /> <br /> <span style="color: blue">1) 涓鏁翠釜鎵ц錛岀洿鎺ヨ繑鍥炰竴涓瓧絎︿覆浣滀負resultCode</span> <br /> <br /> <span style="color: blue">2) 閫氳繃閫掑綊璋冪敤璐熻矗璋冪敤鍫嗘爤涓笅涓涓狪nterceptor鐨勬墽琛?/span> <br /> <br /> <span style="color: blue">3) 濡傛灉鍦ㄥ爢鏍堝唴宸茬粡涓嶅瓨鍦ㄤ換浣曠殑Interceptor錛岃皟鐢ˋction</span> <br /> </strong><br /> <br /> Struts2鐨勬嫤鎴櫒緇撴瀯鐨勮璁★紝瀹為檯涓婃槸涓涓吀鍨嬬殑<strong>璐d換閾炬ā寮?/strong>鐨勫簲鐢ㄣ傞鍏堝皢鏁翠釜鎵ц鍒掑垎鎴愯嫢騫茬浉鍚岀被鍨嬬殑鍏冪礌錛屾瘡涓厓绱犲叿澶囦笉鍚岀殑閫昏緫璐d換錛屽茍灝嗕粬浠撼鍏ュ埌涓涓摼寮忕殑鏁版嵁緇撴瀯涓紙鎴戜滑鍙互鎶婂爢鏍堢粨鏋勪篃鐪嬩綔鏄竴涓掑綊鐨勯摼寮忕粨鏋勶級錛岃屾瘡涓厓绱犲張鏈夎矗浠昏礋璐i摼寮忕粨鏋勪腑涓嬩竴涓厓绱犵殑鎵ц璋冪敤銆?<br /> <br /> 榪欐牱鐨勮璁★紝浠庝唬鐮侀噸鏋勭殑瑙掑害鏉ョ湅錛屽疄闄呬笂鏄皢涓涓鏉傜殑緋葷粺錛屽垎鑰屾不涔嬶紝浠庤屼嬌寰楁瘡涓儴鍒嗙殑閫昏緫鑳藉楂樺害閲嶇敤騫跺叿澶囬珮搴﹀彲鎵╁睍鎬с傛墍浠ワ紝Interceptor緇撴瀯瀹炲湪鏄疭truts2/Xwork璁捐涓殑綺懼崕涔嬬瑪銆?</div> <h2>Interceptor鎵ц鍒嗘瀽 <a name="1679"><img alt="Top" src="http://www.javaeye.com/images/wiki/top.gif?1229402183" /></a> </h2> <div id="3zfzvfx" class="content"><strong><span style="color: blue">Interceptor鐨勫畾涔?/span></strong> <br /> <br /> 鎴戜滑鏉ョ湅涓涓婭nterceptor鐨勬帴鍙g殑瀹氫箟錛?<br /> <br /> <div id="lvzbhzx" class="dp-highlighter"> <div id="zt3f5rj" class="bar"> <div id="d3n5hbj" class="tools">Java浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span id="33nlzhx" class="keyword">public</span><span> </span><span id="n3t355d" class="keyword">interface</span><span> Interceptor </span><span id="bhtfrzp" class="keyword">extends</span><span> Serializable {   </span></span> <li><span>  </span> <li><span>    </span><span id="z355xpv" class="comment">/** </span> </span> <li><span><span id="lzd3f5r" class="comment">     * Called to let an interceptor clean up any resources it has allocated. </span> </span> <li><span><span id="15pv5fn" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="xnjn555" class="keyword">void</span><span> destroy();   </span></span> <li><span>  </span> <li><span>    </span><span id="p3zlr5t" class="comment">/** </span> </span> <li><span><span id="lz3fx5p" class="comment">     * Called after an interceptor is created, but before any requests are processed using </span> </span> <li><span><span id="dvhbz1p" class="comment">     * {@link #intercept(com.opensymphony.xwork2.ActionInvocation) intercept} , giving </span> </span> <li><span><span id="p353xb3" class="comment">     * the Interceptor a chance to initialize any needed resources. </span> </span> <li><span><span id="xrnxb35" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="rb5h5x5" class="keyword">void</span><span> init();   </span></span> <li><span>  </span> <li><span>    </span><span id="xzbnz5r" class="comment">/** </span> </span> <li><span><span id="j55t5f5" class="comment">     * Allows the Interceptor to do some processing on the request before and/or after the rest of the processing of the </span> </span> <li><span><span id="nz3ntp3" class="comment">     * request by the {@link ActionInvocation} or to short-circuit the processing and just return a String return code. </span> </span> <li><span><span id="5rn55r5" class="comment">     * </span> </span> <li><span><span id="3zdht5l" class="comment">     * @return the return code, either returned from {@link ActionInvocation#invoke()}, or from the interceptor itself. </span> </span> <li><span><span id="jtnrn3d" class="comment">     * @throws Exception any system-level error, as defined in {@link com.opensymphony.xwork2.Action#execute()}. </span> </span> <li><span><span id="rlx3d5p" class="comment">     */</span><span>  </span></span> <li><span>    String intercept(ActionInvocation invocation) </span><span id="xzdxj55" class="keyword">throws</span><span> Exception;   </span></span> <li><span>}  </span> </li> </ol> </div> <pre class="java" style="display: none" name="code">public interface Interceptor extends Serializable { /** * Called to let an interceptor clean up any resources it has allocated. */ void destroy(); /** * Called after an interceptor is created, but before any requests are processed using * {@link #intercept(com.opensymphony.xwork2.ActionInvocation) intercept} , giving * the Interceptor a chance to initialize any needed resources. */ void init(); /** * Allows the Interceptor to do some processing on the request before and/or after the rest of the processing of the * request by the {@link ActionInvocation} or to short-circuit the processing and just return a String return code. * * @return the return code, either returned from {@link ActionInvocation#invoke()}, or from the interceptor itself. * @throws Exception any system-level error, as defined in {@link com.opensymphony.xwork2.Action#execute()}. */ String intercept(ActionInvocation invocation) throws Exception; } </pre> <br /> <br /> Interceptor鐨勬帴鍙e畾涔夋病鏈変粈涔堢壒鍒殑鍦版柟錛岄櫎浜唅nit鍜宒estory鏂規硶浠ュ錛宨ntercept鏂規硶鏄疄鐜版暣涓嫤鎴櫒鏈哄埗鐨勬牳蹇冩柟娉曘傝屽畠鎵渚濊禆鐨勫弬鏁癆ctionInvocation鍒欐槸鎴戜滑涔嬪墠绔犺妭涓浘緇忔彁鍒拌繃鐨勮憲鍚嶇殑<strong>Action璋冨害鑰?/strong>銆?<br /> <br /> 鎴戜滑鍐嶆潵鐪嬬湅涓涓吀鍨嬬殑Interceptor鐨勬娊璞″疄鐜扮被錛?<br /> <br /> <div id="jvzb3lx" class="dp-highlighter"> <div id="dxrv35z" class="bar"> <div id="z55x3v5" class="tools">Java浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span id="d5hjx5l" class="keyword">public</span><span> </span><span id="fpt3pj5" class="keyword">abstract</span><span> </span><span id="b3xl3j3" class="keyword">class</span><span> AroundInterceptor </span><span id="xxtn3x3" class="keyword">extends</span><span> AbstractInterceptor {   </span></span> <li><span>       </span> <li><span>    </span><span id="3tp3dd3" class="comment">/* (non-Javadoc) </span> </span> <li><span><span id="1drtpb1" class="comment">     * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) </span> </span> <li><span><span id="lf35d5h" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="ldxb3bf" class="annotation">@Override</span><span>  </span></span> <li><span>    </span><span id="1dptn5z" class="keyword">public</span><span> String intercept(ActionInvocation invocation) </span><span id="p553bbt" class="keyword">throws</span><span> Exception {   </span></span> <li><span>        String result = </span><span id="t55n3lx" class="keyword">null</span><span>;   </span></span> <li><span>  </span> <li><span>        before(invocation);   </span> <li><span>        </span><span id="fp3d55n" class="comment">// 璋冪敤涓嬩竴涓嫤鎴櫒錛屽鏋滄嫤鎴櫒涓嶅瓨鍦紝鍒欐墽琛孉ction </span><span>  </span></span> <li><span>        result = invocation.invoke();   </span> <li><span>        after(invocation, result);   </span> <li><span>  </span> <li><span>        </span><span id="dvlr79l" class="keyword">return</span><span> result;   </span></span> <li><span>    }   </span> <li><span>       </span> <li><span>    </span><span id="j7ndj3p" class="keyword">public</span><span> </span><span id="xxfvlvd" class="keyword">abstract</span><span> </span><span id="xx9bb1t" class="keyword">void</span><span> before(ActionInvocation invocation) </span><span id="tlltrrp" class="keyword">throws</span><span> Exception;   </span></span> <li><span>  </span> <li><span>    </span><span id="995x3px" class="keyword">public</span><span> </span><span id="7ndlt79" class="keyword">abstract</span><span> </span><span id="xhjzxpv" class="keyword">void</span><span> after(ActionInvocation invocation, String resultCode) </span><span id="rtbhph9" class="keyword">throws</span><span> Exception;   </span></span> <li><span>  </span> <li><span>}  </span> </li> </ol> </div> <pre class="java" style="display: none" name="code">public abstract class AroundInterceptor extends AbstractInterceptor { /* (non-Javadoc) * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) */ @Override public String intercept(ActionInvocation invocation) throws Exception { String result = null; before(invocation); // 璋冪敤涓嬩竴涓嫤鎴櫒錛屽鏋滄嫤鎴櫒涓嶅瓨鍦紝鍒欐墽琛孉ction result = invocation.invoke(); after(invocation, result); return result; } public abstract void before(ActionInvocation invocation) throws Exception; public abstract void after(ActionInvocation invocation, String resultCode) throws Exception; }</pre> <br /> <br /> 鍦ㄨ繖涓疄鐜扮被涓紝瀹為檯涓婂凡緇忓疄鐜頒簡鏈綆鍗曠殑鎷︽埅鍣ㄧ殑闆忓艦銆傛垨璁稿ぇ瀹跺榪欐牱鐨勪唬鐮佽繕姣旇緝闄岀敓錛岃繖娌℃湁鍏崇郴銆傛垜鍦ㄨ繖閲岄渶瑕佹寚鍑虹殑鏄竴涓緢閲嶈鐨勬柟娉昳nvocation.invoke()銆傝繖鏄疉ctionInvocation涓殑鏂規硶錛岃孉ctionInvocation鏄疉ction璋冨害鑰咃紝鎵浠ヨ繖涓柟娉曞叿澶囦互涓?灞傚惈涔夛細 <br /> <br /> <strong>1. 濡傛灉鎷︽埅鍣ㄥ爢鏍堜腑榪樻湁鍏朵粬鐨処nterceptor錛岄偅涔坕nvocation.invoke()灝嗚皟鐢ㄥ爢鏍堜腑涓嬩竴涓狪nterceptor鐨勬墽琛屻?/strong> <br /> <br /> <strong>2. 濡傛灉鎷︽埅鍣ㄥ爢鏍堜腑鍙湁Action浜嗭紝閭d箞invocation.invoke()灝嗚皟鐢ˋction鎵ц銆?/strong> <br /> <br /> 鎵浠ワ紝鎴戜滑鍙互鍙戠幇錛宨nvocation.invoke()榪欎釜鏂規硶鍏跺疄鏄暣涓嫤鎴櫒妗嗘灦鐨勫疄鐜版牳蹇冦傚熀浜庤繖鏍風殑瀹炵幇鏈哄埗錛屾垜浠繕鍙互寰楀埌涓嬮潰2涓潪甯擱噸瑕佺殑鎺ㄨ錛?<br /> <br /> <strong>1. 濡傛灉鍦ㄦ嫤鎴櫒涓紝鎴戜滑涓嶄嬌鐢╥nvocation.invoke()鏉ュ畬鎴愬爢鏍堜腑涓嬩竴涓厓绱犵殑璋冪敤錛岃屾槸鐩存帴榪斿洖涓涓瓧絎︿覆浣滀負鎵ц緇撴灉錛岄偅涔堟暣涓墽琛屽皢琚腑姝€?/strong> <br /> <br /> <strong>2. 鎴戜滑鍙互浠nvocation.invoke()涓虹晫錛屽皢鎷︽埅鍣ㄤ腑鐨勪唬鐮佸垎鎴?涓儴鍒嗭紝鍦╥nvocation.invoke()涔嬪墠鐨勪唬鐮侊紝灝嗕細鍦ˋction涔嬪墠琚緷嬈℃墽琛岋紝鑰屽湪invocation.invoke()涔嬪悗鐨勪唬鐮侊紝灝嗕細鍦ˋction涔嬪悗琚嗗簭鎵ц銆?/strong> <br /> <br /> 鐢辨錛屾垜浠氨鍙互閫氳繃invocation.invoke()浣滀負Action浠g爜鐪熸鐨勬嫤鎴偣錛屼粠鑰屽疄鐜癆OP銆?<br /> <br /> <strong><span style="color: blue">Interceptor鎷︽埅綾誨瀷</span></strong> <br /> <br /> 浠庝笂闈㈢殑鍒嗘瀽錛屾垜浠煡閬擄紝鏁翠釜鎷︽埅鍣ㄧ殑鏍稿績閮ㄥ垎鏄痠nvocation.invoke()榪欎釜鍑芥暟鐨勮皟鐢ㄤ綅緗備簨瀹炰笂錛屾垜浠篃姝e紡鏍規嵁榪欏彞浠g爜鐨勮皟鐢ㄤ綅緗紝鏉ヨ繘琛屾嫤鎴被鍨嬬殑鍖哄垎鐨勩傚湪Struts2涓紝Interceptor鐨勬嫤鎴被鍨嬶紝鍒嗘垚浠ヤ笅涓夌被錛?<br /> <br /> <strong>1. before</strong> <br /> <br /> before鎷︽埅錛屾槸鎸囧湪鎷︽埅鍣ㄤ腑瀹氫箟鐨勪唬鐮侊紝瀹冧滑瀛樺湪浜巌nvocation.invoke()浠g爜鎵ц涔嬪墠銆傝繖浜涗唬鐮侊紝灝嗕緷鐓ф嫤鎴櫒瀹氫箟鐨勯『搴忥紝<strong>欏哄簭鎵ц</strong>銆?<br /> <br /> <strong>2. after</strong> <br /> <br /> after鎷︽埅錛屾槸鎸囧湪鎷︽埅鍣ㄤ腑瀹氫箟鐨勪唬鐮侊紝瀹冧滑瀛樺湪浜巌nvocation.invoke()浠g爜鎵ц涔嬪悗銆傝繖浜涗唬鐮侊紝灝嗕竴鎷涙嫤鎴櫒瀹氫箟鐨勯『搴忥紝<strong>閫嗗簭鎵ц</strong>銆?<br /> <br /> 3. PreResultListener <br /> <br /> 鏈夌殑鏃跺欙紝before鎷︽埅鍜宎fter鎷︽埅瀵規垜浠潵璇存槸涓嶅鐨勶紝鍥犱負鎴戜滑闇瑕佸湪Action鎵ц瀹屼箣鍚庯紝浣嗘槸榪樻病鏈夊洖鍒拌鍥懼眰涔嬪墠錛屽仛涓浜涗簨鎯呫係truts2鍚屾牱鏀寔榪欐牱鐨勬嫤鎴紝榪欑鎷︽埅鏂瑰紡錛屾槸閫氳繃鍦ㄦ嫤鎴櫒涓敞鍐屼竴涓狿reResultListener鐨勬帴鍙f潵瀹炵幇鐨勩?<br /> <br /> <div id="ppxtr7v" class="dp-highlighter"> <div id="t9l9jrp" class="bar"> <div id="p7f7fxv" class="tools">Java浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span id="ljb1pxd" class="keyword">public</span><span> </span><span id="zjpzxpd" class="keyword">interface</span><span> PreResultListener {   </span></span> <li><span>  </span> <li><span>    </span><span id="z79tjrx" class="comment">/** </span> </span> <li><span><span id="pjpp9hh" class="comment">     * This callback method will be called after the Action execution and before the Result execution. </span> </span> <li><span><span id="1xfl9v9" class="comment">     * </span> </span> <li><span><span id="prf1xvl" class="comment">     * @param invocation </span> </span> <li><span><span id="pzxft1f" class="comment">     * @param resultCode </span> </span> <li><span><span id="7f9dnvn" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="vddrpxv" class="keyword">void</span><span> beforeResult(ActionInvocation invocation, String resultCode);   </span></span> <li><span>}  </span> </li> </ol> </div> <pre class="java" style="display: none" name="code">public interface PreResultListener { /** * This callback method will be called after the Action execution and before the Result execution. * * @param invocation * @param resultCode */ void beforeResult(ActionInvocation invocation, String resultCode); } </pre> <br /> <br /> 鍦ㄨ繖閲岋紝鎴戜滑鐪嬪埌錛孲truts2鑳藉鏀寔濡傛澶氱殑鎷︽埅綾誨瀷錛屼笌鍏舵湰韜殑鏁版嵁緇撴瀯鍜屾暣浣撹璁℃湁寰堝ぇ鐨勫叧緋匯傛濡傛垜鍦ㄤ箣鍓嶇殑鏂囩珷涓墍鎻愬埌鐨勶細 <br /> <br /> <div id="93lb99f" class="quote_title">downpour 鍐欓亾</div> <div id="n7hrpvt" class="quote_div">鍥犱負Action鏄竴涓櫘閫氱殑Java綾伙紝鑰屼笉鏄竴涓猄ervlet綾伙紝瀹屽叏鑴辯浜嶹eb瀹瑰櫒錛屾墍浠ユ垜浠氨鑳藉鏇村姞鏂逛究鍦板Control灞傝繘琛屽悎鐞嗙殑灞傛璁捐錛屼粠鑰屾娊璞″嚭璁稿鍏叡鐨勯昏緫錛屽茍灝嗚繖浜涢昏緫鑴辯鍑篈ction瀵硅薄鏈韓銆?/div> <br /> <br /> 鎴戜滑鍙互鐪嬪埌錛孲truts2瀵逛簬鏁翠釜鎵ц鐨勫垝鍒嗭紝浠嶪nterceptor鍒癆ction涓鐩村埌Result錛屾瘡涓灞傞兘鑱岃矗鏄庣‘銆備笉浠呭姝わ紝Struts2榪樹負姣忎竴涓眰嬈′箣鍓嶉兘璁劇珛浜嗘伆濡傚叾鍒嗙殑鎻掑叆鐐廣備嬌寰楁暣涓狝ction灞傜殑鎵╁睍鎬у緱鍒頒簡鍙叉棤鍓嶄緥鐨勬彁鍗囥?<br /> <br /> <strong><span style="color: blue">Interceptor鎵ц欏哄簭</span></strong> <br /> <br /> Interceptor鐨勬墽琛岄『搴忔垨璁告槸鎴戜滑鍦ㄦ暣涓繃紼嬩腑鏈鏈鍏沖績鐨勯儴鍒嗐傛牴鎹笂闈㈡墍鎻愬埌鐨勬蹇碉紝鎴戜滑瀹為檯涓婂凡緇忚兘澶熷ぇ鑷存槑鐧戒簡Interceptor鐨勬墽琛屾満鐞嗐傛垜浠潵鐪嬬湅Struts2鐨凴eference瀵笽nterceptor鎵ц欏哄簭鐨勪竴涓艦璞$殑渚嬪瓙銆?<br /> <br /> 濡傛灉鎴戜滑鏈変竴涓猧nterceptor-stack鐨勫畾涔夊涓嬶細 <br /> <br /> <div id="5hfp9xd" class="dp-highlighter"> <div id="h1zf3zf" class="bar"> <div id="pr1vldh" class="tools">Xml浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-xml"> <li><span><span id="tdtjj93" class="tag"><</span><span id="x79dj93" class="tag-name">interceptor-stack</span><span> </span><span id="dxdlrhx" class="attribute">name</span><span>=</span><span id="vrfvftr" class="attribute-value">"xaStack"</span><span id="7tzx9hx" class="tag">></span><span>  </span></span> <li><span>  </span><span id="j7nlvjz" class="tag"><</span><span id="jdzdtzh" class="tag-name">interceptor-ref</span><span> </span><span id="frrprhh" class="attribute">name</span><span>=</span><span id="r99bj9t" class="attribute-value">"thisWillRunFirstInterceptor"</span><span id="79vvljh" class="tag">/></span><span>  </span></span> <li><span>  </span><span id="nrxdfr1" class="tag"><</span><span id="jn7ldzz" class="tag-name">interceptor-ref</span><span> </span><span id="7zzph9l" class="attribute">name</span><span>=</span><span id="1vfv99t" class="attribute-value">"thisWillRunNextInterceptor"</span><span id="tnljrxx" class="tag">/></span><span>  </span></span> <li><span>  </span><span id="dzhndj7" class="tag"><</span><span id="v7jhzlv" class="tag-name">interceptor-ref</span><span> </span><span id="n79pz3b" class="attribute">name</span><span>=</span><span id="npv19d9" class="attribute-value">"followedByThisInterceptor"</span><span id="r9zfdt9" class="tag">/></span><span>  </span></span> <li><span>  </span><span id="bj7bbrz" class="tag"><</span><span id="7hnfdtz" class="tag-name">interceptor-ref</span><span> </span><span id="3xfbz9l" class="attribute">name</span><span>=</span><span id="ztz73tb" class="attribute-value">"thisWillRunLastInterceptor"</span><span id="pt3vb9p" class="tag">/></span><span>  </span></span> <li><span id="f7pnvjz" class="tag"></</span><span id="php7fjj" class="tag-name">interceptor-stack</span><span id="hfvlrx7" class="tag">></span><span>  </span></span> </li> </ol> </div> <pre class="xml" style="display: none" name="code"><interceptor-stack name="xaStack"> <interceptor-ref name="thisWillRunFirstInterceptor"/> <interceptor-ref name="thisWillRunNextInterceptor"/> <interceptor-ref name="followedByThisInterceptor"/> <interceptor-ref name="thisWillRunLastInterceptor"/> </interceptor-stack></pre> <br /> <br /> 閭d箞錛屾暣涓墽琛岀殑欏哄簭澶ф鍍忚繖鏍鳳細 <br /> <br /> <img alt="" src="http://www.javaeye.com/upload/attachment/71392/23045c94-b72a-3c04-9c6c-06ad4392d743.gif" /> <br /> <br /> 鍦ㄨ繖閲岋紝鎴戠◢寰敼浜嗕竴涓婼truts2鐨凴eference涓殑鎵ц欏哄簭紺轟緥錛屼嬌寰楁暣涓墽琛岄『搴忔洿鍔犺兘澶熻鐞嗚В銆傛垜浠彲浠ョ湅鍒幫紝閫掑綊璋冪敤淇濊瘉浜嗗悇縐嶅悇鏍風殑鎷︽埅綾誨瀷鐨勬墽琛岃兘澶熶簳浜曟湁鏉°?<br /> <br /> 璇鋒敞鎰忓湪榪欓噷錛屾瘡涓嫤鎴櫒涓殑浠g爜鐨勬墽琛岄『搴忥紝鍦ˋction涔嬪墠錛屾嫤鎴櫒鐨勬墽琛岄『搴忎笌鍫嗘爤涓畾涔夌殑涓鑷達紱鑰屽湪Action鍜孯esult涔嬪悗錛屾嫤鎴櫒鐨勬墽琛岄『搴忎笌鍫嗘爤涓畾涔夌殑欏哄簭鐩稿弽銆?<br /> </div> <h2>婧愮爜瑙f瀽 <a name="1680"><img alt="Top" src="http://www.javaeye.com/images/wiki/top.gif?1229402183" /></a> </h2> <div id="vddjhpn" class="content">鎺ヤ笅鏉ユ垜浠氨鏉ョ湅鐪嬫簮鐮侊紝鐪嬬湅Struts2鏄浣曚繚璇佹嫤鎴櫒銆丄ction涓嶳esult涓夎呬箣闂寸殑鎵ц欏哄簭鐨勩?<br /> <br /> 涔嬪墠鎴戞浘緇忔彁鍒幫紝ActionInvocation鏄疭truts2涓殑璋冨害鍣紝鎵浠ヤ簨瀹炰笂錛岃繖浜涗唬鐮佺殑璋冨害鎵ц錛屾槸鍦ˋctionInvocation鐨勫疄鐜扮被涓畬鎴愮殑錛岃繖閲岋紝鎴戞娊鍙栦簡DefaultActionInvocation涓殑invoke()鏂規硶錛屽畠灝嗗悜鎴戜滑灞曠ず涓鍒囥?<br /> <br /> <div id="ldl7jrv" class="dp-highlighter"> <div id="vfxv19z" class="bar"> <div id="vnll1tb" class="tools">Java浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span id="t19nlth" class="comment">/** </span> </span> <li><span><span id="f9hfn9j" class="comment"> * @throws ConfigurationException If no result can be found with the returned code </span> </span> <li><span><span id="jbbhnd7" class="comment"> */</span><span>  </span></span> <li><span id="9t9ppt3" class="keyword">public</span><span> String invoke() </span><span id="xf7x3z9" class="keyword">throws</span><span> Exception {   </span></span> <li><span>    String profileKey = </span><span id="z39drhn" class="string">"invoke: "</span><span>;   </span></span> <li><span>    </span><span id="frhfvnt" class="keyword">try</span><span> {   </span></span> <li><span>        UtilTimerStack.push(profileKey);   </span> <li><span>               </span> <li><span>        </span><span id="7n1hn9b" class="keyword">if</span><span> (executed) {   </span></span> <li><span>            </span><span id="57x9dbz" class="keyword">throw</span><span> </span><span id="fhfvlrp" class="keyword">new</span><span> IllegalStateException(</span><span id="n77zp9f" class="string">"Action has already executed"</span><span>);   </span></span> <li><span>        }   </span> <li><span>        </span><span id="rlthfll" class="comment">// 渚濇璋冪敤鎷︽埅鍣ㄥ爢鏍堜腑鐨勬嫤鎴櫒浠g爜鎵ц </span><span>  </span></span> <li><span>        </span><span id="1ntzpff" class="keyword">if</span><span> (interceptors.hasNext()) {   </span></span> <li><span>            </span><span id="b7vtrhf" class="keyword">final</span><span> InterceptorMapping interceptor = (InterceptorMapping) interceptors.next();   </span></span> <li><span>            UtilTimerStack.profile(</span><span id="9hxnjj9" class="string">"interceptor: "</span><span>+interceptor.getName(),    </span></span> <li><span>                    </span><span id="7lbnvtl" class="keyword">new</span><span> UtilTimerStack.ProfilingBlock<String>() {   </span></span> <li><span>                        </span><span id="7dzpx9b" class="keyword">public</span><span> String doProfiling() </span><span id="xzpnn7z" class="keyword">throws</span><span> Exception {   </span></span> <li><span>                         </span><span id="lhdtbpx" class="comment">// 灝咥ctionInvocation浣滀負鍙傛暟錛岃皟鐢╥nterceptor涓殑intercept鏂規硶鎵ц </span><span>  </span></span> <li><span>                            resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.</span><span id="3h9d3hf" class="keyword">this</span><span>);   </span></span> <li><span>                            </span><span id="zt19p9t" class="keyword">return</span><span> </span><span id="npdlrff" class="keyword">null</span><span>;   </span></span> <li><span>                        }   </span> <li><span>            });   </span> <li><span>        } </span><span id="n1xtjxv" class="keyword">else</span><span> {   </span></span> <li><span>            resultCode = invokeActionOnly();   </span> <li><span>        }   </span> <li><span>  </span> <li><span>        </span><span id="hbrzhnv" class="comment">// this is needed because the result will be executed, then control will return to the Interceptor, which will </span><span>  </span></span> <li><span>        </span><span id="dh7zhpd" class="comment">// return above and flow through again </span><span>  </span></span> <li><span>        </span><span id="zvbhfn9" class="keyword">if</span><span> (!executed) {   </span></span> <li><span>            </span><span id="jvl1br3" class="comment">// 鎵цPreResultListener </span><span>  </span></span> <li><span>            </span><span id="9fd99vl" class="keyword">if</span><span> (preResultListeners != </span><span id="3rpp9hp" class="keyword">null</span><span>) {   </span></span> <li><span>                </span><span id="tdttlrh" class="keyword">for</span><span> (Iterator iterator = preResultListeners.iterator();   </span></span> <li><span>                    iterator.hasNext();) {   </span> <li><span>                    PreResultListener listener = (PreResultListener) iterator.next();   </span> <li><span>                           </span> <li><span>                    String _profileKey=</span><span id="p7rrx9v" class="string">"preResultListener: "</span><span>;   </span></span> <li><span>                    </span><span id="79zxdlj" class="keyword">try</span><span> {   </span></span> <li><span>                            UtilTimerStack.push(_profileKey);   </span> <li><span>                            listener.beforeResult(</span><span id="p93xfdr" class="keyword">this</span><span>, resultCode);   </span></span> <li><span>                    }   </span> <li><span>                    </span><span id="fznvdtf" class="keyword">finally</span><span> {   </span></span> <li><span>                            UtilTimerStack.pop(_profileKey);   </span> <li><span>                    }   </span> <li><span>                }   </span> <li><span>            }   </span> <li><span>  </span> <li><span>            </span><span id="xzjh99l" class="comment">// now execute the result, if we're supposed to </span><span>  </span></span> <li><span>            </span><span id="fr39f9h" class="comment">// action涓巌nterceptor鎵ц瀹屾瘯錛屾墽琛孯esult </span><span>  </span></span> <li><span>            </span><span id="j1ltzpv" class="keyword">if</span><span> (proxy.getExecuteResult()) {   </span></span> <li><span>                executeResult();   </span> <li><span>            }   </span> <li><span>  </span> <li><span>            executed = </span><span id="zlzpx7v" class="keyword">true</span><span>;   </span></span> <li><span>        }   </span> <li><span>  </span> <li><span>        </span><span id="htzjpdt" class="keyword">return</span><span> resultCode;   </span></span> <li><span>    }   </span> <li><span>    </span><span id="l79ttpf" class="keyword">finally</span><span> {   </span></span> <li><span>        UtilTimerStack.pop(profileKey);   </span> <li><span>    }   </span> <li><span>}  </span> </li> </ol> </div> <pre class="java" style="display: none" name="code">/** * @throws ConfigurationException If no result can be found with the returned code */ public String invoke() throws Exception { String profileKey = "invoke: "; try { UtilTimerStack.push(profileKey); if (executed) { throw new IllegalStateException("Action has already executed"); } // 渚濇璋冪敤鎷︽埅鍣ㄥ爢鏍堜腑鐨勬嫤鎴櫒浠g爜鎵ц if (interceptors.hasNext()) { final InterceptorMapping interceptor = (InterceptorMapping) interceptors.next(); UtilTimerStack.profile("interceptor: "+interceptor.getName(), new UtilTimerStack.ProfilingBlock<String>() { public String doProfiling() throws Exception { // 灝咥ctionInvocation浣滀負鍙傛暟錛岃皟鐢╥nterceptor涓殑intercept鏂規硶鎵ц resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this); return null; } }); } else { resultCode = invokeActionOnly(); } // this is needed because the result will be executed, then control will return to the Interceptor, which will // return above and flow through again if (!executed) { // 鎵цPreResultListener if (preResultListeners != null) { for (Iterator iterator = preResultListeners.iterator(); iterator.hasNext();) { PreResultListener listener = (PreResultListener) iterator.next(); String _profileKey="preResultListener: "; try { UtilTimerStack.push(_profileKey); listener.beforeResult(this, resultCode); } finally { UtilTimerStack.pop(_profileKey); } } } // now execute the result, if we're supposed to // action涓巌nterceptor鎵ц瀹屾瘯錛屾墽琛孯esult if (proxy.getExecuteResult()) { executeResult(); } executed = true; } return resultCode; } finally { UtilTimerStack.pop(profileKey); } } </pre> <br /> <br /> 浠庢簮鐮佷腑錛屾垜浠彲浠ョ湅鍒幫紝鎴戜滑涔嬪墠鎻愬埌鐨凷truts2鐨凙ction灞傜殑4涓笉鍚岀殑灞傛錛屽湪榪欎釜鏂規硶涓兘鏈変綋鐜幫紝浠栦滑鍒嗗埆鏄細鎷︽埅鍣紙Interceptor錛夈丄ction銆丳reResultListener鍜孯esult銆傚湪榪欎釜鏂規硶涓紝淇濊瘉浜嗚繖浜涘眰嬈$殑鏈夊簭璋冪敤鍜屾墽琛屻傜敱姝ゆ垜浠篃鍙互鐪嬪嚭<strong><span style="color: red">Struts2鍦ˋction灞傛璁捐涓婄殑浼楀鑰冭檻錛屾瘡涓眰嬈¢兘鍏峰浜嗛珮搴︾殑鎵╁睍鎬у拰鎻掑叆鐐癸紝浣垮緱紼嬪簭鍛樺彲浠ュ湪浠諱綍鍠滄鐨勫眰嬈″姞鍏ヨ嚜宸辯殑瀹炵幇鏈哄埗鏀瑰彉Action鐨勮涓恒?/span></strong> <br /> <br /> 鍦ㄨ繖閲岋紝闇瑕佺壒鍒己璋冪殑錛屾槸鍏朵腑鎷︽埅鍣ㄩ儴鍒嗙殑鎵ц璋冪敤錛?<br /> <br /> <div id="jl1lthz" class="dp-highlighter"> <div id="lv7h37n" class="bar"> <div id="7zzf7xn" class="tools">Java浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span>resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.</span><span id="lj79ndd" class="keyword">this</span><span>);  </span></span> </li> </ol> </div> <pre class="java" style="display: none" name="code">resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);</pre> <br /> <br /> 琛ㄩ潰涓婏紝瀹冨彧鏄墽琛屼簡鎷︽埅鍣ㄤ腑鐨刬ntercept鏂規硶錛屽鏋滄垜浠粨鍚堟嫤鎴櫒鏉ョ湅錛屽氨鑳界湅鍑虹偣绔潵錛?<br /> <br /> <div id="tddj3br" class="dp-highlighter"> <div id="hzhd13h" class="bar"> <div id="f7nt1r9" class="tools">Java浠g爜 <a title="澶嶅埗浠g爜" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" ><img alt="澶嶅埗浠g爜" src="http://www.javaeye.com/images/icon_copy.gif" /></a></div> </div> <ol class="dp-j"> <li><span><span id="jnjjjjp" class="keyword">public</span><span> String intercept(ActionInvocation invocation) </span><span id="7flb73b" class="keyword">throws</span><span> Exception {   </span></span> <li><span>    String result = </span><span id="fpxxphd" class="keyword">null</span><span>;   </span></span> <li><span>  </span> <li><span>        before(invocation);   </span> <li><span>        </span><span id="l3lrzfl" class="comment">// 璋冪敤invocation鐨刬nvoke()鏂規硶錛屽湪榪欓噷褰㈡垚浜嗛掑綊璋冪敤 </span><span>  </span></span> <li><span>        result = invocation.invoke();   </span> <li><span>        after(invocation, result);   </span> <li><span>  </span> <li><span>        </span><span id="td1h9bh" class="keyword">return</span><span> result;   </span></span> <li><span>}  </span> </li> </ol> </div> <pre class="java" style="display: none" name="code">public String intercept(ActionInvocation invocation) throws Exception { String result = null; before(invocation); // 璋冪敤invocation鐨刬nvoke()鏂規硶錛屽湪榪欓噷褰㈡垚浜嗛掑綊璋冪敤 result = invocation.invoke(); after(invocation, result); return result; }</pre> <br /> <br /> 鍘熸潵鍦╥ntercept()鏂規硶鍙堝ActionInvocation鐨刬nvoke()鏂規硶榪涜閫掑綊璋冪敤錛孉ctionInvocation寰幆宓屽鍦╥ntercept()涓紝涓鐩村埌璇彞result = invocation.invoke()鎵ц緇撴潫銆傝繖鏍鳳紝Interceptor鍙堜細鎸夌収鍒氬紑濮嬫墽琛岀殑閫嗗悜欏哄簭渚濇鎵ц緇撴潫銆?<br /> <br /> <strong><span style="color: red">涓涓湁搴忛摼琛紝閫氳繃閫掑綊璋冪敤錛屽彉鎴愪簡涓涓爢鏍堟墽琛岃繃紼嬶紝灝嗕竴孌墊湁搴忔墽琛岀殑浠g爜鍙樻垚浜?孌墊墽琛岄『搴忓畬鍏ㄧ浉鍙嶇殑浠g爜榪囩▼錛屼粠鑰屽閥濡欏湴瀹炵幇浜咥OP銆?/span></strong>榪欎篃灝辨垚涓轟簡Struts2鐨凙ction灞傜殑AOP鍩虹銆?</div> <img src ="http://m.tkk7.com/fantasy/aggbug/257349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/fantasy/" target="_blank">Web 2.0 鎶鏈祫婧?/a> 2009-03-02 15:24 <a href="http://m.tkk7.com/fantasy/articles/257349.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>(杞?)Struts2.0 鎷︽埅鍣ㄧ殑瀹炵幇涓庡畾涔?/title><link>http://m.tkk7.com/fantasy/articles/257311.html</link><dc:creator>Web 2.0 鎶鏈祫婧?/dc:creator><author>Web 2.0 鎶鏈祫婧?/author><pubDate>Mon, 02 Mar 2009 03:31:00 GMT</pubDate><guid>http://m.tkk7.com/fantasy/articles/257311.html</guid><wfw:comment>http://m.tkk7.com/fantasy/comments/257311.html</wfw:comment><comments>http://m.tkk7.com/fantasy/articles/257311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/fantasy/comments/commentRss/257311.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/fantasy/services/trackbacks/257311.html</trackback:ping><description><![CDATA[<p>杞嚜(http://samyulong.javaeye.com/blog/217092)<br /> <br /> 涓銆?span>浠涔堟槸鎷︽埅鍣紵</span></p> <p style="text-indent: 21pt"><span>鎻愬埌鎷︽埅鍣紝浣挎垜涓嶅緱涓?鎯寵搗姝︿緺鍓т腑鍔尓浠父璇寸殑涓鍙ヨ瘽錛?#8220;姝ゅ北鏄垜寮錛屾鏍戞槸鎴戞牻錛岃鎵撴璺繃錛岀暀涓嬩拱璺儲錛?#8221;銆傞毦涓嶆垚紼嬪簭涓篃鏈?#8220;鎵撳姭”鐨勶紝璇寸殑娌¢敊錛屾嫤鎴櫒灝辨槸涓墦鍔殑銆?鍦ㄧ幇瀹炵敓媧諱腑錛屽姭鍖姭鐨勫ぇ閮芥槸閽辮儲錛屽綋鐒朵篃鏈夊埆鐨勪粈涔堬紝閭d箞紼嬪簭涓殑“鍔尓”鍔殑鍙堟槸浠涔堝憿錛熸垨鑰呰紼嬪簭涓負浠涔堥渶瑕佸畠錛熷湪鎴戜滑鐨勬棩甯哥紪紼嬩腑灝戜笉浜嗗啓涓浜?閲嶅鐨勪唬鐮侊紝渚嬪鍦ㄤ竴涓湴鏂逛腑鍐欎簡涓孌典唬鐮侊紝鍚庢潵鍙戠幇榪欐浠g爜鍦ㄥ叾瀹冨湴鏂逛腑鍚屾牱闇瑕侊紝鍦ㄤ紶緇熺殑緙栫▼涓垜浠竴瀹氫細閲囧彇澶嶅埗銆佺矘璐寸殑鍔炴硶銆傚鏋滆繖孌典唬鐮佸彧鍦ㄨ繖 涓涓や釜澶勯渶瑕侊紝鎴戜滑閲囧彇榪欑鍔炴硶錛岃繕璇寸殑榪囧幓錛屼絾鏄鏋滅郴緇熷榪欐浠g爜榪囦簬渚濊禆錛屼篃灝辨槸榪欐浠g爜鍦ㄧ郴緇熶腑鍑虹幇鐨勮繃澶氾紝濡傛灉閭d竴澶╂垜浠彂鐜拌繖孌典唬鐮佷腑鍦ㄦ煇浜?鍦版柟榪橀渶瑕佸畬鍠勶紝鎴戜滑鏄笉鏄鐫涓慨鏀瑰畠浠憿錛熸垜浼拌娌℃湁浜轟細榪欎箞鍋氾紝瀹冧弗閲嶈繚鍙嶄簡杞歡寮鍙戜腑涓鏉¢潪甯擱噸瑕佺殑</span>DRY<span>瑙勫垯錛屼笉鍐欓噸澶嶄唬鐮併傝浜嗚繖涔堝浣犱竴瀹氱煡閬撴垜浠負浠涔堥渶瑕佸湪紼嬪簭涓紕涓涓?#8220;鍔尓”浜嗗惂銆傝繖涓?#8220;鍔尓”灝辨槸騫朵笉鏄姭鍙栦粈涔堜笢瑗匡紝鍙槸涓轟簡鍦ㄦ煇涓▼搴忔墽琛屽墠鍚庯紝鍔ㄦ佺殑澧炲姞涓浜涘姛鑳斤紙浠ュ墠鎵鍐欓氱敤浠g爜鍧楋級鎴栬繘琛屼竴浜涙鏌ュ伐浣溿傞偅涔堣繖涓嫤鎴櫒鍒板簳鏄庝箞瀹炵幇鐨勫憿錛熷疄闄呬笂瀹冩槸鐢?/span>Java<span>涓殑鍔ㄦ佷唬鐞嗘潵瀹炵幇鐨勩?/span></p> <p style="margin-left: 21pt; text-indent: -21pt">浜屻?span>鎷︽埅鍣ㄥ湪</span>Struts2<span>涓殑搴旂敤</span></p> <p style="text-indent: 21pt"><span>瀵逛簬</span>Struts2<span>妗嗘灦鑰岃█錛屾鏄ぇ閲忕殑鍐呯疆鎷︽埅鍣ㄥ畬鎴愪簡澶ч儴鍒嗘搷浣溿傚儚</span>params<span>鎷︽埅鍣ㄥ皢</span>http<span>璇鋒眰涓弬鏁拌В鏋愬嚭鏉ヨ祴鍊肩粰</span>Action<span>涓搴旂殑灞炴с?/span>Servlet-config<span>鎷︽埅鍣ㄨ礋璐f妸璇鋒眰涓?/span>HttpServletRequest<span>瀹炰緥鍜?/span>HttpServletResponse<span>瀹炰緥浼犻掔粰</span>Action……struts2<span>鍐呯疆鐨勬嫤鎴櫒鏈?/span><span>寰堝錛屽湪姝ゆ垜灝變笉涓涓鍒椾婦浜?/span></p> <p style="text-indent: 21pt"><span>閭d箞鎬庝箞鍦?/span>struts2<span>涓畾涔夎嚜宸辯殑鎷︽埅鍣ㄥ憿</span>?</p> <p><span>    寰堢畝鍗?/span>Struts2<span>涓烘垜浠彁渚涗簡涓涓?/span>Interceptor<span>鎺ュ彛</span>,<span>璇ユ帴鍙f簮浠g爜濡備笅</span>:</p> <p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: &apos">public</span></strong><strong><span style="font-size: 10pt; color: #7f0055; font-family: &apos">interface</span></strong><span style="font-size: 10pt; color: #000000; font-family: &apos"> <span>Interceptor</span> </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &apos">extends</span></strong><span style="font-size: 10pt; color: #000000; font-family: &apos"> Serializable {</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">    </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &apos">void</span></strong><span style="font-size: 10pt; color: #000000; font-family: &apos"> destroy();</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">    </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &apos">void</span></strong><span style="font-size: 10pt; color: #000000; font-family: &apos"> init();</span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">    String intercept(ActionInvocation invocation) </span><strong><span style="font-size: 10pt; color: #7f0055; font-family: &apos">throws</span></strong><span style="font-size: 10pt; color: #000000; font-family: &apos"> Exception;</span></p> <p><span style="font-size: 10pt; color: #000000; font-family: &apos">}</span></p> <p style="margin-left: 18pt; text-indent: -18pt"><span style="font-size: 10pt; color: #000000; font-family: &apos">1)<span style="font-family: &apos">    </span></span>init():<span>鍦ㄦ嫤鎴櫒鎵ц涔嬪墠璋冪敤錛屼富瑕佺敤浜庡垵濮嬪寲緋葷粺璧勬簮銆?/span></p> <p style="margin-left: 18pt; text-indent: -18pt"><span style="font-size: 10pt; color: #000000; font-family: &apos">2)<span style="font-family: &apos">    </span></span>destroty():<span>涓?/span>init()<span>瀵瑰簲錛岀敤浜庢嫤鎴櫒鎵ц涔嬪悗閿姣佽祫婧愩?/span></p> <p style="margin-left: 18pt; text-indent: -18pt"><span style="font-size: 10pt; color: #000000; font-family: &apos">3)<span style="font-family: &apos">    </span></span>intercept():<span>鎷︽埅鍣ㄧ殑鏍稿績鏂規硶錛屽疄鐜板叿浣撶殑鎷︽埅鎿嶄綔銆備笌</span>action<span>涓鏍鳳紝璇ユ柟娉曚篃榪斿洖涓涓瓧絎︿覆浣滀負閫昏緫瑙嗗浘銆傚鏋滄嫤鎴櫒鎴愬姛璋冪敤浜?/span>action<span>錛屽垯榪斿洖涓涓湡姝g殑錛屼篃灝辨槸璇?/span>action<span>涓?/span>execute()<span>鏂規硶榪斿洖鐨勯昏緫瑙嗗浘錛屽弽涔嬶紝鍒欒繑鍥炰竴涓嚜瀹氫箟鐨勯昏緫瑙嗗浘銆?/span></p> <p><span>閫氬父鎴戜滑浣跨敤鎷︽埅鍣ㄥ茍涓嶉渶瑕佺敵璇瘋祫婧愶紝涓烘</span>Struts2<span>榪樹負鎴戜滑鎻愪緵浜嗕竴涓?/span>AbstractInterceptor<span>綾伙紝璇ョ被鐨?/span>init()<span>鍜?/span>destroy()<span>閮芥槸絀哄疄鐜般傛垜浠紑鍙戣嚜宸辯殑鎷︽埅鍣ㄥ彧闇瑕佺戶鎵胯繖涓被灝辮浜嗐?/span></p> <p><span>    </span><span>涓嬮潰鍒涘緩涓涓垽鏂敤鎴鋒槸鍚︾櫥褰曠殑鎷︽埅鍣ㄣ備唬鐮佸涓?/span>:<br />           </p> <div style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 4px; width: 95%; padding-top: 4px"> <div><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Map;<br /> </span><span style="color: #0000ff">import</span><span style="color: #000000"> com.opensymphony.xwork2.Action;<br /> </span><span style="color: #0000ff">import</span><span style="color: #000000"> com.opensymphony.xwork2.ActionInvocation;<br /> </span><span style="color: #0000ff">import</span><span style="color: #000000"> com.opensymphony.xwork2.interceptor.AbstractInterceptor;<br /> <br /> @SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">serial</span><span style="color: #000000">"</span><span style="color: #000000">)<br /> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> CheckLoginInterceptor </span><span style="color: #0000ff">extends</span><span style="color: #000000"> AbstractInterceptor {<br /> <br />     @SuppressWarnings(</span><span style="color: #000000">"</span><span style="color: #000000">unchecked</span><span style="color: #000000">"</span><span style="color: #000000">)<br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> String intercept(ActionInvocation actionInvocation) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception {<br />          System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">begin check login interceptor!</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <br />             </span><span style="color: #008000">//</span><span style="color: #008000"> 媯鏌ession涓槸鍚﹀瓨鍦╱ser</span><span style="color: #008000"><br /> </span><span style="color: #000000"><br />             Map session </span><span style="color: #000000">=</span><span style="color: #000000"> actionInvocation.getInvocationContext().getSession();<br /> <br />             String username </span><span style="color: #000000">=</span><span style="color: #000000"> (String) session.get(</span><span style="color: #000000">"</span><span style="color: #000000">user</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <br />             </span><span style="color: #0000ff">if</span><span style="color: #000000"> (username </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000"> </span><span style="color: #000000">&&</span><span style="color: #000000"> username.length() </span><span style="color: #000000">></span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">) {<br /> <br />                 </span><span style="color: #008000">//</span><span style="color: #008000"> 瀛樺湪鐨勬儏鍐典笅榪涜鍚庣畫鎿嶄綔銆?/span><span style="color: #008000"><br /> </span><span style="color: #000000"><br />                 System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">already login!</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <br />                 </span><span style="color: #0000ff">return</span><span style="color: #000000"> actionInvocation.invoke();<br /> <br />             } </span><span style="color: #0000ff">else</span><span style="color: #000000"> {<br /> <br />                 </span><span style="color: #008000">//</span><span style="color: #008000"> 鍚﹀垯緇堟鍚庣畫鎿嶄綔錛岃繑鍥濴OGIN</span><span style="color: #008000"><br /> </span><span style="color: #000000"><br />                 System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">no login, forward login page!</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <br />                 </span><span style="color: #0000ff">return</span><span style="color: #000000"> Action.LOGIN;<br /> <br />             }<br /> <br />         }<br /> <br />     }</span></div> </div>     鍒涘緩濂芥嫤鎴櫒鍚庯紝榪樹笉鑳戒嬌鐢紝榪橀渶瑕佹垜浠湪struts.xml<span>涓厤緗竴涓嬨?/span> <p> <p><span>  涓嬮潰鐪嬩竴涓嬫庝箞閰嶇疆鎷︽埅鍣ㄣ?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptors</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"checkLogin" </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">class</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"com.myblog.interceptor.CheckLoginInterceptor" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p><span style="font-size: 10pt; color: #008080; font-family: &apos"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptors</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p><span>   榪欎釜瀹氫箟濂界殑鎷︽埅鍣ㄥ湪</span>Action<span>涓庝箞浣跨敤鍛紵浣跨敤鏂規硶寰堢畝鍗曪紝濡備笅錛?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">action </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">" " </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">class</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">" " </span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><result> </result></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-ref </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"checkLogin" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p><span style="font-size: 10pt; color: #008080; font-family: &apos"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">action</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p><span>   涓鏃︽垜浠負鏌愪釜</span>action<span>寮曠敤浜嗚嚜瀹氫箟鐨勬嫤鎴櫒錛?/span>struts2<span>榛樿鐨勬嫤鎴櫒灝變笉浼氬啀璧蜂綔鐢紝鍥犳榪橀渶瑕佸紩鐢ㄩ粯璁ゆ嫤鎴櫒銆?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">action </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">" " </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">class</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">" " </span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><result> </result></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-ref </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"checkLogin" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p><span style="color: #008080">                     </span><interceptor-ref name="defaultStack" /></p> <p><span style="font-size: 10pt; color: #008080; font-family: &apos"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">action</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p><span>   浣嗘槸鎴戜滑榪欎箞鍋氫技涔庝篃涓嶅お鏂逛究錛屽洜涓哄鏋滄嫤鎴櫒</span>checkLogin<span>闇瑕佽澶氫釜</span>action<span>寮曠敤鐨勮瘽錛屾瘡涓涓兘瑕侀厤緗竴閬嶅お楹葷儲浜嗐傛垜浠彲浠ユ妸瀹冨畾涔夋垚榛樿鐨勬嫤鎴櫒銆?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptors</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"checkLogin" </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">class</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"com.myblog.interceptor.CheckLoginInterceptor" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos">           <!鈥?</span><span>瀹氫箟涓涓嫤鎴櫒鏍?/span><span style="font-size: 10pt; color: #008080; font-family: &apos">--></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-stack </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"mydefault"</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">              </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-ref </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"defaultStack" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">              </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-ref </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"checkLogin" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">           </span><span style="font-size: 10pt; color: #008080; font-family: &apos"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-stack</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptors</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">default-interceptor-ref </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"mydefault" </span><span style="font-size: 10pt; color: #008080; font-family: &apos">/></span></p> <p><span>   鍙﹀錛?/span>struts2<span>榪樹負鎴戜滑鎻愪緵浜嗕竴涓柟娉曡繃婊ょ殑鎷︽埅鍣?/span>MethodFilterInterceptor<span>綾伙紝璇ョ被緇ф壙</span>AbstractInterceptor<span>綾伙紝閲嶅啓浜?/span><span style="font-size: 10pt; color: #000000; font-family: &apos">intercept(ActionInvocation invocation)</span><span>騫舵彁渚涗簡涓涓柊鐨勬柟娉?/span><span style="font-size: 10pt; color: #000000; font-family: &apos">doInterceptor(ActionInvocation invocation)</span><span>鎶借薄鏂規硶銆傝綾葷殑浣跨敤鏂規硶寰堢畝鍗曪紝灝變笉涓句緥浜嗐傝繖涓嫤鎴櫒涓庝互寰鐨勬嫤鎴櫒閰嶇疆鏈夋墍涓嶅悓銆傞偅灝辨槸鍙互鎸囧畾鍝簺鏂規硶闇瑕佽鎷︽埅錛岄偅浜涗笉闇瑕併傞氬父鍦ㄥ紩鐢ㄨ鎷︽埅鍣ㄦ椂鎸囧畾銆?/span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-ref </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"  "</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">       </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">param </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"exculdeMethods"</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">param</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p style="text-align: left" align="left"><span style="font-size: 10pt; color: #000000; font-family: &apos">       </span><span style="font-size: 10pt; color: #008080; font-family: &apos"><</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">param </span><span style="font-size: 10pt; color: #7f007f; font-family: &apos">name</span><span style="font-size: 10pt; color: #000000; font-family: &apos">=</span><span style="font-size: 10pt; color: #2a00ff; font-family: &apos">"includeMethods"</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">param</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span><span style="font-size: 10pt; color: #000000; font-family: &apos">     </span></p> <p><span style="font-size: 10pt; color: #008080; font-family: &apos"></</span><span style="font-size: 10pt; color: #3f7f7f; font-family: &apos">interceptor-ref</span><span style="font-size: 10pt; color: #008080; font-family: &apos">></span></p> <p>   exculdeMethods<span>錛氭槸涓嶈鎷︽埅鐨勬柟娉曪紝濡傛灉鏈夊涓互閫楀彿鍒嗛殧銆?/span></p> <p>   includeMethods<span>錛氶渶瑕佽鎷︽埅鐨勬柟娉曪紝濡傛灉鏈夊涓互閫楀彿鍒嗛殧銆?/span></p> <p> </p> <hr style="width: 100%; height: 2px" /> <p><span><br />     涓嬮潰鎴戞潵瀹為獙涓嬨傛垜浠啓涓嫤鎴櫒鏍?br />     </span></p> <div style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 4px; width: 95%; padding-top: 4px"> <div><span style="color: #0000ff"><</span><span style="color: #800000">interceptors</span><span style="color: #0000ff">></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"><</span><span style="color: #800000">interceptor </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="authorize"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="com.struts2.interceptor.AuthorizeInterceptor"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"><</span><span style="color: #800000">interceptor-stack </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="appStack"</span><span style="color: #0000ff">></span><span style="color: #000000"><br />       </span><span style="color: #008000"><!--</span><span style="color: #008000"> 浣犺嚜瀹氫箟鐨?nbsp;</span><span style="color: #008000">--></span><span style="color: #000000"><br />       </span><span style="color: #0000ff"><</span><span style="color: #800000">interceptor-ref </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="authorize"</span><span style="color: #0000ff">/></span><span style="color: #000000"><br />       </span><span style="color: #008000"><!--</span><span style="color: #008000"> 緋葷粺鍐呯疆鐨勬嫤鎴櫒鏍?nbsp;</span><span style="color: #008000">--></span><span style="color: #000000"><br />       </span><span style="color: #0000ff"><</span><span style="color: #800000">interceptor-ref </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="defaultStack"</span><span style="color: #0000ff">/></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"></</span><span style="color: #800000">interceptor-stack</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #0000ff"></</span><span style="color: #800000">interceptors</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #0000ff"><</span><span style="color: #800000">action </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="forward"</span><span style="color: #ff0000"> class</span><span style="color: #0000ff">="com.struts2.RequestForward"</span><span style="color: #0000ff">></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"><</span><span style="color: #800000">interceptor-ref </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="appStack"</span><span style="color: #0000ff">/></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="index"</span><span style="color: #0000ff">></span><span style="color: #000000">index.jsp</span><span style="color: #0000ff"></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #000000"><br />    </span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="NOT_FOUND"</span><span style="color: #0000ff">></span><span style="color: #000000">not_found.jsp</span><span style="color: #0000ff"></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span></div> </div>     鎭╋紝榪樻槸鏈夌偣寰堣糠鑼殑浣嶇疆錛屾瘮璇寸殑鎷︽埅鍣ㄧ殑璋冪敤欏哄簭鏄牴鎹畑ml閲岄潰鐨勯『搴忔潵鐨勫悧錛熻繕鏈夊彲浠ユ寚瀹氬彧鍦╝ction涔嬪墠鎴栬呭彧鍦╝ction涔嬪悗璋冪敤鍚楋紵璇村疄璇濇垜涔熸悶涓嶆竻妤氾紝鍦ㄨ繍鐢ㄧ殑榪囩▼涓紝澶у鎱㈡參鍦ㄦ潵浣撲細<br /> <br /> <br /> <p>鎷︽埅鍣ㄥ嚑涔庡畬鎴愪簡Struts2妗嗘灦70%鐨勫伐浣滐紝鍖呮嫭瑙f瀽璇鋒眰鍙傛暟銆佸皢璇鋒眰鍙傛暟璧嬪肩粰Action灞炴с佹墽琛屾暟鎹牎楠屻佹枃浠朵笂浼?#8230;…錛孲truts2璁捐鐨勭伒宸фэ紝鏇村ぇ紼嬪害鍦板緱鐩婁簬鎷︽埅鍣ㄨ璁★紝褰撻渶瑕佹墿灞昐truts2鍔熻兘鏃訛紝鍙渶瑕佹彁渚涘搴旀嫤鎴櫒錛屽茍灝嗗畠閰嶇疆鍦⊿truts2瀹瑰櫒涓嵆鍙紱濡傛灉涓嶉渶瑕佽鍔熻兘鏃訛紝涔熷彧闇瑕佸彇娑堣鎷︽埅鍣ㄧ殑閰嶇疆鍗沖彲銆傝繖縐嶅彲鎻掓嫈寮忕殑璁捐錛屾鏄蔣浠惰璁¢鍩熶竴鐩村瓬瀛滀互姹傜殑鐩爣銆?/p> <p>瀹為檯涓婏紝Struts2鐨勭簿楂撳氨鍦ㄤ簬鎷︽埅鍣紝鎺屾彙浜哠truts2鐨勬嫤鎴櫒鏈哄埗錛屼綘灝卞彲浠ヨ綺鵑氫簡Struts2銆?br /> 浠庢煇涓搴︽潵鐪嬶紝鎴戜滑鍙互鎶奡truts2妗嗘灦鐞嗚В鎴愪竴涓┖澹籌紝鑰岃繖浜涙嫤鎴櫒鍍忎竴涓竴涓娊灞夛紝闅忔椂鍙互<br /> 鎻掕繘鍏ワ紝涔熷彲浠ユ嫈鍑烘潵鈥斺旇繖鏄蔣浠朵駭鍝佷竴鐩磋拷姹傜殑鐩爣銆?br /> 濡傛灉浣犲枩嬈紝浣犲彲浠ユ妸Struts2鐨勫叏閮ㄦ彃浠舵嫈鍑猴紝閭d箞Struts2灝辨垚浜嗕竴涓┖瀹瑰櫒鈥斺?br /> 鑰岃繖縐嶇┖錛屾鏄?Struts2鐨勯瓍鍔涳紝浣犲彲浠ユ妸浠諱綍鑷繁鎯寵鐨勪笢瑗垮~鍏ヨ繘鍘伙紝鐢氳嚦鍖呮嫭鑷繁瀹屽叏瀹炵幇榪欎釜妗嗘灦銆?/p> <p>鍙︿竴鏂歸潰錛屽洜涓篠truts2鐨勬彃浠舵満鍒?Struts2鎻愪緵浜嗘棤闄愭墿灞曠殑鍙兘鎬э紝浣犲彲浠ユ妸鑷繁鎯寵鐨勪換浣?br /> 涓滆タ鍋氭垚鎻掍歡錛岀劧鍚庡~鍏truts2鈥斺旇繖鏍風殑緇撴灉鏄細涓涓紒涓氾紝涓涓洟闃燂紝鍙互鎶婅嚜宸變笟鍔$浉鍏崇殑涓滆タ<br /> 鍋氭垚鎻掍歡錛岄殢鏃墮殢鍦板湴澶嶇敤銆?br /> 涔熷氨鏄錛氬鏋滀綘鎯寵錛屼綘鍙互鎶奡truts2鏀歸犳垚灞炰簬鑷繁鐨勬鏋躲?/p> <p>褰撶劧錛孲truts2涔熷唴寤轟簡澶ч噺鐨勬嫤鎴櫒錛岃繖浜涙嫤鎴櫒浠ame-class瀵圭殑褰㈠紡閰嶇疆鍦╯truts-default. xml鏂囦歡涓紝鍏朵腑name鏄嫤鎴櫒鐨勫悕瀛楋紝灝辨槸浠ュ悗浣跨敤璇ユ嫤鎴櫒鐨勫敮涓鏍囪瘑錛沜lass鍒欐寚瀹氫簡璇ユ嫤鎴櫒鐨勫疄鐜扮被錛屽鏋滄垜浠畾涔夌殑package緇ф壙浜哠truts2鐨勯粯璁truts-default鍖咃紝鍒欏彲浠ヨ嚜鐢變嬌鐢ㄤ笅闈㈠畾涔夌殑鎷︽埅鍣紝鍚﹀垯蹇呴』鑷繁瀹氫箟榪欎簺鎷︽埅鍣ㄣ?br /> 涓嬮潰鏄疭truts2鍐呭緩鎷︽埅鍣ㄧ殑綆瑕佷粙緇嶏細<br /> alias錛氬疄鐜板湪涓嶅悓璇鋒眰涓浉浼煎弬鏁板埆鍚嶇殑杞崲銆?br /> autowiring錛氳繖鏄釜鑷姩瑁呴厤鐨勬嫤鎴櫒錛屼富瑕佺敤浜庡綋Struts2鍜孲pring鏁村悎鏃訛紝Struts2鍙互浣跨敤鑷姩瑁呴厤鐨勬柟寮忔潵璁塊棶Spring瀹瑰櫒涓殑Bean銆?br /> chain錛氭瀯寤轟竴涓狝ction閾撅紝浣垮綋鍓岮ction鍙互璁塊棶鍓嶄竴涓狝ction鐨勫睘鎬э紝涓鑸拰<result type="chain" .../>涓璧蜂嬌鐢ㄣ?br /> conversionError錛氳繖鏄竴涓礋璐e鐞嗙被鍨嬭漿鎹㈤敊璇殑鎷︽埅鍣紝瀹冭礋璐e皢綾誨瀷杞崲閿欒浠嶢ctionContext涓彇鍑猴紝騫惰漿鎹㈡垚Action鐨凢ieldError閿欒銆?br /> createSession錛氳鎷︽埅鍣ㄨ礋璐e垱寤轟竴涓狧ttpSession瀵硅薄錛屼富瑕佺敤浜庨偅浜涢渶瑕佹湁HttpSession瀵硅薄鎵嶈兘姝e父宸ヤ綔鐨勬嫤鎴櫒涓?br /> debugging錛氬綋浣跨敤Struts2鐨勫紑鍙戞ā寮忔椂錛岃繖涓嫤鎴櫒浼氭彁渚涙洿澶氱殑璋冭瘯淇℃伅銆?br /> execAndWait錛氬悗鍙版墽琛孉ction錛岃礋璐e皢絳夊緟鐢婚潰鍙戦佺粰鐢ㄦ埛銆?br /> exception錛氳繖涓嫤鎴櫒璐熻矗澶勭悊寮傚父錛屽畠灝嗗紓甯告槧灝勪負緇撴灉銆?br /> fileUpload錛氳繖涓嫤鎴櫒涓昏鐢ㄤ簬鏂囦歡涓婁紶錛屽畠璐熻矗瑙f瀽琛ㄥ崟涓枃浠跺煙鐨勫唴瀹廣?<br /> i18n錛氳繖鏄敮鎸佸浗闄呭寲鐨勬嫤鎴櫒錛屽畠璐熻矗鎶婃墍閫夌殑璇█銆佸尯鍩熸斁鍏ョ敤鎴稴ession涓?br /> logger錛氳繖鏄竴涓礋璐f棩蹇楄褰曠殑鎷︽埅鍣紝涓昏鏄緭鍑篈ction鐨勫悕瀛椼?br /> model-driven錛氳繖鏄竴涓敤浜庢ā鍨嬮┍鍔ㄧ殑鎷︽埅鍣紝褰撴煇涓狝ction綾誨疄鐜頒簡ModelDriven鎺ュ彛鏃訛紝瀹冭礋璐f妸getModel()鏂規硶鐨勭粨鏋滃爢鍏alueStack涓?<br /> scoped-model-driven錛氬鏋滀竴涓狝ction瀹炵幇浜嗕竴涓猄copedModelDriven鎺ュ彛錛岃鎷︽埅鍣ㄨ礋璐d粠鎸囧畾鐢熷瓨鑼冨洿涓壘鍑烘寚瀹氱殑Modol錛屽茍灝嗛氳繃setModel鏂規硶灝嗚Model浼犵粰Action瀹炰緥銆?br /> params錛氳繖鏄渶鍩烘湰鐨勪竴涓嫤鎴櫒錛屽畠璐熻矗瑙f瀽HTTP璇鋒眰涓殑鍙傛暟錛屽茍灝嗗弬鏁板艱緗垚Action瀵瑰簲鐨勫睘鎬у箋?br /> prepare錛氬鏋渁ction瀹炵幇浜哖reparable鎺ュ彛錛屽皢浼氳皟鐢ㄨ鎷︽埅鍣ㄧ殑prepare()鏂規硶銆?br /> static-params錛氳繖涓嫤鎴櫒璐熻矗灝唜ml涓?lt;action>鏍囩涓?lt;param>鏍囩涓殑鍙傛暟浼犲叆action銆?br /> scope錛氳繖鏄寖鍥磋漿鎹㈡嫤鎴櫒錛屽畠鍙互灝咥ction鐘舵佷俊鎭繚瀛樺埌HttpSession鑼冨洿錛屾垨鑰呬繚瀛樺埌ServletContext鑼冨洿鍐呫?br /> servlet-config錛氬鏋滄煇涓狝ction闇瑕佺洿鎺ヨ闂甋ervlet API錛屽氨鏄氳繃榪欎釜鎷︽埅鍣ㄥ疄鐜扮殑銆?br /> 娉ㄦ剰錛氬敖閲忛伩鍏嶅湪Action涓洿鎺ヨ闂甋ervlet API錛岃繖鏍蜂細瀵艱嚧Action涓嶴ervlet鐨勯珮鑰﹀悎銆?br /> roles錛氳繖鏄竴涓狫AAS錛圝ava Authentication and Authorization Service錛孞ava鎺堟潈鍜岃璇佹湇鍔★級鎷︽埅鍣紝鍙湁褰撴祻瑙堣呭彇寰楀悎閫傜殑鎺堟潈鍚庯紝鎵嶅彲浠ヨ皟鐢ㄨ璇ユ嫤鎴櫒鎷︽埅鐨凙ction銆?br /> timer錛氳繖涓嫤鎴櫒璐熻矗杈撳嚭Action鐨勬墽琛屾椂闂達紝榪欎釜鎷︽埅鍣ㄥ湪鍒嗘瀽璇ction鐨勬ц兘鐡墮鏃舵瘮杈冩湁鐢ㄣ?br /> token錛氳繖涓嫤鎴櫒涓昏鐢ㄤ簬闃繪閲嶅鎻愪氦錛屽畠媯鏌ヤ紶鍒癆ction涓殑token錛屼粠鑰岄槻姝㈠嬈℃彁浜ゃ?br /> token-session錛氳繖涓嫤鎴櫒鐨勪綔鐢ㄤ笌鍓嶄竴涓熀鏈被浼鹼紝鍙槸瀹冩妸token淇濆瓨鍦℉ttpSession涓?br /> validation錛氶氳繃鎵ц鍦▁xxAction-validation.xml涓畾涔夌殑鏍¢獙鍣紝浠庤屽畬鎴愭暟鎹牎楠屻?br /> workflow錛氳繖涓嫤鎴櫒璐熻矗璋冪敤Action綾諱腑鐨剉alidate鏂規硶錛屽鏋滄牎楠屽け璐ワ紝鍒欒繑鍥瀒nput鐨勯昏緫瑙嗗浘銆?br /> 澶ч儴鍒嗘椂鍊欙紝寮鍙戣呮棤闇鎵嬪姩鎺у埗榪欎簺鎷︽埅鍣紝鍥犱負struts-default.xml鏂囦歡涓凡緇忛厤緗簡榪欎簺鎷︽埅鍣紝鍙鎴戜滑瀹氫箟鐨勫寘緇ф壙浜嗙郴緇熺殑struts-default鍖咃紝灝卞彲浠ョ洿鎺ヤ嬌鐢ㄨ繖浜涙嫤鎴櫒銆?/p> <p>褰撶劧錛孲truts2鐨勬嫤鎴櫒鏈哄埗騫朵笉鏄潵鑷簬Struts1錛岃屾槸鏉ヨ嚜浜嶹ebWork銆?/p> <br /> <img src ="http://m.tkk7.com/fantasy/aggbug/257311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/fantasy/" target="_blank">Web 2.0 鎶鏈祫婧?/a> 2009-03-02 11:31 <a href="http://m.tkk7.com/fantasy/articles/257311.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://xixidhw.com" target="_blank">亚洲AV成人精品日韩一区18p</a>| <a href="http://linmh.com" target="_blank">台湾一级毛片永久免费</a>| <a href="http://www769393.com" target="_blank">免费精品一区二区三区在线观看</a>| <a href="http://sdsupuchem.com" target="_blank">亚洲精品一区二区三区四区乱码</a>| <a href="http://fanqi5.com" target="_blank">无码A级毛片免费视频内谢</a>| <a href="http://lemonbt.com" target="_blank">久久精品国产亚洲AV无码麻豆 </a>| <a href="http://by7258.com" target="_blank">精品在线观看免费</a>| <a href="http://1877808.com" target="_blank">免费人成视频在线观看视频</a>| <a href="http://aqdav22.com" target="_blank">精品在线视频免费</a>| <a href="http://33dh2.com" target="_blank">亚洲色欲久久久综合网东京热</a>| <a href="http://8mav1000.com" target="_blank">免费毛片在线看不用播放器</a>| <a href="http://5g5t.com" target="_blank">亚洲AV综合色区无码一区</a>| <a href="http://jiezinet.com" target="_blank">57pao一国产成永久免费</a>| <a href="http://yg36.com" target="_blank">亚洲熟妇无码八V在线播放</a>| <a href="http://ywzms.com" target="_blank">免费二级毛片免费完整视频</a>| <a href="http://bjqhkf.com" target="_blank">国产精品免费看久久久香蕉</a>| <a href="http://22youjizz.com" target="_blank">久久精品视频亚洲</a>| <a href="http://phlinhng.com" target="_blank">无人在线直播免费观看</a>| <a href="http://qestest.com" target="_blank">国产亚洲福利一区二区免费看 </a>| <a href="http://142121.com" target="_blank">国产自国产自愉自愉免费24区</a>| <a href="http://niutextile.com" target="_blank">亚洲av无码无在线观看红杏</a>| <a href="http://bb927bb.com" target="_blank">亚洲美女视频免费</a>| <a href="http://bogygames.com" target="_blank">亚洲国产精华液2020</a>| <a href="http://bqjonline.com" target="_blank">亚洲精品老司机在线观看</a>| <a href="http://jjwgzx.com" target="_blank">国产va在线观看免费</a>| <a href="http://lswqn.com" target="_blank">亚洲av一本岛在线播放</a>| <a href="http://t66ycom.com" target="_blank">四虎永久在线精品视频免费观看</a>| <a href="http://xbooktxt.com" target="_blank">国产精品内射视频免费</a>| <a href="http://gzmsijz.com" target="_blank">亚洲精品成人图区</a>| <a href="http://71caoxee.com" target="_blank">免费无遮挡无码永久在线观看视频</a>| <a href="http://011107.com" target="_blank">又黄又大的激情视频在线观看免费视频社区在线 </a>| <a href="http://webgame86.com" target="_blank">男人免费视频一区二区在线观看</a>| <a href="http://scjcled.com" target="_blank">亚洲啪啪AV无码片</a>| <a href="http://43sihu.com" target="_blank">国产又黄又爽又猛免费app</a>| <a href="http://by6635.com" target="_blank">日韩在线一区二区三区免费视频 </a>| <a href="http://tiantangapp.com" target="_blank">又粗又大又猛又爽免费视频</a>| <a href="http://www-64000.com" target="_blank">最新国产乱人伦偷精品免费网站 </a>| <a href="http://mcsser.com" target="_blank">亚洲AV永久无码精品成人</a>| <a href="http://bohaolg.com" target="_blank">最近2019中文字幕mv免费看</a>| <a href="http://www321fafa.com" target="_blank">三根一起会坏掉的好痛免费三级全黄的视频在线观看 </a>| <a href="http://scycho.com" target="_blank">中文字幕无码免费久久99</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>