锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩av无码中文,亚洲精品在线播放视频,亚洲AV无码一区东京热久久 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="mimguoo" class="content"><a >杞嚜錛歨ttp://www.javaeye.com/wiki/struts2/1397-deep-into-struts2-interceptors#top</a><br /> <br /> 鍦ㄤ箣鍓嶇殑鏂囩珷涓紝鎴戜滑宸茬粡娑夊強(qiáng)鍒頒簡(jiǎn)鎷︽埅鍣紙Interceptor錛夌殑姒傚康銆?<br /> <br /> <div id="iukwseo" class="quote_title">downpour 鍐欓亾</div> <div id="ymqekkk" class="quote_div">鎷︽埅鍣ㄦ槸AOP涓殑姒傚康錛屽畠鏈韓鏄竴孌典唬鐮侊紝鍙互閫氳繃瀹氫箟“緇囧叆鐐?#8221;錛屾潵鎸囧畾鎷︽埅鍣ㄧ殑浠g爜鍦?#8220;緇囧叆鐐?#8221;鐨勫墠鍚庢墽琛岋紝浠庤岃搗鍒版嫤鎴殑浣滅敤銆傛濡備笂闈?Struts2鐨凴eference涓榪扮殑錛孲truts2鐨処nterceptor錛屽叾鎷︽埅鐨勫璞℃槸Action浠g爜錛屽彲浠ュ畾涔夊湪Action浠g爜涔嬪墠鎴栬呬箣鍚庢墽琛屾嫤鎴櫒鐨勪唬鐮併?</div> <br /> <br /> 鎺ヤ笅鏉ワ紝鎴戜滑灝嗛噸鐐硅璁轟竴涓婼truts2涓殑鎷︽埅鍣ㄧ殑鍐呴儴緇撴瀯鍜屾墽琛岄『搴忥紝騫剁粨鍚堟簮鐮佽繘琛屽垎鏋愩?</div> <div class="meacwom" 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="qqueqmc" 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鍦ㄦ渶閲岄潰銆傝繖鏍風(fēng)殑緇撴瀯錛屽ぇ姒傛湁浠ヤ笅涓浜涚壒鐐癸細(xì) <br /> <br /> <strong>1. 鏁翠釜緇撴瀯灝卞鍚屼竴涓爢鏍堬紝闄や簡(jiǎn)Action浠ュ錛屽爢鏍堜腑鐨勫叾浠栧厓绱犳槸Interceptor</strong> <br /> <br /> <strong>2. Action浣嶄簬鍫嗘爤鐨勫簳閮ㄣ傜敱浜庡爢鏍?鍏堣繘鍚庡嚭"鐨勭壒鎬э紝濡傛灉鎴戜滑璇曞浘鎶夾ction鎷垮嚭鏉ユ墽琛岋紝鎴戜滑蹇呴』棣栧厛鎶婁綅浜嶢ction涓婄鐨処nterceptor鎷垮嚭鏉ユ墽琛屻傝繖鏍鳳紝鏁翠釜鎵ц灝卞艦鎴愪簡(jiǎn)涓涓掑綊璋冪敤</strong> <br /> <br /> <strong>3. 姣忎釜浣嶄簬鍫嗘爤涓殑Interceptor錛岄櫎浜?jiǎn)闇瑕佸畬鎴愬畠鑷韓鐨勯昏緫錛岃繕闇瑕佸畬鎴愪竴涓壒孌婄殑鎵ц鑱岃矗銆傝繖涓墽琛岃亴璐f湁3縐嶉夋嫨錛?<br /> <br /> <span style="color: blue">1) 涓鏁翠釜鎵ц錛岀洿鎺ヨ繑鍥炰竴涓瓧絎︿覆浣滀負(fù)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換錛屽茍灝嗕粬浠撼鍏ュ埌涓涓摼寮忕殑鏁版嵁緇撴瀯涓紙鎴戜滑鍙互鎶婂爢鏍堢粨鏋勪篃鐪嬩綔鏄竴涓掑綊鐨勯摼寮忕粨鏋勶級(jí)錛岃屾瘡涓厓绱犲張鏈夎矗浠昏礋璐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="muwieoo" class="content"><strong><span style="color: blue">Interceptor鐨勫畾涔?/span></strong> <br /> <br /> 鎴戜滑鏉ョ湅涓涓婭nterceptor鐨勬帴鍙g殑瀹氫箟錛?<br /> <br /> <div id="weykuus" class="dp-highlighter"> <div id="csyiuki" class="bar"> <div id="ogqceki" 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="cwykccy" class="keyword">public</span><span> </span><span id="emqieki" class="keyword">interface</span><span> Interceptor </span><span id="ueykcsi" class="keyword">extends</span><span> Serializable {   </span></span> <li><span>  </span> <li><span>    </span><span id="weiceca" class="comment">/** </span> </span> <li><span><span id="gqsueka" class="comment">     * Called to let an interceptor clean up any resources it has allocated. </span> </span> <li><span><span id="wyiceea" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="ckeiuiq" class="keyword">void</span><span> destroy();   </span></span> <li><span>  </span> <li><span>    </span><span id="icmoiym" class="comment">/** </span> </span> <li><span><span id="suuyigw" class="comment">     * Called after an interceptor is created, but before any requests are processed using </span> </span> <li><span><span id="keoysag" class="comment">     * {@link #intercept(com.opensymphony.xwork2.ActionInvocation) intercept} , giving </span> </span> <li><span><span id="4u4koam" class="comment">     * the Interceptor a chance to initialize any needed resources. </span> </span> <li><span><span id="a6is4k6" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="4ouim6e" class="keyword">void</span><span> init();   </span></span> <li><span>  </span> <li><span>    </span><span id="imiugi4" class="comment">/** </span> </span> <li><span><span id="meec46e" 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="s26cig4" 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="s4quyi4" class="comment">     * </span> </span> <li><span><span id="i4eoakw" class="comment">     * @return the return code, either returned from {@link ActionInvocation#invoke()}, or from the interceptor itself. </span> </span> <li><span><span id="4wg4k46" class="comment">     * @throws Exception any system-level error, as defined in {@link com.opensymphony.xwork2.Action#execute()}. </span> </span> <li><span><span id="gsmgsau" class="comment">     */</span><span>  </span></span> <li><span>    String intercept(ActionInvocation invocation) </span><span id="26co4ew" 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畾涔夋病鏈変粈涔堢壒鍒殑鍦版柟錛岄櫎浜?jiǎn)init鍜宒estory鏂規(guī)硶浠ュ錛宨ntercept鏂規(guī)硶鏄疄鐜版暣涓嫤鎴櫒鏈哄埗鐨勬牳蹇?jī)鏂规硶銆傝屽畠鎵渚濊禆鐨勫弬鏁癆ctionInvocation鍒欐槸鎴戜滑涔嬪墠绔犺妭涓浘緇忔彁鍒拌繃鐨勮憲鍚嶇殑<strong>Action璋冨害鑰?/strong>銆?<br /> <br /> 鎴戜滑鍐嶆潵鐪嬬湅涓涓吀鍨嬬殑Interceptor鐨勬娊璞″疄鐜扮被錛?<br /> <br /> <div id="kgg2e24" class="dp-highlighter"> <div id="6mgicko" class="bar"> <div id="s6siuy2" 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="mc6ko2a" class="keyword">public</span><span> </span><span id="qqmeyok" class="keyword">abstract</span><span> </span><span id="a4oqyig" class="keyword">class</span><span> AroundInterceptor </span><span id="scc42e4" class="keyword">extends</span><span> AbstractInterceptor {   </span></span> <li><span>       </span> <li><span>    </span><span id="6226kwm" class="comment">/* (non-Javadoc) </span> </span> <li><span><span id="4q22wga" class="comment">     * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation) </span> </span> <li><span><span id="megs6yc" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="4wgau6k" class="annotation">@Override</span><span>  </span></span> <li><span>    </span><span id="a4u42me" class="keyword">public</span><span> String intercept(ActionInvocation invocation) </span><span id="gyi62oq" class="keyword">throws</span><span> Exception {   </span></span> <li><span>        String result = </span><span id="w44kg24" class="keyword">null</span><span>;   </span></span> <li><span>  </span> <li><span>        before(invocation);   </span> <li><span>        </span><span id="wkgqcak" 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="ow6qm6w" class="keyword">return</span><span> result;   </span></span> <li><span>    }   </span> <li><span>       </span> <li><span>    </span><span id="s2sqos6" class="keyword">public</span><span> </span><span id="w62q2qy" class="keyword">abstract</span><span> </span><span id="6yy4o6a" class="keyword">void</span><span> before(ActionInvocation invocation) </span><span id="aq6y2cc" class="keyword">throws</span><span> Exception;   </span></span> <li><span>  </span> <li><span>    </span><span id="4w6coe4" class="keyword">public</span><span> </span><span id="u4oq6o6" class="keyword">abstract</span><span> </span><span id="qacgqgi" class="keyword">void</span><span> after(ActionInvocation invocation, String resultCode) </span><span id="aysuek6" 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 /> 鍦ㄨ繖涓疄鐜扮被涓紝瀹為檯涓婂凡緇忓疄鐜頒簡(jiǎn)鏈綆鍗曠殑鎷︽埅鍣ㄧ殑闆忓艦銆傛垨璁稿ぇ瀹跺榪欐牱鐨勪唬鐮佽繕姣旇緝闄岀敓錛岃繖娌℃湁鍏崇郴銆傛垜鍦ㄨ繖閲岄渶瑕佹寚鍑虹殑鏄竴涓緢閲嶈鐨勬柟娉昳nvocation.invoke()銆傝繖鏄疉ctionInvocation涓殑鏂規(guī)硶錛岃孉ctionInvocation鏄疉ction璋冨害鑰咃紝鎵浠ヨ繖涓柟娉曞叿澶囦互涓?灞傚惈涔夛細(xì) <br /> <br /> <strong>1. 濡傛灉鎷︽埅鍣ㄥ爢鏍堜腑榪樻湁鍏朵粬鐨処nterceptor錛岄偅涔坕nvocation.invoke()灝嗚皟鐢ㄥ爢鏍堜腑涓嬩竴涓狪nterceptor鐨勬墽琛屻?/strong> <br /> <br /> <strong>2. 濡傛灉鎷︽埅鍣ㄥ爢鏍堜腑鍙湁Action浜?jiǎn)锛岄偅涔坕nvocation.invoke()灝嗚皟鐢ˋction鎵ц銆?/strong> <br /> <br /> 鎵浠ワ紝鎴戜滑鍙互鍙戠幇錛宨nvocation.invoke()榪欎釜鏂規(guī)硶鍏跺疄鏄暣涓嫤鎴櫒妗嗘灦鐨勫疄鐜版牳蹇?jī)銆傚熀浜庤繖鏍風(fēng)殑瀹炵幇鏈哄埗錛屾垜浠繕鍙互寰楀埌涓嬮潰2涓潪甯擱噸瑕佺殑鎺ㄨ錛?<br /> <br /> <strong>1. 濡傛灉鍦ㄦ嫤鎴櫒涓紝鎴戜滑涓嶄嬌鐢╥nvocation.invoke()鏉ュ畬鎴愬爢鏍堜腑涓嬩竴涓厓绱犵殑璋冪敤錛岃屾槸鐩存帴榪斿洖涓涓瓧絎︿覆浣滀負(fù)鎵ц緇撴灉錛岄偅涔堟暣涓墽琛屽皢琚腑姝€?/strong> <br /> <br /> <strong>2. 鎴戜滑鍙互浠nvocation.invoke()涓虹晫錛屽皢鎷︽埅鍣ㄤ腑鐨勪唬鐮佸垎鎴?涓儴鍒嗭紝鍦╥nvocation.invoke()涔嬪墠鐨勪唬鐮侊紝灝嗕細(xì)鍦ˋction涔嬪墠琚緷嬈℃墽琛岋紝鑰屽湪invocation.invoke()涔嬪悗鐨勪唬鐮侊紝灝嗕細(xì)鍦ˋction涔嬪悗琚嗗簭鎵ц銆?/strong> <br /> <br /> 鐢辨錛屾垜浠氨鍙互閫氳繃invocation.invoke()浣滀負(fù)Action浠g爜鐪熸鐨勬嫤鎴偣錛屼粠鑰屽疄鐜癆OP銆?<br /> <br /> <strong><span style="color: blue">Interceptor鎷︽埅綾誨瀷</span></strong> <br /> <br /> 浠庝笂闈㈢殑鍒嗘瀽錛屾垜浠煡閬擄紝鏁翠釜鎷︽埅鍣ㄧ殑鏍稿績(jī)閮ㄥ垎鏄痠nvocation.invoke()榪欎釜鍑芥暟鐨勮皟鐢ㄤ綅緗備簨瀹炰笂錛屾垜浠篃姝e紡鏍規(guī)嵁榪欏彞浠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鎷︽埅瀵規(guī)垜浠潵璇存槸涓嶅鐨勶紝鍥犱負(fù)鎴戜滑闇瑕佸湪Action鎵ц瀹屼箣鍚庯紝浣嗘槸榪樻病鏈夊洖鍒拌鍥懼眰涔嬪墠錛屽仛涓浜涗簨鎯呫係truts2鍚屾牱鏀寔榪欐牱鐨勬嫤鎴紝榪欑鎷︽埅鏂瑰紡錛屾槸閫氳繃鍦ㄦ嫤鎴櫒涓敞鍐屼竴涓狿reResultListener鐨勬帴鍙f潵瀹炵幇鐨勩?<br /> <br /> <div id="e2ga6um" class="dp-highlighter"> <div id="ogcwkys" class="bar"> <div id="yqsgaqm" 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="qiccggi" class="keyword">public</span><span> </span><span id="y46gsc6" class="keyword">interface</span><span> PreResultListener {   </span></span> <li><span>  </span> <li><span>    </span><span id="624k2iq" class="comment">/** </span> </span> <li><span><span id="qg22e2o" class="comment">     * This callback method will be called after the Action execution and before the Result execution. </span> </span> <li><span><span id="4egak6g" class="comment">     * </span> </span> <li><span><span id="u24uyyy" class="comment">     * @param invocation </span> </span> <li><span><span id="4ssu4qy" class="comment">     * @param resultCode </span> </span> <li><span><span id="oeg22ku" class="comment">     */</span><span>  </span></span> <li><span>    </span><span id="6eu4awu" 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鑳藉鏀寔濡傛澶氱殑鎷︽埅綾誨瀷錛屼笌鍏舵湰韜殑鏁版嵁緇撴瀯鍜屾暣浣撹璁℃湁寰堝ぇ鐨勫叧緋匯傛濡傛垜鍦ㄤ箣鍓嶇殑鏂囩珷涓墍鎻愬埌鐨勶細(xì) <br /> <br /> <div id="ee6w664" class="quote_title">downpour 鍐欓亾</div> <div id="mgaugq2" class="quote_div">鍥犱負(fù)Action鏄竴涓櫘閫氱殑Java綾伙紝鑰屼笉鏄竴涓猄ervlet綾伙紝瀹屽叏鑴辯浜嶹eb瀹瑰櫒錛屾墍浠ユ垜浠氨鑳藉鏇村姞鏂逛究鍦板Control灞傝繘琛屽悎鐞嗙殑灞傛璁捐錛屼粠鑰屾娊璞″嚭璁稿鍏叡鐨勯昏緫錛屽茍灝嗚繖浜涢昏緫鑴辯鍑篈ction瀵硅薄鏈韓銆?/div> <br /> <br /> 鎴戜滑鍙互鐪嬪埌錛孲truts2瀵逛簬鏁翠釜鎵ц鐨勫垝鍒嗭紝浠嶪nterceptor鍒癆ction涓鐩村埌Result錛屾瘡涓灞傞兘鑱岃矗鏄庣‘銆備笉浠呭姝わ紝Struts2榪樹負(fù)姣忎竴涓眰嬈′箣鍓嶉兘璁劇珛浜?jiǎn)鎭板鍏跺垎鐨勬彃鍏ョ倧V備嬌寰楁暣涓狝ction灞傜殑鎵╁睍鎬у緱鍒頒簡(jiǎn)鍙叉棤鍓嶄緥鐨勬彁鍗囥?<br /> <br /> <strong><span style="color: blue">Interceptor鎵ц欏哄簭</span></strong> <br /> <br /> Interceptor鐨勬墽琛岄『搴忔垨璁告槸鎴戜滑鍦ㄦ暣涓繃紼嬩腑鏈鏈鍏沖績(jī)鐨勯儴鍒嗐傛牴鎹笂闈㈡墍鎻愬埌鐨勬蹇碉紝鎴戜滑瀹為檯涓婂凡緇忚兘澶熷ぇ鑷存槑鐧戒簡(jiǎn)Interceptor鐨勬墽琛屾満鐞嗐傛垜浠潵鐪嬬湅Struts2鐨凴eference瀵笽nterceptor鎵ц欏哄簭鐨勪竴涓艦璞$殑渚嬪瓙銆?<br /> <br /> 濡傛灉鎴戜滑鏈変竴涓猧nterceptor-stack鐨勫畾涔夊涓嬶細(xì) <br /> <br /> <div id="goisu2c" class="dp-highlighter"> <div id="eumikik" class="bar"> <div id="4yeg6k2" 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="o46s6us" class="tag"><</span><span id="w4mc6ig" class="tag-name">interceptor-stack</span><span> </span><span id="cy4cucc" class="attribute">name</span><span>=</span><span id="wwo2io6" class="attribute-value">"xaStack"</span><span id="2kuyi2g" class="tag">></span><span>  </span></span> <li><span>  </span><span id="2c22o2e" class="tag"><</span><span id="m6si2ce" class="tag-name">interceptor-ref</span><span> </span><span id="ywi4u4u" class="attribute">name</span><span>=</span><span id="oegsyug" class="attribute-value">"thisWillRunFirstInterceptor"</span><span id="44o2ym4" class="tag">/></span><span>  </span></span> <li><span>  </span><span id="4s4i44y" class="tag"><</span><span id="24sc64s" class="tag-name">interceptor-ref</span><span> </span><span id="u6c6amy" class="attribute">name</span><span>=</span><span id="w64c42g" class="attribute-value">"thisWillRunNextInterceptor"</span><span id="m266uoe" class="tag">/></span><span>  </span></span> <li><span>  </span><span id="26mk24w" class="tag"><</span><span id="2e4uyuw" class="tag-name">interceptor-ref</span><span> </span><span id="ookek26" class="attribute">name</span><span>=</span><span id="yogug4a" class="attribute-value">"followedByThisInterceptor"</span><span id="6mw2eww" class="tag">/></span><span>  </span></span> <li><span>  </span><span id="o642k4g" class="tag"><</span><span id="u4ye4oc" class="tag-name">interceptor-ref</span><span> </span><span id="asg4q2c" class="attribute">name</span><span>=</span><span id="qs4saeo" class="attribute-value">"thisWillRunLastInterceptor"</span><span id="q2wycyq" class="tag">/></span><span>  </span></span> <li><span id="q4we6oy" class="tag"></</span><span id="aw6e44y" class="tag-name">interceptor-stack</span><span id="6ygsec2" 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箞錛屾暣涓墽琛岀殑欏哄簭澶ф鍍忚繖鏍鳳細(xì) <br /> <br /> <img alt="" src="http://www.javaeye.com/upload/attachment/71392/23045c94-b72a-3c04-9c6c-06ad4392d743.gif" /> <br /> <br /> 鍦ㄨ繖閲岋紝鎴戠◢寰敼浜?jiǎn)涓涓婼truts2鐨凴eference涓殑鎵ц欏哄簭紺轟緥錛屼嬌寰楁暣涓墽琛岄『搴忔洿鍔犺兘澶熻鐞嗚В銆傛垜浠彲浠ョ湅鍒幫紝閫掑綊璋冪敤淇濊瘉浜?jiǎn)鍚効U嶅悇鏍風(fēng)殑鎷︽埅綾誨瀷鐨勬墽琛岃兘澶熶簳浜曟湁鏉°?<br /> <br /> 璇鋒敞鎰忓湪榪欓噷錛屾瘡涓嫤鎴櫒涓殑浠g爜鐨勬墽琛岄『搴忥紝鍦ˋction涔嬪墠錛屾嫤鎴櫒鐨勬墽琛岄『搴忎笌鍫嗘爤涓畾涔夌殑涓鑷達(dá)紱鑰屽湪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="iwo6mee" class="content">鎺ヤ笅鏉ユ垜浠氨鏉ョ湅鐪嬫簮鐮侊紝鐪嬬湅Struts2鏄浣曚繚璇佹嫤鎴櫒銆丄ction涓嶳esult涓夎呬箣闂寸殑鎵ц欏哄簭鐨勩?<br /> <br /> 涔嬪墠鎴戞浘緇忔彁鍒幫紝ActionInvocation鏄疭truts2涓殑璋冨害鍣紝鎵浠ヤ簨瀹炰笂錛岃繖浜涗唬鐮佺殑璋冨害鎵ц錛屾槸鍦ˋctionInvocation鐨勫疄鐜扮被涓畬鎴愮殑錛岃繖閲岋紝鎴戞娊鍙栦簡(jiǎn)DefaultActionInvocation涓殑invoke()鏂規(guī)硶錛屽畠?yōu)畣鍚戞垜浠睍绀轰竴鍒囥?<br /> <br /> <div id="mgcuwy6" class="dp-highlighter"> <div id="2i2giqq" class="bar"> <div id="keskw4o" 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="m4mu22e" class="comment">/** </span> </span> <li><span><span id="4464u4a" class="comment"> * @throws ConfigurationException If no result can be found with the returned code </span> </span> <li><span><span id="iqckee6" class="comment"> */</span><span>  </span></span> <li><span id="6ee2emg" class="keyword">public</span><span> String invoke() </span><span id="siw46y6" class="keyword">throws</span><span> Exception {   </span></span> <li><span>    String profileKey = </span><span id="oo4yq4g" class="string">"invoke: "</span><span>;   </span></span> <li><span>    </span><span id="woqkksi" class="keyword">try</span><span> {   </span></span> <li><span>        UtilTimerStack.push(profileKey);   </span> <li><span>               </span> <li><span>        </span><span id="26isu6c" class="keyword">if</span><span> (executed) {   </span></span> <li><span>            </span><span id="2cews4g" class="keyword">throw</span><span> </span><span id="yy6km64" class="keyword">new</span><span> IllegalStateException(</span><span id="ckugq2e" class="string">"Action has already executed"</span><span>);   </span></span> <li><span>        }   </span> <li><span>        </span><span id="6w6yaeu" class="comment">// 渚濇璋冪敤鎷︽埅鍣ㄥ爢鏍堜腑鐨勬嫤鎴櫒浠g爜鎵ц </span><span>  </span></span> <li><span>        </span><span id="mmk4k6q" class="keyword">if</span><span> (interceptors.hasNext()) {   </span></span> <li><span>            </span><span id="4eq6kk4" class="keyword">final</span><span> InterceptorMapping interceptor = (InterceptorMapping) interceptors.next();   </span></span> <li><span>            UtilTimerStack.profile(</span><span id="k6g4g2g" class="string">"interceptor: "</span><span>+interceptor.getName(),    </span></span> <li><span>                    </span><span id="e4asce2" class="keyword">new</span><span> UtilTimerStack.ProfilingBlock<String>() {   </span></span> <li><span>                        </span><span id="isu2u64" class="keyword">public</span><span> String doProfiling() </span><span id="mui4m66" class="keyword">throws</span><span> Exception {   </span></span> <li><span>                         </span><span id="oeiwyqm" class="comment">// 灝咥ctionInvocation浣滀負(fù)鍙傛暟錛岃皟鐢╥nterceptor涓殑intercept鏂規(guī)硶鎵ц </span><span>  </span></span> <li><span>                            resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.</span><span id="u4w2e4w" class="keyword">this</span><span>);   </span></span> <li><span>                            </span><span id="w4gsmo6" class="keyword">return</span><span> </span><span id="4sces6s" class="keyword">null</span><span>;   </span></span> <li><span>                        }   </span> <li><span>            });   </span> <li><span>        } </span><span id="ckoys4e" class="keyword">else</span><span> {   </span></span> <li><span>            resultCode = invokeActionOnly();   </span> <li><span>        }   </span> <li><span>  </span> <li><span>        </span><span id="og24cy6" 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="mugocc4" class="comment">// return above and flow through again </span><span>  </span></span> <li><span>        </span><span id="6ccoqie" class="keyword">if</span><span> (!executed) {   </span></span> <li><span>            </span><span id="4wiu2i6" class="comment">// 鎵цPreResultListener </span><span>  </span></span> <li><span>            </span><span id="gyauqyk" class="keyword">if</span><span> (preResultListeners != </span><span id="w6esu6w" class="keyword">null</span><span>) {   </span></span> <li><span>                </span><span id="yoyy6o2" 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="2424co6" class="string">"preResultListener: "</span><span>;   </span></span> <li><span>                    </span><span id="s4uwweu" class="keyword">try</span><span> {   </span></span> <li><span>                            UtilTimerStack.push(_profileKey);   </span> <li><span>                            listener.beforeResult(</span><span id="agcwasi" class="keyword">this</span><span>, resultCode);   </span></span> <li><span>                    }   </span> <li><span>                    </span><span id="46646ce" 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="2226qu4" class="comment">// now execute the result, if we're supposed to </span><span>  </span></span> <li><span>            </span><span id="wkw2kwi" class="comment">// action涓巌nterceptor鎵ц瀹屾瘯錛屾墽琛孯esult </span><span>  </span></span> <li><span>            </span><span id="o64mcmg" 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="gokqeqq" class="keyword">true</span><span>;   </span></span> <li><span>        }   </span> <li><span>  </span> <li><span>        </span><span id="q4i62ew" class="keyword">return</span><span> resultCode;   </span></span> <li><span>    }   </span> <li><span>    </span><span id="emo4qu4" 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浣滀負(fù)鍙傛暟錛岃皟鐢╥nterceptor涓殑intercept鏂規(guī)硶鎵ц 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涓笉鍚岀殑灞傛錛屽湪榪欎釜鏂規(guī)硶涓兘鏈変綋鐜幫紝浠栦滑鍒嗗埆鏄細(xì)鎷︽埅鍣紙Interceptor錛夈丄ction銆丳reResultListener鍜孯esult銆傚湪榪欎釜鏂規(guī)硶涓紝淇濊瘉浜?jiǎn)杩欎簺灞倠啤鐨勬湁搴忚皟鐢ㄥ拰鎵ц銆傜敱姝ゆ垜浠篃鍙互鐪嬪嚭<strong><span style="color: red">Struts2鍦ˋction灞傛璁捐涓婄殑浼楀鑰冭檻錛屾瘡涓眰嬈¢兘鍏峰浜?jiǎn)楂樺害鐨勬墿灞曟у拰鎻掑叆鐐癸紝浣垮緱紼嬪簭鍛樺彲浠ュ湪浠諱綍鍠滄鐨勫眰嬈″姞鍏ヨ嚜宸辯殑瀹炵幇鏈哄埗鏀瑰彉Action鐨勮涓恒?/span></strong> <br /> <br /> 鍦ㄨ繖閲岋紝闇瑕佺壒鍒己璋冪殑錛屾槸鍏朵腑鎷︽埅鍣ㄩ儴鍒嗙殑鎵ц璋冪敤錛?<br /> <br /> <div id="uusaqgg" class="dp-highlighter"> <div id="somweis" class="bar"> <div id="e4c4sm2" 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="4wua244" 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 /> 琛ㄩ潰涓婏紝瀹冨彧鏄墽琛屼簡(jiǎn)鎷︽埅鍣ㄤ腑鐨刬ntercept鏂規(guī)硶錛屽鏋滄垜浠粨鍚堟嫤鎴櫒鏉ョ湅錛屽氨鑳界湅鍑虹偣绔潵錛?<br /> <br /> <div id="6y4c42k" class="dp-highlighter"> <div id="eg4ycao" class="bar"> <div id="q2q4242" 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="yqi24yo" class="keyword">public</span><span> String intercept(ActionInvocation invocation) </span><span id="2omw4ay" class="keyword">throws</span><span> Exception {   </span></span> <li><span>    String result = </span><span id="oyq4ee4" class="keyword">null</span><span>;   </span></span> <li><span>  </span> <li><span>        before(invocation);   </span> <li><span>        </span><span id="wg42iqw" class="comment">// 璋冪敤invocation鐨刬nvoke()鏂規(guī)硶錛屽湪榪欓噷褰㈡垚浜?jiǎn)閫掑綊璋冪敤 </span><span>  </span></span> <li><span>        result = invocation.invoke();   </span> <li><span>        after(invocation, result);   </span> <li><span>  </span> <li><span>        </span><span id="ois2mc4" 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()鏂規(guī)硶錛屽湪榪欓噷褰㈡垚浜?jiǎn)閫掑綊璋冪敤 result = invocation.invoke(); after(invocation, result); return result; }</pre> <br /> <br /> 鍘熸潵鍦╥ntercept()鏂規(guī)硶鍙堝ActionInvocation鐨刬nvoke()鏂規(guī)硶榪涜閫掑綊璋冪敤錛孉ctionInvocation寰幆宓屽鍦╥ntercept()涓紝涓鐩村埌璇彞result = invocation.invoke()鎵ц緇撴潫銆傝繖鏍鳳紝Interceptor鍙堜細(xì)鎸夌収鍒氬紑濮嬫墽琛岀殑閫嗗悜欏哄簭渚濇鎵ц緇撴潫銆?<br /> <br /> <strong><span style="color: red">涓涓湁搴忛摼琛紝閫氳繃閫掑綊璋冪敤錛屽彉鎴愪簡(jiǎn)涓涓爢鏍堟墽琛岃繃紼嬶紝灝嗕竴孌墊湁搴忔墽琛岀殑浠g爜鍙樻垚浜?孌墊墽琛岄『搴忓畬鍏ㄧ浉鍙嶇殑浠g爜榪囩▼錛屼粠鑰屽閥濡欏湴瀹炵幇浜?jiǎn)AOP銆?/span></strong>榪欎篃灝辨垚涓轟簡(jiǎn)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;姝ゅ北鏄垜寮錛屾鏍?wèi)鏄垜鏍藉Q岃鎵撴璺繃錛岀暀涓嬩拱璺儲(chǔ)錛?#8221;銆傞毦涓嶆垚紼嬪簭涓篃鏈?#8220;鎵撳姭”鐨勶紝璇寸殑娌¢敊錛屾嫤鎴櫒灝辨槸涓墦鍔殑銆?鍦ㄧ幇瀹炵敓媧諱腑錛屽姭鍖姭鐨勫ぇ閮芥槸閽辮儲(chǔ)錛屽綋鐒朵篃鏈夊埆鐨勪粈涔堬紝閭d箞紼嬪簭涓殑“鍔尓”鍔殑鍙堟槸浠涔堝憿錛熸垨鑰呰紼嬪簭涓負(fù)浠涔堥渶瑕佸畠錛熷湪鎴戜滑鐨勬棩甯哥紪紼嬩腑灝戜笉浜?jiǎn)鍐欎竴浜?閲嶅鐨勪唬鐮侊紝渚嬪鍦ㄤ竴涓湴鏂逛腑鍐欎簡(jiǎn)涓孌典唬鐮侊紝鍚庢潵鍙戠幇榪欐浠g爜鍦ㄥ叾瀹冨湴鏂逛腑鍚屾牱闇瑕侊紝鍦ㄤ紶緇熺殑緙栫▼涓垜浠竴瀹氫細(xì)閲囧彇澶嶅埗銆佺矘璐寸殑鍔炴硶銆傚鏋滆繖孌典唬鐮佸彧鍦ㄨ繖 涓涓や釜澶勯渶瑕侊紝鎴戜滑閲囧彇榪欑鍔炴硶錛岃繕璇寸殑榪囧幓錛屼絾鏄鏋滅郴緇熷榪欐浠g爜榪囦簬渚濊禆錛屼篃灝辨槸榪欐浠g爜鍦ㄧ郴緇熶腑鍑虹幇鐨勮繃澶氾紝濡傛灉閭d竴澶╂垜浠彂鐜拌繖孌典唬鐮佷腑鍦ㄦ煇浜?鍦版柟榪橀渶瑕佸畬鍠勶紝鎴戜滑鏄笉鏄鐫涓慨鏀瑰畠浠憿錛熸垜浼拌娌℃湁浜轟細(xì)榪欎箞鍋氾紝瀹冧弗閲嶈繚鍙嶄簡(jiǎn)杞歡寮鍙戜腑涓鏉¢潪甯擱噸瑕佺殑</span>DRY<span>瑙勫垯錛屼笉鍐欓噸澶嶄唬鐮併傝浜?jiǎn)杩欎箞澶氫綘涓瀹氱煡閬撴垜浠負(fù)浠涔堥渶瑕佸湪紼嬪簭涓紕涓涓?#8220;鍔尓”浜?jiǎn)鍚с傝繖涓?#8220;鍔尓”灝辨槸騫朵笉鏄姭鍙栦粈涔堜笢瑗匡紝鍙槸涓轟簡(jiǎn)鍦ㄦ煇涓▼搴忔墽琛屽墠鍚庯紝鍔ㄦ佺殑澧炲姞涓浜涘姛鑳斤紙浠ュ墠鎵鍐欓氱敤浠g爜鍧楋級(jí)鎴栬繘琛屼竴浜涙鏌ュ伐浣溿傞偅涔堣繖涓嫤鎴櫒鍒板簳鏄庝箞瀹炵幇鐨勫憿錛熷疄闄呬笂瀹冩槸鐢?/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>妗嗘灦鑰岃█錛屾鏄ぇ閲忕殑鍐呯疆鎷︽埅鍣ㄥ畬鎴愪簡(jiǎn)澶ч儴鍒嗘搷浣溿傚儚</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>涓烘垜浠彁渚涗簡(jiǎn)涓涓?/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>鎷︽埅鍣ㄧ殑鏍稿績(jī)鏂規(guī)硶錛屽疄鐜板叿浣撶殑鎷︽埅鎿嶄綔銆備笌</span>action<span>涓鏍鳳紝璇ユ柟娉曚篃榪斿洖涓涓瓧絎︿覆浣滀負(fù)閫昏緫瑙嗗浘銆傚鏋滄嫤鎴櫒鎴愬姛璋冪敤浜?/span>action<span>錛屽垯榪斿洖涓涓湡姝g殑錛屼篃灝辨槸璇?/span>action<span>涓?/span>execute()<span>鏂規(guī)硶榪斿洖鐨勯昏緫瑙嗗浘錛屽弽涔嬶紝鍒欒繑鍥炰竴涓嚜瀹氫箟鐨勯昏緫瑙嗗浘銆?/span></p> <p><span>閫氬父鎴戜滑浣跨敤鎷︽埅鍣ㄥ茍涓嶉渶瑕佺敵璇瘋祫婧愶紝涓烘</span>Struts2<span>榪樹負(fù)鎴戜滑鎻愪緵浜?jiǎn)涓涓?/span>AbstractInterceptor<span>綾伙紝璇ョ被鐨?/span>init()<span>鍜?/span>destroy()<span>閮芥槸絀哄疄鐜般傛垜浠紑鍙戣嚜宸辯殑鎷︽埅鍣ㄥ彧闇瑕佺戶鎵胯繖涓被灝辮浜?jiǎn)銆?/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"> 媯(gè)鏌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>涓庝箞浣跨敤鍛紵浣跨敤鏂規(guī)硶寰堢畝鍗曪紝濡備笅錛?/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>   涓鏃︽垜浠負(fù)鏌愪釜</span>action<span>寮曠敤浜?jiǎn)鑷畾涔夌殑鎷︽埅鍣ㄥQ?/span>struts2<span>榛樿鐨勬嫤鎴櫒灝變笉浼?xì)鍐嶈捣浣滅敤锛屽洜姝q橀渶瑕佸紩鐢ㄩ粯璁ゆ嫤鎴櫒銆?/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>寮曠敤鐨勮瘽錛屾瘡涓涓兘瑕侀厤緗竴閬嶅お楹葷儲(chǔ)浜?jiǎn)銆傛垜浠彲浠ユ妸瀹冨畾涔夋垚榛樿鐨勬嫤鎴櫒銆?/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>榪樹負(fù)鎴戜滑鎻愪緵浜?jiǎn)涓涓柟娉曡繃婊ょ殑鎷︽埅鍣?/span>MethodFilterInterceptor<span>綾伙紝璇ョ被緇ф壙</span>AbstractInterceptor<span>綾伙紝閲嶅啓浜?/span><span style="font-size: 10pt; color: #000000; font-family: &apos">intercept(ActionInvocation invocation)</span><span>騫舵彁渚涗簡(jiǎn)涓涓柊鐨勬柟娉?/span><span style="font-size: 10pt; color: #000000; font-family: &apos">doInterceptor(ActionInvocation invocation)</span><span>鎶借薄鏂規(guī)硶銆傝綾葷殑浣跨敤鏂規(guī)硶寰堢畝鍗曪紝灝變笉涓句緥浜?jiǎn)銆傝繖涓嫤鎴櫒涓庝互寰鐨勬嫤鎴櫒閰嶇疆鏈夋墍涓嶅悓銆傞偅灝辨槸鍙互鎸囧畾鍝簺鏂規(guī)硶闇瑕佽鎷︽埅錛岄偅浜涗笉闇瑕併傞氬父鍦ㄥ紩鐢ㄨ鎷︽埅鍣ㄦ椂鎸囧畾銆?/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涔嬪悗璋冪敤鍚楋紵璇村疄璇濇垜涔熸悶涓嶆竻妤氾紝鍦ㄨ繍鐢ㄧ殑榪囩▼涓紝澶у鎱㈡參鍦ㄦ潵浣撲細(xì)<br /> <br /> <br /> <p>鎷︽埅鍣ㄥ嚑涔庡畬鎴愪簡(jiǎn)Struts2妗嗘灦70%鐨勫伐浣滐紝鍖呮嫭瑙f瀽璇鋒眰鍙傛暟銆佸皢璇鋒眰鍙傛暟璧嬪肩粰Action灞炴с佹墽琛屾暟鎹牎楠屻佹枃浠朵笂浼?#8230;…錛孲truts2璁捐鐨勭伒宸фэ紝鏇村ぇ紼嬪害鍦板緱鐩婁簬鎷︽埅鍣ㄨ璁★紝褰撻渶瑕佹墿灞昐truts2鍔熻兘鏃訛紝鍙渶瑕佹彁渚涘搴旀嫤鎴櫒錛屽茍灝嗗畠閰嶇疆鍦⊿truts2瀹瑰櫒涓嵆鍙紱濡傛灉涓嶉渶瑕佽鍔熻兘鏃訛紝涔熷彧闇瑕佸彇娑堣鎷︽埅鍣ㄧ殑閰嶇疆鍗沖彲銆傝繖縐嶅彲鎻掓嫈寮忕殑璁捐錛屾鏄蔣浠惰璁¢鍩熶竴鐩村瓬瀛滀互姹傜殑鐩爣銆?/p> <p>瀹為檯涓婏紝Struts2鐨勭簿楂撳氨鍦ㄤ簬鎷︽埅鍣紝鎺屾彙浜?jiǎn)Struts2鐨勬嫤鎴櫒鏈哄埗錛屼綘灝卞彲浠ヨ綺鵑氫簡(jiǎn)Struts2銆?br /> 浠庢煇涓搴︽潵鐪嬶紝鎴戜滑鍙互鎶奡truts2妗嗘灦鐞嗚В鎴愪竴涓┖澹籌紝鑰岃繖浜涙嫤鎴櫒鍍忎竴涓竴涓娊灞夛紝闅忔椂鍙互<br /> 鎻掕繘鍏ワ紝涔熷彲浠ユ嫈鍑烘潵鈥斺旇繖鏄蔣浠朵駭鍝佷竴鐩磋拷姹傜殑鐩爣銆?br /> 濡傛灉浣犲枩嬈紝浣犲彲浠ユ妸Struts2鐨勫叏閮ㄦ彃浠舵嫈鍑猴紝閭d箞Struts2灝辨垚浜?jiǎn)涓涓┖瀹瑰櫒鈥斺?br /> 鑰岃繖縐嶇┖錛屾鏄?Struts2鐨勯瓍鍔涳紝浣犲彲浠ユ妸浠諱綍鑷繁鎯寵鐨勪笢瑗垮~鍏ヨ繘鍘伙紝鐢氳嚦鍖呮嫭鑷繁瀹屽叏瀹炵幇榪欎釜妗嗘灦銆?/p> <p>鍙︿竴鏂歸潰錛屽洜涓篠truts2鐨勬彃浠舵満鍒?Struts2鎻愪緵浜?jiǎn)鏃犻檺鎵╁睍鐨勫彲鑳芥э紝浣犲彲浠ユ妸鑷繁鎯寵鐨勪換浣?br /> 涓滆タ鍋氭垚鎻掍歡錛岀劧鍚庡~鍏truts2鈥斺旇繖鏍風(fēng)殑緇撴灉鏄細(xì)涓涓紒涓氾紝涓涓洟闃燂紝鍙互鎶婅嚜宸變笟鍔$浉鍏崇殑涓滆タ<br /> 鍋氭垚鎻掍歡錛岄殢鏃墮殢鍦板湴澶嶇敤銆?br /> 涔熷氨鏄錛氬鏋滀綘鎯寵錛屼綘鍙互鎶奡truts2鏀歸犳垚灞炰簬鑷繁鐨勬鏋躲?/p> <p>褰撶劧錛孲truts2涔熷唴寤轟簡(jiǎn)澶ч噺鐨勬嫤鎴櫒錛岃繖浜涙嫤鎴櫒浠ame-class瀵圭殑褰㈠紡閰嶇疆鍦╯truts-default. xml鏂囦歡涓紝鍏朵腑name鏄嫤鎴櫒鐨勫悕瀛楋紝灝辨槸浠ュ悗浣跨敤璇ユ嫤鎴櫒鐨勫敮涓鏍囪瘑錛沜lass鍒欐寚瀹氫簡(jiǎn)璇ユ嫤鎴櫒鐨勫疄鐜扮被錛屽鏋滄垜浠畾涔夌殑package緇ф壙浜?jiǎn)Struts2鐨勯粯璁truts-default鍖咃紝鍒欏彲浠ヨ嚜鐢變嬌鐢ㄤ笅闈㈠畾涔夌殑鎷︽埅鍣紝鍚﹀垯蹇呴』鑷繁瀹氫箟榪欎簺鎷︽埅鍣ㄣ?br /> 涓嬮潰鏄疭truts2鍐呭緩鎷︽埅鍣ㄧ殑綆瑕佷粙緇嶏細(xì)<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鐨勫紑鍙戞ā寮忔椂錛岃繖涓嫤鎴櫒浼?xì)鎻愪緵鏇村鐨勮皟璇曚俊鎭?br /> execAndWait錛氬悗鍙版墽琛孉ction錛岃礋璐e皢絳夊緟鐢婚潰鍙戦佺粰鐢ㄦ埛銆?br /> exception錛氳繖涓嫤鎴櫒璐熻矗澶勭悊寮傚父錛屽畠?yōu)畣寮傚父鏄牉畡湄?fù)緇撴灉銆?br /> fileUpload錛氳繖涓嫤鎴櫒涓昏鐢ㄤ簬鏂囦歡涓婁紶錛屽畠璐熻矗瑙f瀽琛ㄥ崟涓枃浠跺煙鐨勫唴瀹廣?<br /> i18n錛氳繖鏄敮鎸佸浗闄呭寲鐨勬嫤鎴櫒錛屽畠璐熻矗鎶婃墍閫夌殑璇█銆佸尯鍩熸斁鍏ョ敤鎴稴ession涓?br /> logger錛氳繖鏄竴涓礋璐f棩蹇楄褰曠殑鎷︽埅鍣紝涓昏鏄緭鍑篈ction鐨勫悕瀛椼?br /> model-driven錛氳繖鏄竴涓敤浜庢ā鍨嬮┍鍔ㄧ殑鎷︽埅鍣紝褰撴煇涓狝ction綾誨疄鐜頒簡(jiǎn)ModelDriven鎺ュ彛鏃訛紝瀹冭礋璐f妸getModel()鏂規(guī)硶鐨勭粨鏋滃爢鍏alueStack涓?<br /> scoped-model-driven錛氬鏋滀竴涓狝ction瀹炵幇浜?jiǎn)涓涓猄copedModelDriven鎺ュ彛錛岃鎷︽埅鍣ㄨ礋璐d粠鎸囧畾鐢熷瓨鑼冨洿涓壘鍑烘寚瀹氱殑Modol錛屽茍灝嗛氳繃setModel鏂規(guī)硶灝嗚Model浼犵粰Action瀹炰緥銆?br /> params錛氳繖鏄渶鍩烘湰鐨勪竴涓嫤鎴櫒錛屽畠璐熻矗瑙f瀽HTTP璇鋒眰涓殑鍙傛暟錛屽茍灝嗗弬鏁板艱緗垚Action瀵瑰簲鐨勫睘鎬у箋?br /> prepare錛氬鏋渁ction瀹炵幇浜?jiǎn)Preparable鎺ュ彛錛屽皢浼?xì)璋冪敤璇ユ嫤鎴櫒鐨刾repare()鏂規(guī)硶銆?br /> static-params錛氳繖涓嫤鎴櫒璐熻矗灝唜ml涓?lt;action>鏍囩涓?lt;param>鏍囩涓殑鍙傛暟浼犲叆action銆?br /> scope錛氳繖鏄寖鍥磋漿鎹㈡嫤鎴櫒錛屽畠鍙互灝咥ction鐘舵佷俊鎭繚瀛樺埌HttpSession鑼冨洿錛屾垨鑰呬繚瀛樺埌ServletContext鑼冨洿鍐呫?br /> servlet-config錛氬鏋滄煇涓狝ction闇瑕佺洿鎺ヨ闂甋ervlet API錛屽氨鏄氳繃榪欎釜鎷︽埅鍣ㄥ疄鐜扮殑銆?br /> 娉ㄦ剰錛氬敖閲忛伩鍏嶅湪Action涓洿鎺ヨ闂甋ervlet API錛岃繖鏍蜂細(xì)瀵艱嚧Action涓嶴ervlet鐨勯珮鑰﹀悎銆?br /> roles錛氳繖鏄竴涓狫AAS錛圝ava Authentication and Authorization Service錛孞ava鎺堟潈鍜岃璇佹湇鍔★級(jí)鎷︽埅鍣紝鍙湁褰撴祻瑙堣呭彇寰楀悎閫傜殑鎺堟潈鍚庯紝鎵嶅彲浠ヨ皟鐢ㄨ璇ユ嫤鎴櫒鎷︽埅鐨凙ction銆?br /> timer錛氳繖涓嫤鎴櫒璐熻矗杈撳嚭Action鐨勬墽琛屾椂闂達(dá)紝榪欎釜鎷︽埅鍣ㄥ湪鍒嗘瀽璇ction鐨勬ц兘鐡墮鏃舵瘮杈冩湁鐢ㄣ?br /> token錛氳繖涓嫤鎴櫒涓昏鐢ㄤ簬闃繪閲嶅鎻愪氦錛屽畠媯(gè)鏌ヤ紶鍒癆ction涓殑token錛屼粠鑰岄槻姝㈠嬈℃彁浜ゃ?br /> token-session錛氳繖涓嫤鎴櫒鐨勪綔鐢ㄤ笌鍓嶄竴涓熀鏈被浼鹼紝鍙槸瀹冩妸token淇濆瓨鍦℉ttpSession涓?br /> validation錛氶氳繃鎵ц鍦▁xxAction-validation.xml涓畾涔夌殑鏍¢獙鍣紝浠庤屽畬鎴愭暟鎹牎楠屻?br /> workflow錛氳繖涓嫤鎴櫒璐熻矗璋冪敤Action綾諱腑鐨剉alidate鏂規(guī)硶錛屽鏋滄牎楠屽け璐ワ紝鍒欒繑鍥瀒nput鐨勯昏緫瑙嗗浘銆?br /> 澶ч儴鍒嗘椂鍊欙紝寮鍙戣呮棤闇鎵嬪姩鎺у埗榪欎簺鎷︽埅鍣紝鍥犱負(fù)struts-default.xml鏂囦歡涓凡緇忛厤緗簡(jiǎn)榪欎簺鎷︽埅鍣紝鍙鎴戜滑瀹氫箟鐨勫寘緇ф壙浜?jiǎn)绯痪l熺殑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://17soco.com" target="_blank">亚洲日韩看片无码电影</a>| <a href="http://directzx.com" target="_blank">抽搐一进一出gif免费视频</a>| <a href="http://kkm55.com" target="_blank">亚洲国产黄在线观看</a>| <a href="http://295301.com" target="_blank">丁香花在线视频观看免费</a>| <a href="http://taoduoduo666.com" target="_blank">亚洲精品乱码久久久久久下载</a>| <a href="http://shunfk.com" target="_blank">免费电视剧在线观看</a>| <a href="http://eddiekidd.com" target="_blank">一区在线免费观看</a>| <a href="http://88ww99.com" target="_blank">亚洲乱亚洲乱淫久久</a>| <a href="http://c9133.com" target="_blank">国产在线a不卡免费视频</a>| <a href="http://ldcatv.com" target="_blank">免费成人在线视频观看</a>| <a href="http://cztshw.com" target="_blank">国产偷国产偷亚洲清高APP</a>| <a href="http://pgb168.com" target="_blank">久久精品亚洲综合专区</a>| <a href="http://junfurui.com" target="_blank">国产美女无遮挡免费视频网站 </a>| <a href="http://cxljdz.com" target="_blank">亚洲综合小说另类图片动图</a>| <a href="http://chiguigu.com" target="_blank">亚洲国产精品激情在线观看</a>| <a href="http://ddm88888.com" target="_blank">91免费在线播放</a>| <a href="http://lanoss.com" target="_blank">亚洲免费日韩无码系列</a>| <a href="http://sanyoumiaomu.com" target="_blank">亚洲国产情侣一区二区三区</a>| <a href="http://zz773.com" target="_blank">中文字幕亚洲不卡在线亚瑟</a>| <a href="http://lhtjdj.com" target="_blank">日韩毛片免费无码无毒视频观看</a>| <a href="http://727744.com" target="_blank">亚洲五月午夜免费在线视频</a>| <a href="http://whdysdt.com" target="_blank">色老板亚洲视频免在线观</a>| <a href="http://yuyang0752.com" target="_blank">国产亚洲综合网曝门系列</a>| <a href="http://66qiqi.com" target="_blank">免费无码又爽又刺激高潮的视频 </a>| <a href="http://327www.com" target="_blank">国产一精品一AV一免费孕妇</a>| <a href="http://56p6.com" target="_blank">在线免费观看伊人三级电影</a>| <a href="http://cc88899.com" target="_blank">亚洲欧美熟妇综合久久久久</a>| <a href="http://172pk.com" target="_blank">久久久久亚洲精品影视</a>| <a href="http://cn-taoqigui.com" target="_blank">免费一看一级毛片全播放</a>| <a href="http://929119.com" target="_blank">国产麻豆视频免费观看</a>| <a href="http://yaku100.com" target="_blank">久久国产乱子伦精品免费强</a>| <a href="http://shunfk.com" target="_blank">全黄A免费一级毛片</a>| <a href="http://jt4f.com" target="_blank">亚洲色大成网站www久久九</a>| <a href="http://v1s3u5.com" target="_blank">91亚洲国产成人精品下载</a>| <a href="http://www97544.com" target="_blank">亚洲无线码一区二区三区</a>| <a href="http://ywzms.com" target="_blank">mm1313亚洲精品无码又大又粗 </a>| <a href="http://99999pp.com" target="_blank">亚欧免费无码aⅴ在线观看</a>| <a href="http://aiwoqi.com" target="_blank">免费国产黄网站在线观看动图</a>| <a href="http://bz600.com" target="_blank">亚洲人成7777</a>| <a href="http://4438xx21.com" target="_blank">亚洲国产亚洲综合在线尤物</a>| <a href="http://78avai.com" target="_blank">亚洲AV无码一区二区乱孑伦AS</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>