锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1銆佷笅杞絘nt錛屼粠jakarta.apache.org
瀹夎鍦╟:\dev\ant錛屽畨瑁呰繃紼嬪氨涓嶈緇嗚浜嗭紝濡傛灉ant閮戒笉鎳傦紝閭g湅鏉ユ偍鏈変簺钀戒紞浜嗭紝涔熷厛鍒線涓嬬湅浜嗭紝瀛︿範涓涓媋nt鍏?
2銆佷笅杞絰doclet錛屽綋鐒舵槸xdoclet.sf.net浜嗭紝涓嬭澆鍚庢妸lib鐨勪笢瑗挎斁緗埌
c:\dev\ant\lib\xdoclet
3銆乯ava 浠g爜
鍙槸涓緥瀛愯屽凡
===================================================================
XdocletMain.java :
===================================================================
浠g爜:
/**
聽* Created by IntelliJ IDEA.
聽* User: wangzy
聽* Date: 2004-12-5
聽* @spring.bean
聽*聽 id="XdocletMain"
聽*聽 singleton="true"
聽* 涓婅堪璇存槑,榪欐槸涓猻pring鐨刡ean錛宨d涓篨docletMain錛屽鏋滅湅涓嶆噦錛屽啀琛ヤ範涓涓媥doclet
聽* @spring.property
聽*聽 聽 聽 name="bean1"
聽*聽 聽 聽 ref="Bean1"
聽* 涓婅堪璇存槑錛屾湁涓猙ean1灞炴э紝鍏寵仈鐨勪負Bean1鐨剆pring緇勪歡
聽* @spring.property
聽*聽 聽 聽name="bean2"
聽*聽 聽 聽ref="Bean2"
聽* 鍚屼笂
聽*/
public class XdocletMain {
聽 聽 public Bean1 getBean1() {
聽 聽 聽 聽 return bean1;
聽 聽 }
聽 聽 public void setBean1(Bean1 bean1) {
聽 聽 聽 聽 this.bean1 = bean1;
聽 聽 }
聽 聽 public Bean2 getBean2() {
聽 聽 聽 聽 return bean2;
聽 聽 }
聽 聽 public void setBean2(Bean2 bean2) {
聽 聽 聽 聽 this.bean2 = bean2;
聽 聽 }
聽 聽 private Bean1 bean1 = null;
聽 聽 private Bean2 bean2 = null;
聽 聽
}
===================================================================
Bean1.java :
===================================================================
浠g爜:
/**
聽* Created by IntelliJ IDEA.
聽* User: wangzy
聽* Date: 2004-12-5
聽* @spring.bean
聽*聽 聽 聽 id="Bean1"
聽*聽 聽 聽 singleton="true"
聽* 澹版槑涓涓狟ean1鐨剆pring緇勪歡
聽*/
public class Bean1 {
聽 聽
}
===================================================================
Bean2.java :
===================================================================
浠g爜:
/**
聽* Created by IntelliJ IDEA.
聽* User: wangzy
聽* Date: 2004-12-5
聽* @spring.bean
聽*聽 聽 聽 id="Bean2"
聽*聽 聽 聽 singleton="true"
聽* 綾諱技Bean1
聽*/
public class Bean2 {
}
===================================================================
涓嬫潵褰撶劧灝辨槸鏈閲嶈鐨刟nt鐨刡uild.xml浜嗭紝鍏朵腑鐩稿叧閮ㄥ垎涓猴細
浠g爜:
<!--榪欓噷鏄痻doclet鐨刲ib,榪欎簺閮戒笉鏄痑nt鐨刢ore鍖咃紝鎵浠ヨ寮曡繘鏉?-->
<path id="xdoclet.class.path">
聽 聽 <fileset dir="c:\dev\ant\lib\xdoclet">
聽 聽 聽 聽 <include name="*.jar"/>
聽 聽 </fileset>
</path>
<!--榪欓噷灝辨槸鐢熸垚spring-beans閰嶇疆浜?-->
<target name="srpingdoclet">
聽 聽 <!--瀹氫箟springdoclet task -->聽 聽
聽 聽 <taskdef
聽 聽 聽 聽 name="springdoclet"
聽 聽 聽 聽 classname="xdoclet.modules.spring.SpringDocletTask"
聽 聽 聽 聽 classpathref="xdoclet.class.path"
聽 聽 />
聽 聽 <!--榪欓噷鏍規嵁src涓嬬殑java鏂囦歡涓殑淇℃伅錛岀敓鎴恠pring-beans.xml鍒扳渟pring/spring-beans.xml鈥濇枃浠朵腑-->
聽 聽 <springdoclet destdir="spring">
聽 聽 聽 聽 <fileset dir="src" includes="**/*.java" />
聽 聽 聽 聽 <springxml destinationFile="spring-beans.xml" />
聽 聽 </springdoclet>
</target>
榪愯ant springdoclet錛岀湅鐪媠pring/spring-beans.xml鏂囦歡錛屽ぇ鍔熷憡鎴愶紒錛侊紒
鍏蜂綋璇︾粏淇℃伅鍙互鐪媥doclet鏂囨。
浠g爜:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
聽 聽 "-//SPRING//DTD BEAN//EN"
聽 聽 "http://www.springframework.org/dtd/spring-beans.dtd">
<beans
聽 default-autowire="no"
聽 default-lazy-init="false"
聽 default-dependency-check="none"
>
聽 <bean
聽 聽 聽 id="Bean1"
聽 聽 聽 class="Bean1"
聽 聽 聽 singleton="true"
聽 >
聽 </bean>
聽 <bean
聽 聽 聽 id="XdocletMain"
聽 聽 聽 class="XdocletMain"
聽 聽 聽 singleton="true"
聽 >
聽 聽 <property name="bean1">
聽 聽 聽 <ref bean="Bean1"/>
聽 聽 </property>
聽 聽 <property name="bean2">
聽 聽 聽 <ref bean="Bean2"/>
聽 聽 </property>
聽 </bean>
聽 <bean
聽 聽 聽 id="Bean2"
聽 聽 聽 class="Bean2"
聽 聽 聽 singleton="true"
聽 >
聽 </bean>
聽 <!--
聽 聽 聽To include additional bean definitions for Spring in the generated
聽 聽 聽application context file, add a file to your XDoclet merge directory
聽 聽 聽called spring-beans.xml that contains the <bean></bean> markup.
聽 -->
</beans>
銆銆鐩稿浜嶦JB鏉ヨ錛孲pring鏄竴涓交閲忕駭鐨凧2EE搴旂敤寮鍙戞鏋躲傝繖閲屾彁鍒扮殑杞婚噺綰ф寚鐨勬槸Spring妗嗘灦鏈韓錛岃屼笉鏄Spring鍙兘閫傜敤浜庤交閲忕駭鐨勫簲鐢ㄥ紑鍙戙係pring鐨勮交鐩堜綋鐜板湪鍏舵鏋舵湰韜殑鍩虹緇撴瀯浠ュ強瀵瑰叾浠栧簲鐢ㄥ伐鍏風殑鏀寔鍜岃閰嶈兘鍔涳紝涓嶦JB榪欑搴炵劧澶х墿鐩告瘮錛孲pring浣挎垜浠妸鍚勪釜鎶鏈眰嬈′箣闂寸殑椋庨櫓闄嶄綆銆侲JB鐨勫唴鑱氭ц緝寮猴紝姣斿鏁版嵁鎸佷箙灞傜鐞嗐佷簨鍔$鐞嗐佺敓鍛藉懆鏈熺鐞嗛兘鍏ㄩ儴浜ょ粰浜咵JB瀹瑰櫒涓鐞嗭紝鍐呰仛鎬х殑鐧界洅鐗瑰緛浣挎垜浠繀欏繪斁寮冧竴閮ㄥ垎鍙帶鎬ц屽幓淇′換瀹瑰櫒鑳藉姏銆傝孲pring鍒欐槸鑰冭檻濡備綍鈥滀笉閫犺疆瀛愨濓紝濡備綍鏇村ソ鐨勭粍瑁呰繖浜涜疆瀛愶紝璁╀粬浠洿濂界殑杞姩銆傛瘮濡傛暟鎹寔涔呭眰綆$悊鍙互浣跨敤hibernate錛屾棩蹇楃鐞嗗彲浠ヤ嬌鐢╦akartacommonlogging銆備竴涓瘮杈冩伆褰撶殑姣斿柣灝辨槸鈥滄垜浠閽夊嚑涓拤瀛愶紝涓轟簡瀹屾垚榪欎釜鐩殑錛岄敜瀛愮敓浜у晢鐢熶駭浜嗗ぇ澶у皬灝忎竴緋誨垪鐨勯敜瀛愶紝姣忎釜閿ゅ瓙閮芥湁涓濂楀鏉傜殑浣跨敤鏂規硶錛岀敤鏉ラ拤鏌愮鐗瑰埆鐨勯拤瀛愶紝緇撴灉浠ゆ垜浠ご鐤間笉鍫傝В鍐抽敜瀛愯繃澶氱殑闂錛岄氳繃spring錛屾垜浠彲浠ヤ嬌鐢ㄥ嚑縐嶉敜瀛愶紝浣嗙敤璧鋒潵璞℃槸鍙湁涓涓敜瀛愨濄?娉細榪欐璇濇槸鍦ㄧ綉涓婄湅瑙佺殑錛岃繖閲屽紩鐢ㄨ繖涓瘮鍠伙紝鎴戜釜浜鴻寰楀緢鐢熷姩)鍏充簬榪欎釜妗嗘灦涔熸湁涓浜涚畝鍗曠殑鎬葷粨錛氣淪pring鏈夊嚑涓富瑕佺殑閮ㄥ垎錛欱ean+ApplicationContext錛屼互涓縐嶇粺涓鐨勩両oC鐨勬柟寮忔煡鎵俱佺鐞嗐佺粍瑁呫佷嬌鐢ㄧ郴緇熺殑緇勪歡錛屽彇浠d竴鍒囧伐鍘傦紱鎸佷箙鍖栨鏋訛紱web妗嗘灦銆傗淛2EE妗嗘灦鈥濇槸RodJohnson鐨勬効鏅紝浠栧笇鏈汼pring涓篔2EE杞婚噺綰цВ鍐蟲柟妗堟彁渚涜嚜搴曡嚦欏剁殑鍏ㄩ潰鍩虹璁炬柦鏀寔銆傗?
銆銆涓婇潰鏄叧浜庝竴涓柊鐨凢ramework鐨勭畝鍗曚粙緇嶏紝鎹鏄湭鏉2EE鍙戝睍鐨勬柟鍚戙備互鍓嶅湪璁哄潧涓婃湁鍏充簬J2EE鏈浣崇粍鍚堢殑璁ㄨ錛屽惉璇磋繖涓狫STL+Struts(鎴杦ebwork)+Spring+Hibernate鐨勭粍鍚堝緢琚湅濂?濡傛灉浣犳劅鍏磋叮鐨勮瘽錛屽彲浠ュ埌SpringFramework涓枃璁哄潧涓婄湅鐪嬨備笅闈㈣漿鍏ユ湰鏂囩殑姝i銆?
銆銆Spring 鏍囪搴撲粙緇嶅強鐢ㄦ硶錛?
銆銆鏈枃灝嗛噸鐐逛粙緇峉pring 鎻愪緵鐨勬爣璁板簱鍙婂叾鐢ㄦ硶錛?
銆銆褰撲綘鍦ㄩ」鐩腑鐢⊿pring Framework鐨勬椂鍊欙紝琛ㄧ幇灞傚彲浠ラ夋嫨Spring Framework鑷甫鐨勬爣璁板簱銆傚綋鐒訛紝榪欎笉鏄綘鍞竴鐨勯夋嫨銆備綘鍙互閫夋嫨鍏跺畠鏍囪搴撴垨妯℃澘鏇挎崲鎶鏈係pring Framework 騫舵病鏈変負搴旂敤鎻愪緵闈炲父涓板瘜鐨勬爣璁板簱銆係pring Framework 鎻愪緵鐨勬爣璁板簱浠呬粎鏄負浜嗗鐢ㄥ氨琛岋紝瀹冨茍涓嶆槸鏃犳墍涓嶅寘鐨勩傚懙鍛碉紝榪欑偣涓嶴truts涓板瘜鐨勬爣璁板簱涓嶄竴鏍楓傚叾瀹炶繖鐐圭鍚圧odJohnson鐨勫嚭鍙戠偣錛屾棦鈥滀笉閫犺疆瀛愨濄傚綋鐒訛紝Spring Framework鏍囪搴撴湁瀹冭嚜韜殑鐗圭偣錛屽彲浠ヨ鏄釜鏈夌泭鐨勮ˉ鍏呭惂銆?
銆銆Spring 鏍囪搴撳垎綾誨涓嬶細
銆銆1銆乻pring:hasBindErrors
銆銆2銆乻pring:bind
銆銆3銆乻pring:transform
銆銆4銆乻pring:message
銆銆5銆乻pring:htmlEscape
銆銆6銆乻pring:theme
銆銆涓嬮潰鎴戜滑鏉ュ叿浣撲粙緇嶄竴涓嬬敤娉曪細
銆銆1銆乻pring:hasBindErrors
銆銆瀵瑰簲org.springframework.web.servlet.tags.BindErrorsTag鏍囪搴撳鐞嗙被銆?
銆銆榪欎釜鏍囪鎻愪緵鐢ㄤ簬緇戝畾瀵硅薄鐨別rrors錛屽鏋滆繖涓爣璁拌鐢ㄥ埌鐨勮瘽錛岄偅涔堝叧浜庤繖涓璞$殑閿欒灝嗗湪欏甸潰涓婃樉紺哄嚭鏉ャ備嬌鐢ㄨ繖涓爣璁扮殑鍓嶆彁鏉′歡鏄鍏堜嬌鐢紲spring:bind錛炴爣璁?騫朵笖錛渟pring:hasBindErrors錛炶繖涓爣璁頒笉鑳界敤鏉ヨ〃紺哄璞$殑鐘舵侊紝瀹冧粎浠呭彲浠ョ粦瀹氬璞℃湰韜拰瀵硅薄鐨勫睘鎬с?鍏蜂綋鐢ㄦ硶濡備笅錛?
錛渟pring:hasBindErrors name="priceIncrease"錛?錛渂錛濸lease fix all errors!錛?b錛?錛?spring:hasBindErrors錛?
銆銆閫氳繃榪欎釜綆鍗曠殑渚嬪瓙錛屾垜鏉ュ叿浣撹涓涓嬭繖涓爣璁扮殑灞炴у惂銆?
銆銆name錛氭槸瑕佽媯鏌ョ殑Bean鐨勫悕瀛椼傝繖涓睘鎬ф槸蹇呴渶瑕佺殑銆?
銆銆榪欓噷鏄畝鍗曠敤娉曪紝鎵浠ュ氨涓嶄粙緇嶅畠鍖呭惈鐨別rrors鍙橀噺浜嗐傚叿浣撶湅鑻辮鏂囨。銆備笅鍚屻?
銆銆2銆乻pring:bind
銆銆瀵瑰簲org.springframework.web.servlet.tags.BindTag鏍囪搴撳鐞嗙被
銆銆榪欎釜鏍囪鐢ㄦ潵涓烘煇涓猙ean鎴朾ean 鐨勫睘鎬ц祴鍊鹼紝閫氬父鍜宖orm涓璧風敤錛岀浉褰撲簬action鐨勪綔鐢ㄣ傚畠鎸囨槑琛ㄥ崟瑕佹彁浜ゅ埌閭d釜綾繪垨綾葷殑灞炴т腑鍘匯?
銆銆鍏朵腑path灞炴ф槸蹇呴』鐨勶紝鎸囨槑杞埌鐨勭被鐨勮礬寰勩備婦渚嬪涓嬶細
錛渇orm method="post"錛?
錛渢able width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5"錛?
錛渢r錛?
錛渢d alignment="right" width="20%"錛濱ncrease (%):錛?td錛?
錛渟pring:bind path="priceIncrease.percentage"錛?
錛渢d width="20%"錛?
錛渋nput type="text" name="percentage" value="錛渃:out value="${status.value}"/錛?錛?
錛?td錛?
錛渢d width="60%"錛?
錛渇ont color="red"錛烇紲c:out value="${status.errorMessage}"/錛烇紲/font錛?
錛?td錛?
錛?spring:bind錛?
錛?tr錛?
錛?table錛?
錛渂r錛?
鈥︹︹︹︹︹︹︹︾渷鐣?
錛?form錛?
銆3銆乻pring:transform
銆銆瀵瑰簲org.springframework.web.servlet.tags.TransformTag鏍囪搴撳鐞嗙被,榪欎釜鏍囪鐢ㄦ潵杞崲琛ㄥ崟涓笉涓巄ean涓殑灞炴т竴涓瀵瑰簲鐨勯偅浜涘睘鎬э紝閫氬父鍜岋紲spring:bind錛炰竴璧蜂嬌鐢ㄣ傦紲spring:transform錛炴爣璁頒負錛渟pring:bind錛炰嬌鐢ㄦ彁渚涗簡鏇村ソ鐨勬敮鎸併?
銆銆灞炴у涓嬶細
銆銆value錛氬繀闇瑕佺殑銆傚拰褰撳墠錛渟pring:bind錛炴爣璁版寚鍚戠殑bean綾葷浉鍚屻傚氨鏄綘瑕佽漿鎹㈢殑瀹炰綋綾誨悕銆?
銆銆var錛氫笉鏄繀闇鐨勩傝繖涓瓧絎︿覆琚敤鏉ョ粦瀹氳緭鍑虹粨鏋滃埌page錛宺equest, session鎴朼pplication scope.榛樿鎯呭喌杈撳嚭鍒癹sp涓?
銆銆scope錛氫笉鏄繀闇鐨勩傚墠鎻愭潯浠秜ar蹇呴』璁劇疆鐨勬儏鍐典笅銆傚畠鐨勫煎彲浠ユ槸page錛宺equest, session鎴朼pplication銆?
銆銆4銆乻pring:message 瀵瑰簲org.springframework.web.servlet.tags.MessageTag鏍囪搴撳鐞嗙被
銆銆榪欎釜鏍囪鐢ㄦ潵甯姪springframework鏀寔鍥介檯鍖栥傚拰JSTL鐨刦mt:message鏍囪綾諱技銆傚綋鐒惰繖涓爣璁板彲浠ュ緢濂界殑宸ヤ綔鐨勬湰鍦扮殑springframework妗嗘灦涓嬨?
銆銆灞炴у涓嬶細
銆銆code錛氫笉鏄繀闇鐨勩傜敤鏉ユ煡鎵緈essage,濡傛灉娌℃湁琚嬌鐢ㄧ殑璇濓紝text灝嗚浣跨敤銆?
銆銆text錛氫笉鏄繀闇鐨勩傚亣濡俢ode涓嶅瓨鍦ㄧ殑璇濓紝榛樿鏄痶ext杈撳嚭銆傚綋code鍜宼ext閮芥病鏈夎緗殑璇濓紝鏍囪灝嗚緭鍑轟負null.
銆銆var錛氫笉鏄繀闇鐨勩傝繖涓瓧絎︿覆琚敤鏉ョ粦瀹氳緭鍑虹粨鏋滃埌page錛宺equest, session鎴朼pplication scope.榛樿鎯呭喌杈撳嚭鍒癹sp涓?
銆銆scope錛氫笉鏄繀闇鐨勩傚墠鎻愭潯浠秜ar蹇呴』璁劇疆鐨勬儏鍐典笅銆傚畠鐨勫煎彲浠ユ槸page錛宺equest, session鎴朼pplication銆?
銆銆5銆乻pring:htmlEscape
銆銆瀵瑰簲org.springframework.web.servlet.tags.HtmlEscapeTag鏍囪搴撳鐞嗙被
銆銆涓嶅父鐢紝榪欓噷鐪佺暐
銆銆6銆乻pring:theme
銆銆瀵瑰簲org.springframework.web.servlet.tags.ThemeTag鏍囪搴撳鐞嗙被
銆銆涓嶅父鐢紝榪欓噷鐪佺暐
銆銆瀛︿範瀹岃繖浜涚敤娉曞悗錛岃鎴戜滑鏉ョ湅涓叿浣撶殑渚嬪瓙鍚с?
銆銆閰嶇疆姝ラ濡備笅錛?
銆銆鐩綍緇撴瀯鍥撅細
-spirngapp
-WEB-INF
-classes
-lib
-src
-war
銆銆1銆佸皢spring.tld鎷瘋礉鍒癢EB-INF鐩綍銆?
銆銆2銆佸皢spring.jar鎷瘋礉鍒癢EB-INF\lib鍖呬笅
銆銆涓句緥濡備笅錛?
銆銆鍦╳eb.xml涓厤緗ソtaglib灞炴э紝浠g爜濡備笅錛?
銆銆jsp欏甸潰浠g爜濡備笅錛?
銆銆錛渟pring:bind錛炴爣璁扮粡甯哥敤鏉ョ粦瀹氾紲input錛炶〃鍗曞厓绱犱互渚挎彁浜ょ粰PriceIncrease.java,鍏跺疄PriceIncrease.java涓氨鏄寘鍚竴浜沢etter鍜宻etter鐨勬柟娉曠殑綾匯傚綋鐢ㄦ埛鎸変笅鎸夐挳鎻愪氦鐨勬椂鍊欙紝鍏惰〃鍗曚腑鐨勫煎疄闄呬笂灝辮framework鏀懼埌浜哖riceIncrease.java涓傦紲spring:bind錛炵粡甯稿拰form涓璧蜂嬌鐢?榪欎釜${status.errorMessage}鍜?{status.value}鏄竴涓猣ramework瀹氫箟鐨勭壒孌婂彉閲忥紝瀹冧滑琚敤鏉ユ樉紺洪敊璇俊鎭拰褰撳墠琛ㄥ崟涓殑鏁版嵁銆傚懙鍛碉紝浠婂ぉ灝卞埌姝や負姝㈠惂錛屽叧浜嶴pring Framework鏍囪搴撶殑璇︾粏鐢ㄦ硶錛岃鍙傝冨叾鏂囨。銆?img src ="http://m.tkk7.com/konhon/aggbug/48674.html" width = "1" height = "1" />
銆浣滅偤org.springframework.web.servlet.mvc.AbstractController涓嬬殑鍙︿竴鍊嬪瓙欏炲垾錛歰rg.springframework.web.servlet.mvc.multiaction.MultiActionController錛屽畠鍙互璁撴垜鍊戝湪涓鍊婥ontroller欏炲垾涓畾緹╁鍊嬫柟娉曪紝涓︽牴鎿氭垜鍊戠殑璜嬫眰渚嗗懠鍙暥涓殑鏌愬嬫柟娉曚締鍩瘋銆?
銆濡傛灉鎮ㄧ灜瑙truts錛屽叾DispatchAction灝遍浼兼柤Spring鐨凪ultiActionController欏炲垾錛屾墍涓嶅悓鐨勬槸錛孧ultiActionController鎿佹湁姣擲truts鐨凞ispatchAction鏇村妯e寲鐨勬柟寮忎締鍙冩暩鍖栬垏緄勭箶閫欎簺Action銆?
銆瑕佷嬌鐢∕ultiActionController錛屾偍瑕侀厤鍚堜竴鍊婱ethodNameResolver鐨勫渚嬶紝MultiActionController闋愯ō鏄疘nternalPathMethodNameResolver錛岄欐槸鏈綈″柈鐨勬柟寮忥紝鏍規摎鎮ㄦ墍緄︾殑綞插潃鏈寰岀殑妾旀鍚嶇ū渚嗗垽鏂瘋鍩瘋Action涓殑鍝竴鍊嬫柟娉曪紝浣嗛氬父鎴戝戜笉鏈冧嬌鐢↖nternalPathMethodNameResolver錛屽洜鐐洪欏氨澶卞幓浜嗕嬌鐢∕ultiActionController鐨勪竴浜涘劒榛烇紝鍍忔槸渚濊珛姹傚弮鏁鎬締姹哄畾瑕佸懠鍙殑鏂規硶銆?
銆鎴戝戦氬父鏈冧嬌鐢≒arameterMethodNameResolver鎴朠ropertiesMethodNameResolver錛屽湪涓鍊嬬恫鍧涓婄祼鍚堣珛姹傚弮鏁革紝浠ュ弮鏁鎬締姹哄畾瑕佸煼琛屽摢涓鍊婣ction錛岄欓倞浠arameterMethodNameResolver鐐轟緥錛岄鍏堬紝鎴戝戝彲浠ュ湪bean瀹氱京妾斾腑閫欓杭鎾板錛?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN""http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/book.do">bookAction</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.InternalResourceView</value> </property> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName"><value>method</value></property> <property name="defaultMethodName"><value>list</value></property> </bean> <bean id="bookAction" class="onlyfun.caterpillar.GuestBookAction"> <property name="methodNameResolver"> <ref bean="paraMethodResolver"/> </property> <property name="testPage"> <value>test</value> </property> </bean> </beans>
銆鍦╬araMethodResolver涓紝鎴戝戜嬌鐢╬aramName瀹氱京鍦╤ttp璜嬫眰涓嬌鐢╩ethod鍙冩暩渚嗘寚瀹氳鍛煎彨鐨勬柟娉曪紝鑻ユ槸璜嬫眰涓矑鏈夋寚瀹歮ethod鍙冩暩錛屽墖鏈冧嬌鐢╠efaultMethodName鎵鎸囧畾鐨勬柟娉曪紝閫欓倞鎸囧畾鐨勬槸list()鏂規硶銆?
銆GuestBookAction鏄嬬辜鎵縈ultiActionController鐨勯鍒ワ紝鐣朵腑鎴戝戝彲浠ュ畾緹╂垜鍊戝湪method鍙冩暩鎸囧畾涓嬫墍瑕佸懠鍙殑鏂規硶錛屼緥濡傦細
package onlyfun.caterpillar; import javax.servlet.http.*; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; public class GuestBookAction extends MultiActionController { privateString testPage; public ModelAndView list(HttpServletRequest req, HttpServletResponse res) { returnnew ModelAndView(this.getTestPage(),"executed", "list"); } public ModelAndView add(HttpServletRequest req, HttpServletResponse res) { returnnew ModelAndView(this.getTestPage(),"executed", "add"); } public ModelAndView delete(HttpServletRequest req, HttpServletResponse res) { returnnew ModelAndView(this.getTestPage(),"executed", "delete"); } publicString getTestPage() { return testPage; } public void setTestPage(String testPage) { this.testPage = testPage; } }
銆娉ㄦ剰鍒版垜鍊戠殑鏂規硶蹇呴爤鍖呮嫭HttpServletRequest鑸嘓ttpServletResponse浣滅偤鍙冩暩錛屾偍涔熷彲浠ヤ嬌鐢ㄥ付鏈夌涓夊嬪弮鏁窰ttpSession鐨勭増鏈?
銆涓婇潰鐨勯鍒ュ彧鏄竴鍊嬬啊鍠殑綃勪緥錛岀敤鏂兼脯瑭ultiActionController鐨勯亱浣滐紝鎴戝戞脯瑭︾敤鐨凧SP綞查爜濡備笅錛?
<html>
<head><title>Test</title></head>
<body>
<H1> "${executed}" method is executed.</H2>
</body>
</html>
銆鐣舵偍浣跨敤浠ヤ笅鐨勭恫鍧璜嬫眰璩囨簮鏅傦細
http://localhost:8080/springapp/book.do?method=add
銆鎴戝戠殑娓│綞查爜灝囧偝鍥炰互涓嬬殑鍏у錛?
<html>
<head><title>Test</title></head>
<body>
<H1> "add" method is executed.</H2>
</body>
</html>
銆鎮ㄤ篃鍙互灝囨墍鏈夌浉灝嶆噳鐨勬柟娉曞皥闁緄勭箶鍦ㄤ竴鍊嬪璦楋紙delegate錛夌墿浠朵腑錛岃屼笉鏄挵瀵湪Controller欏炲垾涓紝鐣惰珛姹備締鍒版檪錛屽皣濮旇緄﹂欏嬬墿浠朵締鍩瘋鎸囧畾鐨勬柟娉曪紝鎮ㄥ彧瑕佸畾緹㎝ultiActionController鐨刣elegate灞у嵆鍙紝渚嬪鎴戝戠殑濮旇鐗╀歡濡備笅錛?
package onlyfun.caterpillar; import javax.servlet.http.*; import org.springframework.web.servlet.ModelAndView; public class BookActionDelegate { privateString testPage; public ModelAndView list(HttpServletRequest req, HttpServletResponse res) { returnnew ModelAndView(this.getTestPage(),"executed", "list"); } public ModelAndView add(HttpServletRequest req, HttpServletResponse res) { returnnew ModelAndView(this.getTestPage(),"executed", "add"); } public ModelAndView delete(HttpServletRequest req, HttpServletResponse res) { returnnew ModelAndView(this.getTestPage(),"executed", "delete"); } publicString getTestPage() { return testPage; } public void setTestPage(String testPage) { this.testPage = testPage; } }
銆鐝懼湪鎴戝戜笉鐢ㄥ畾緹〨uestBookAction浜嗭紝鐩存帴浣跨敤MultiActionController錛屽彧瑕佸畾緹〣ean瀹氱京妾斿氨濂戒簡錛?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN""http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/book.do">bookAction</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"> <value>org.springframework.web.servlet.view.InternalResourceView</value> </property> <property name="prefix"> <value>/WEB-INF/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName"><value>method</value></property> <property name="defaultMethodName"><value>list</value></property> </bean> <bean id="bookActionDelegate" class="onlyfun.caterpillar.BookActionDelegate"> <property name="testPage"> <value>test</value> </property> </bean> <bean id="bookAction" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController"> <property name="methodNameResolver"> <ref bean="paraMethodResolver"/> </property> <property name="delegate"> <ref bean="bookActionDelegate"/> </property> </bean> </beans>
銆娓│鐨勭祼鏋滆垏涓婇潰鏄浉鍚岀殑銆?
銆浠ヤ笂瑾槑鐨勬槸ParameterMethodNameResolver錛岃孭ropertiesMethodNameResolver鐨勮ō瀹氭柟娉曟槸欏炰技鐨勶紝鏈夎垐瓚g殑瑭憋紝鍙互鐪嬩竴涓婼pring鍙冭冩墜鍐婁腑鏈夐棞MultiActionController鐨勮鏄庯紝鐣朵腑涔熸湁鍊嬬啊鏄庣殑璦畾綃勪緥銆?