鏃墮棿錛?006-06-08 浣滆咃細Dejan Bosanac 嫻忚嬈℃暟錛? 7201 鏈枃鍏抽敭瀛楋細Spring,聽configuration,聽source control,聽CVS,聽subversion,聽閰嶇疆,聽 鏂囩珷宸ュ叿 | ![]() |
銆銆鏈枃灝嗕負鎮ㄦ彁渚涘叧浜?a target="_blank">Spring MVC妗嗘灦鐨勯厤緗妧宸э紝浠ュ府鍔╃鐞嗗熀浜嶴pring鐨剋eb搴旂敤紼嬪簭鐨勫涓疄渚嬨傛湰閰嶇疆綆$悊涓婚甯歌瀛︽湳鐣屾墍蹇界暐錛屼絾鏄紝榪欏浜庣幇瀹炵殑web寮鍙戝挨涓洪噸瑕併傛湰涓婚騫朵笉鐩存帴鍏寵仈浠諱綍鍏蜂綋鐨勬妧鏈紝鍥犳錛屾垜浠皢浠庢渶鍩烘湰鐨勬蹇靛紑濮嬪榪欎釜闂榪涜璇存槑銆備笅闈紝鎴戜滑灝嗘牴鎹甋pring MVC妗嗘灦錛屼負鍩轟簬鏈妧鏈紑鍙戠殑欏圭洰鎻愪緵涓緋誨垪鐨勮В鍐蟲柟妗堛?/p>
銆銆浜轟滑緇忓父浼氬湪涓鍙頒互涓婄殑涓繪満涓婇厤緗竴縐峎eb搴旂敤紼嬪簭銆備緥濡傦紝鍦ㄧ敓浜т腑錛屼竴涓綉绔欏彲鑳藉彧鏈変竴涓疄渚嬨傞櫎浜嗘瀹炰緥澶栵紝寮鍙戜漢鍛樺彲浠ュ湪鐢ㄤ簬寮鍙戠殑鏈哄櫒涓婇厤緗叾浠栫殑錛堝紑鍙戯級瀹炰緥銆備篃鍙互鍦ㄥ叕鍙革紙鏈烘瀯錛夊唴閮ㄧ殑鏈湴寮鍙戞湇鍔″櫒涓婄淮鎶ゅ叾浠栧簲鐢ㄧ▼搴忚緗紝榪欏皢璁╂偍鍙楃泭鍖祬銆傝瀹炰緥鐨勭洰鐨勬槸浣縒eb璁捐鑰呭彲浠ヨ幏寰楁湁璐ㄩ噺淇濊瘉鐨勬潗鏂欙紝騫朵負闇瑕佷負搴旂敤紼嬪簭鎻愪緵鏂囦歡璧勬枡鐨勪漢鎻愪緵鍑嗗叆銆?/p>
銆銆澶у閮界煡閬擄紝鍗充嬌鏄渶綆鍗曠殑鍦烘櫙錛屼篃闇瑕佸畨瑁呫侀厤緗拰緇存姢涓変釜瀹炰緥銆傝屽浜庝綅浜庝笉鍚屽湴鐞嗕綅緗殑鍥㈤槦鏉ヨ錛岃浠庝簨榪欐牱鐨勯」鐩究鏇村姞鍥伴毦銆傚浜庝換浣曚笉鏄壒鍒畝鍗曠殑Web搴旂敤紼嬪簭欏圭洰錛岄兘闇瑕佸鍚嶅紑鍙戜漢鍛樻潵瀹夎欏圭洰瑁呯疆鍜屾湰鍦拌緗互鍙婅繍琛屽崟鍏冩祴璇曠殑瑁呯疆絳夈?/p>
銆銆寰堝緇勭粐閮藉皢鑷繁寮鍙戠殑浜у搧浣滀負Web搴旂敤紼嬪簭銆傛垜浠彲浠ュ湪寰堝浜у搧涓彂鐜拌繖縐嶆儏鍐碉紝渚嬪鐢靛瓙鍟嗗姟緋葷粺銆?a target="_blank">鍐呭綆$悊緋葷粺錛圕MS錛夛紝浠ュ強鍗氬鍙戝竷騫沖彴絳夈傝繖綾諱駭鍝佸彲鍦ㄥ涓湇鍔″櫒涓繘琛岄儴緗層傚浜庢垚鍔熺殑澶氱敤閫擶eb搴旂敤紼嬪簭鏉ヨ錛屼粬浠殑寮鍙戜漢鍛樺繀欏昏淇濊瘉浠栦滑鐨勫簲鐢ㄧ▼搴忎究浜庡畨瑁咃紝騫朵笖鑳藉涓庡叾浠朩eb搴旂敤紼嬪簭瀹岀編闆嗘垚銆傜粡榪囦笂榪拌璁轟箣鍚庯紝鎴戜滑搴旇鏄庝簡錛屼綔涓烘湰鏂囦富棰樼殑搴旂敤紼嬪簭閰嶇疆鏄氱敤Web搴旂敤紼嬪簭欏圭洰寮鍙戜漢鍛樻墍闇瑕佽В鍐崇殑閲嶈闂涔嬩竴銆?/p>
銆銆璇稿CVS鎴朣ubversion涔嬬被鐨勭増鏈帶鍒剁郴緇熸槸寮鍙戠粍緇囦嬌鐢ㄧ殑涓縐嶆爣鍑嗗伐鍏楓傝繖縐嶅伐鍏蜂唬琛ㄤ簡涓浜涚粍緇囩殑涓績婧愪唬鐮佺増鏈簱錛屽畠浠鐢ㄤ簬淇濇寔婧愪唬鐮佺殑鏈夊簭銆傜敤鎴峰彲浠ヨ窡韙簲鐢ㄧ▼搴忔簮浠g爜鐨勫彉鍖栵紝鏄劇ず涓嶅悓鐗堟湰鐨勫尯鍒紝騫跺彲浠ョ‘瀹氶」鐩垎鏀傝屼笖錛屽畠浠嬌寰楀湪搴旂敤紼嬪簭閮ㄧ講涓繘琛岄儴鍒嗘洿鏂版垚涓哄彲鑳姐?/p>
銆銆寰堟槑鏄撅紝鐗堟湰鎺у埗緋葷粺杞歡鏄窡韙簮浠g爜鎵蹇呴渶鐨勶紝瀹冨浜庤В鍐沖簲鐢ㄧ▼搴忛厤緗棶棰樻湁闈炲父澶х殑甯姪銆傚湪鏈枃涓紝鎴戜滑灝嗕笉浼氭妸閲嶇偣鏀懼湪鐗堟湰鎺у埗緋葷粺涓婏紝鍥犱負榪欐柟闈㈠凡緇忔湁寰堝鐩稿叧鐨勬潗鏂欎簡銆傚湪姝わ紝鎴戜滑灝嗗叧娉ㄧ増鏈帶鍒墮棶棰樹腑鐨勪竴涓皬璇濋錛氬浣曚嬌Web搴旂敤紼嬪簭鐨勯厤緗洿鍔犱究鎹鳳紙灝ゅ叾鏄嬌鐢⊿pring MVC妗嗘灦緙栧啓鐨刉eb搴旂敤紼嬪簭錛夈?/p>
銆銆闂鏄細鎴戜滑鍦ㄦ璁ㄨ鐨勬槸涓縐嶄粈涔堟牱鐨勯厤緗紵浠諱綍Web搴旂敤紼嬪簭閮介渶瑕佷竴浜涜祫婧愶紝榪欎簺璧勬簮閫氬父閮芥槸鍏舵墍榪愯鐨勬湇鍔″櫒鎵鐗規湁鐨勶紝渚嬪鏁版嵁搴揢RL銆佸彂閫佺數瀛愰偖浠剁殑SMTP鏈嶅姟鍣紝浠ュ強鍖呭惈涓撶敤杞歡鏂囦歡鐨勬枃浠跺す絳夈傝繖鏍風殑璁劇疆搴旇闆嗕腑錛屼粠鑰屼嬌搴旂敤紼嬪簭閰嶇疆鏇村姞綆鍗曘?/p>
銆銆浣嗘槸錛岃繖鍙槸榪欎釜闂鏈綆鍗曠殑涓縐嶇増鏈傛湁鏃跺欙紝鍦ㄥ簲鐢ㄧ▼搴忓紑鍙戜腑闇瑕佹洿鍔犲鏉傜殑閰嶇疆銆傝繖鎰忓懗鐫錛屽繀欏誨皢鍚勬閮ㄧ講涓殑涓嶅悓Bean榪炴帴璧鋒潵錛岃岃繖浼氫嬌闂鏇村姞澶嶆潅銆?/p>
銆銆榪欎簺搴旂敤紼嬪簭閰嶇疆闂鐨勮В鍐蟲柟妗堟湁璇稿浼樺娍錛屽寘鎷細綆鍖栧簲鐢ㄧ▼搴忕殑瀹夎鍜岄厤緗繃紼嬶紝浣挎簮浠g爜鐗堟湰鎺у埗鏇村姞綆渚匡紝鍑忓皯婧愪唬鐮佺増鏈簱涓殑鍐茬獊鐜拌薄銆備笅闈紝鎴戜滑灝嗛氳繃紺轟緥璇︾粏璁ㄨ榪欎釜璇濋銆?/p>
銆銆鎴戜滑棣栧厛鏉ユ紨紺轟竴涓嬩笂鏂囨墍鎻愬埌鐨勬渶綆鍗曠殑鐗堟湰銆傚湪榪欎竴鍦烘櫙涓紝鎴戜滑甯屾湜鍦ㄥ簲鐢ㄧ▼搴忛儴緗蹭腑鏀瑰彉鐨勬槸綆鍗曠殑閰嶇疆鍙傛暟錛屼緥濡傞摼鎺ャ佸瘑鐮佺瓑銆傚鏋滄偍鏇劇粡浣跨敤Spring MVC妗嗘灦寮鍙戣繃Web搴旂敤紼嬪簭錛岄偅涔堟偍搴旇鐭ラ亾榪欓噷灝嗙敤鍒扮殑涓や釜閰嶇疆鏂囦歡錛?/p>
銆銆閭d箞闂鍦ㄥ摢鍎垮憿錛熼棶棰樺氨鍑哄湪applicationContext.xml涓皢鍖呮嫭涓浜涚壒瀹氫簬涓繪満鐨凚ean瀹氫箟銆傚叾涓紝鏈鏄庢樉鐨勪竴涓ず渚嬪氨鏄寘鍚簡JDBC榪炴帴淇℃伅鐨刡ean錛屼絾鏄換浣曚竴縐嶇◢寰鏉備簺鐨勫簲鐢ㄧ▼搴忛兘鏈夊崄鍑犱釜綾諱技鐨凚ean銆傜湅涓涓嬩笅闈㈢殑紺轟緥錛?/p>
<bean聽id="dataSource"聽
聽class="org.springframework.jdbc.datasource.DriverManagerDataSource">
聽聽聽<property聽name="driverClassName">
聽聽聽聽聽聽聽<value>org.postgresql.Driver</value>
聽聽聽</property>
聽聽聽<property聽name="url">
聽聽聽聽聽聽聽<value>jdbc:postgresql://localhost/test</value>
聽聽聽</property>
聽聽聽<property聽name="username">
聽聽聽聽聽聽聽<value>postgres</value>
聽聽聽</property>
聽聽聽<property聽name="password">
聽聽聽聽聽聽聽<value></value>
聽聽聽</property>
</bean>
銆銆榪欎釜瑙e喅鏂規鐨勯棶棰樺湪浜庡applicationContext.xml鏂囦歡鐨勭淮鎶ゃ傚浜庡垵瀛﹁呮潵璇達紝璁炬兂涓涓嬶紝欏圭洰鏀懼湪婧愪唬鐮佺増鏈帶鍒剁郴緇熶腑錛屼緥濡侰VS銆備笅闈紝鍋囪鎮ㄥ笇鏈涘湪緗戠珯涓坊鍔犳柊鐨勫姛鑳斤紝閭d箞灝遍渶瑕佸湪搴旂敤紼嬪簭涓婁笅鏂囧畾涔変腑娣誨姞棰濆鐨凚ean瀹氫箟銆傞棶棰樻槸濡備綍鍦ㄧ敓浜ф湇鍔″櫒涓婁綋鐜拌繖浜涙敼鍙樸?/p>
銆銆閫氬父鎯呭喌涓嬶紝搴旂敤紼嬪簭鐨勬湰鍦板疄渚嬩笉浼氫笌媧誨姩绔欑偣浣跨敤鍚屾牱鐨勬暟鎹簱錛屽洜姝pplicationContext.xml鏂囦歡灝嗗寘鎷鎮ㄨ兘澶熻闂湰鍦版暟鎹簱鐨勮緗傚綋鎮ㄦ兂鎻愪氦鍦ㄦ簮浠g爜鐗堟湰搴撲腑鐨勬敼鍙樻椂錛屽氨闇瑕佹敞鎰忚繖浜涚壒瀹氫簬涓繪満灞炴х殑鍚屾鎬с傜増鏈簱涓殑鏂囦歡鏈緇堝彲鑳戒嬌鐢ㄦ湰鍦拌緗腑鐨勯厤緗傚鏋滄兂鍦ㄧ敓浜ф湇鍔″櫒涓婃洿鏂伴厤緗紝灝卞繀欏繪墜鍔ㄥ悓姝ヨ繖浜涘睘鎬х殑鍊箋傝繖鏄潪甯告灟鐕ョ殑浠誨姟錛岃屼笖榪橀潪甯稿鏄撳嚭閿欍?/p>
銆銆瀵逛簬搴旂敤紼嬪簭鐨勬瘡涓疄渚嬫潵璇達紝榪欎釜闂鏇村姞閲嶈銆傚亣濡傛湁涓変綅寮鍙戜漢鍛樻鍦ㄤ嬌鐢ㄤ唬鐮佹鍩哄潃錛岃屼笖浠栦滑浣跨敤鐨勬槸鏈湴鐨勬暟鎹簱銆傚綋鎮ㄦ彁浜ゆ洿鏀圭殑鏃跺欙紝浠栦滑姣忎釜浜哄湪鏈湴鏈嶅姟鍣ㄤ笂鏇存柊婧愪唬鐮佺殑鏃跺欓兘蹇呴』闈炲父璋ㄦ厧銆備粬浠細鎵嬪姩鍚屾榪欎簺鏇存敼錛岀劧鍚庢彁浜や粬浠殑宸ヤ綔銆傝繖鏍蜂竴鏉ワ紝鐗堟湰鎺у埗緋葷粺瀵逛簬榪欎簺閰嶇疆鏂囦歡鏉ヨ宸茬粡姣棤鐢ㄥ銆傚鏋滄浘緇忎嬌鐢ㄨ繃Spring MVC錛岄偅涔堟偍搴旇鐭ラ亾applicationContext.xml鏄簲鐢ㄧ▼搴忎腑鐨勫叧閿粍浠訛紝鍥犱負鏄畠灝嗘墍鏈夌殑涓滆タ綺樺悎鍦ㄤ竴璧楓傛墍浠ワ紝鎴戜滑闇瑕佷竴縐嶆満鍒舵潵甯姪浣垮簲鐢ㄧ▼搴忎腑鍚勯」淇濇寔鏈夊簭錛岃繖鐐歸潪甯擱噸瑕併?/p>
銆銆姝e鍓嶉潰鎵鎻愬埌鐨勶紝榪欐槸鎮ㄥ彲鑳介亣鍒扮殑杈冪畝鍗曠殑閰嶇疆闂銆傛洿闅劇殑闂鍑虹幇鍦ㄥ綋闇瑕佸湪涓嶅悓鏈嶅姟鍣ㄤ腑榪涜涓嶅悓鐨凚ean榪炴帴鐨勬椂鍊欍傝繖綾婚棶棰樺父浼氬嚭鐜板湪鏃ュ父杞歡寮鍙戜換鍔′腑銆備緥濡傦紝鍋囧鎮ㄧ殑浜у搧鏈変竴涓鎴瘋韓浠介獙璇佹ā鍧楋紝鍙互瀵規潵鑷叧緋繪暟鎹簱鎴朙DAP鏈嶅姟鍣ㄤ腑鐨勭敤鎴瘋繘琛岃韓浠介獙璇併傝嚜鐒訛紝榪欎竴韜喚楠岃瘉妯″潡鍙互浣跨敤鎶借薄浜嗙壒瀹氱増鏈簱鐨凚ean榪涜閰嶇疆銆傚鏋滄偍鎯蟲敼鍙樹笉鍚屽簲鐢ㄧ▼搴忛儴緗蹭腑楠岃瘉鐢ㄦ埛鐨勬柟寮忥紝灝遍渶瑕佸湪applicationContext.xml鏂囦歡涓繘琛屼笉鍚岀殑Bean榪炴帴銆傝繖縐嶉厤緗棶棰樺父瑙佷簬鍦ㄩ儴緗蹭腑鏈夊彲閰嶇疆鐗規х殑鎵鏈夊簲鐢ㄧ▼搴忋?/p>
銆銆鍦ㄤ笅鏂囦腑錛屾垜浠皢璁ㄨ榪欎袱縐嶉厤緗棶棰樸傞鍏堟垜浠細鍏蟲敞鍚屾鐨凚ean灞炴ч棶棰樺強鍏惰В鍐蟲柟妗堬紝鎺ヤ笅鏉ワ紝鎴戜滑浼氳璁烘洿鍔犲鏉傜殑鍚屾Bean榪炴帴闂銆?/p>
銆銆榪欎釜闂鐨勪竴縐嶅彲琛岀殑瑙e喅鏂規鏄皢鎵鏈夌壒瀹氫簬涓繪満鐨勫弬鏁伴兘鏀懼埌鏅氱殑Java灞炴ф枃浠朵腑錛屼嬌鐢⊿pring鐨凱ropertyPlaceHolderConfigurer綾伙紝灝嗚繖浜涘弬鏁板啓鍏ean灞炴т腑銆?/p>
銆銆浣跨敤榪欎竴瑙e喅鏂規錛屾垜浠彲浠ョ敓鎴愬涓嬬殑灞炴ф枃浠訛紙/WEB-INF/jdbc.properties錛夛細
聽jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/test
jdbc.user=postgres
jdbc.password=
銆銆鎴戜滑鐨凚ean閰嶇疆濡備笅錛?/p>
<bean聽id="propertyConfigurer"聽
聽class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
聽聽聽聽<property聽name="location">
聽聽聽聽聽聽聽<value>/WEB-INF/jdbc.properties</value>
聽聽聽聽</property>
</bean>
<bean聽id="dataSource"聽
聽class="org.springframework.jdbc.datasource.DriverManagerDataSource">
聽聽聽聽<property聽name="driverClassName">
聽聽聽聽聽聽聽聽聽<value>${jdbc.driver}</value>
聽聽聽聽</property>
聽聽聽聽<property聽name="url">
聽聽聽聽聽聽聽聽聽<value>${jdbc.url}</value>
聽聽聽聽</property>
聽聽聽聽<property聽name="username">
聽聽聽聽聽聽聽聽聽<value>${jdbc.user}</value>
聽聽聽聽</property>
聽聽聽聽<property聽name="password">
聽聽聽聽聽聽聽聽聽<value>${jdbc.password}</value>
聽聽聽聽</property>
</bean>
銆銆濡備笂鎵榪幫紝鎴戜滑瀹氫箟浜嗕竴涓狿ropertyPlaceholderConfigurer綾葷殑瀹炰緥錛屽茍灝嗗叾浣嶇疆灞炴ц緗負鎴戜滑鐨勫睘鎬ф枃浠躲傝綾昏瀹炵幇涓築ean宸ュ巶鐨勫悗澶勭悊鍣紝騫跺皢浣跨敤瀹氫箟鍦ㄦ枃浠朵腑鐨勫睘鎬ф潵浠f浛鎵鏈夌殑鍗犱綅絎︼紙${...}value錛夈?/p>
銆銆鍒╃敤榪欑鎶鏈紝鎴戜滑鍙互浠巃pplicationContext.xml涓Щ闄ゆ墍鏈夌壒瀹氫簬涓繪満鐨勯厤緗睘鎬с傞氳繃榪欑鏂瑰紡錛屾垜浠彲浠ヨ嚜鐢卞湴涓鴻鏂囦歡娣誨姞鏂扮殑Bean錛岃屼笉蹇呮媴蹇冪壒瀹氫簬涓繪満灞炴х殑鍚屾鎬с傝繖鏍峰彲浠ョ畝鍖栫敓浜ч儴緗插拰緇存姢銆?/p>
銆銆涓婇潰鐨勬妧鏈В鍐充簡絎竴涓棶棰橈紝鍙槸濡傛灉鎮ㄨ鍒掍慨鏀逛笉鍚屽簲鐢ㄧ▼搴忛儴緗蹭箣闂寸殑Bean榪炴帴錛岃繖涓鎶鏈究涓嶅緢閫傚悎銆傞拡瀵硅繖涓闂鐨勪竴涓В鍐蟲柟妗堜究鏄澶栧垱寤轟竴涓悕涓篴pplicationContext-[hostname].xml 鐨刋ML瀹氫箟鏂囦歡銆傚叾涓?strong>[hostname]鏄儴緗插簲鐢ㄧ▼搴忕殑涓繪満鐨勫悕縐般備緥濡傦紝鍦ㄦ湰鍦扮殑鏈哄櫒涓婏紝榪欎釜鏂囦歡閫氬父鍚嶄負applicationContext-localhost.xml錛岃屽湪閮ㄧ講鏃訛紝瀹冨彲鑳芥洿鍚嶄負applicationContext-somehost.com.xml銆?/p>
銆銆鍙互鐚滄祴錛岃繖涓鏂囦歡蹇呴』鍖呮嫭鐗瑰畾浜庢煇涓涓繪満鐨勬墍鏈夐厤緗瓸ean銆傚湪鏈枃涓紝鎴戜滑灝嗗亣璁綿ataSource bean瀹氫箟灝嗕綅浜庤繖綾繪枃浠朵腑錛岃屼笉鏄氱敤鐨刟pplicationContext.xml瀹氫箟銆傚綋鐒訛紝榪欑鏈哄埗涓庡墠鑰呭茍闈炲啿紿侊紝浣嗘槸涓轟簡鏇村姞綆鍗曟槑浜嗭紝鎴戜滑灝嗗彧鍏蟲敞榪欑鏂規硶銆?/p>
銆銆鏃㈢劧鎴戜滑宸茬粡鏈変簡鐗瑰畾鐨勯厤緗紝涓嬮潰鎴戜滑灝辨潵璁ㄨ涓涓嬪浣曞皢鍏舵暣鍚堝埌鏁翠釜Spring MVC閰嶇疆姒傚康涓傝杈懼埌榪欎竴鐩殑錛屽彲浠ユ湁璁稿鏂規硶錛屾垜浠皢璇︾粏鍦頒竴涓璇存槑銆備絾棣栧厛錛屾垜浠簲璇ユ敞鎰忓埌錛岀敱浜庢湁浜汢ean鍙兘浣嶄簬鐙珛鐨勯厤緗枃浠朵腑錛屽洜姝ゅ湪applicationContext.xml涓紝鎵鏈夊瀹冧滑鐨勫眬閮ㄥ紩鐢ㄩ兘蹇呴』鏇存崲鎴愬叏灞鍚嶇О銆?/p>
銆銆渚嬪錛屽涓嬪紩鐢細
聽<property聽name="someProperty">
聽聽聽<ref聽local="someBean"/>
聽</property>
銆銆搴旀洿鏀逛負錛?/p>
聽<property聽name="someProperty">
聽聽聽<ref聽bean="someBean"/>
聽</property>
銆銆鍦ㄨ繖涔嬪悗錛屾垜浠湁寰堝鍙互娣誨姞棰濆鐨勮祫婧愪互鐢ㄤ簬閰嶇疆鐨勬柟寮忋傚叾涓渶鏄庢樉鐨勫氨鏄嬌鐢?lt;import>鏍囩灝嗚繖涓棰濆璧勬簮鍖呭惈鍦╝pplicationContext.xml閰嶇疆鏂囦歡涓備嬌鐢ㄦ椂錛岃灝嗚鏍囩鏀懼湪applicationContext.xml鏂囦歡寮澶淬備緥濡傦細
<import聽resource="applicationContext-somehost.com.xml"/>聽
銆銆鐜板湪錛屽湪鐙珛鐨刋ML瀹氫箟鏂囦歡鍜屾櫘閫氱殑搴旂敤紼嬪簭涓婁笅鏂囧畾涔夋枃浠朵腑鐨勬墍鏈夐氱敤Bean瀹氫箟閮芥湁浜嗙壒瀹氫簬涓繪満鐨勮繛鎺ャ傜敱浜庡ぇ澶氭暟鐨凚ean閮戒笉鏄壒瀹氫簬涓繪満鐨勶紝鍥犳鎴戜滑鍙互鍍忓鐞哤eb搴旂敤紼嬪簭涓殑鍏朵粬璧勬簮涓鏍瘋嚜鐢卞湴澶勭悊applicationContext.xml鏂囦歡錛屽茍鍙互閫氳繃鍚堥傜殑鐗堟湰鎺у埗緋葷粺涓庡叾榪涜鍚屾銆?/p>
銆銆浣嗘槸錛屼笂榪版柟娉曚篃鏈変竴瀹氱殑寮婄銆傚鏋滄偍鎯充繚鐣欎笉鍚孹ML鏂囦歡鐨勪笉鍚岄厤緗紝灝變粛鐒跺繀欏繪媴蹇僡pplicationContext.xml鐨勫悓姝ユэ紝鍥犱負璧勬簮鐨勫悕縐板繀欏繪牴鎹笉鍚屾湇鍔″櫒榪涜鏇存敼銆傝櫧鐒朵笌鍘熸湁鐨勮В鍐蟲柟妗堢浉姣旀湁浜嗗緢澶ф彁楂橈紝鍙渶鏇存敼鏂囦歡鍚嶏紝浣嗘槸榪欒繕鏄渶瑕佸紑鍙戜漢鍛樼殑鎵嬪姩鍗忓姪銆?/p>
銆銆鐢變簬涓巃pplicationContext.xml鐩告瘮錛屼富鏈洪厤緗笉闇濡傛棰戠箒鍦拌繘琛屾洿鏀癸紝鍥犳涓嬩竴姝ヤ究鏄皢涓繪満閰嶇疆縐誨姩鍒皐eb.xml鏂囦歡涓紙濡傛灉鍙兘鐨勮瘽錛夈傚垢榪愮殑鏄紝鎴戜滑鏈変竴涓彲鐢ㄧ殑瑙e喅鏂規銆傜湅涓涓嬩笅闈㈠叧浜巜eb.xml閰嶇疆鐨勭墖鏂細
聽 <listener>
聽聽聽<listener-class>
聽聽聽聽org.springframework.web.context.ContextLoaderListener
聽聽聽</listener-class>
聽聽</listener>
聽聽<context-param>
聽聽聽聽<param-name>contextConfigLocation</param-name>
聽聽聽聽<param-value>
聽聽聽聽/WEB-INF/applicationContext.xml聽
聽聽聽聽聽聽聽/WEB-INF/applicationContext-somehost.com.xml
聽聽聽聽</param-value>
聽聽</context-param>
銆銆姝e鎮ㄦ墍鐪嬪埌鐨勶紝闄や簡web.xml鏂囦歡涓父鏈夌殑ContextLoaderListener涔嬪錛屾垜浠繕娣誨姞浜哻ontextConfigLocation涓婁笅鏂囧弬鏁伴厤緗傝繖涓鍙傛暟鐢ㄤ簬鎸囩ず妗嗘灦鏌ユ壘榪欎簺閰嶇疆鏂囦歡鐨勪綅緗傚鏋滆繖涓鍙傛暟琚渷鐣ワ紝鍒橲pring灝卞彧鑳藉埌applicationContext.xml涓煡鎵俱傝繖閲屾垜浠篃瀹氫箟浜嗙壒瀹氫簬涓繪満鐨勯厤緗枃浠舵潵浣跨敤銆?/p>
銆銆鍒╃敤榪欑鏂規硶錛屾垜浠皢鎵鏈夌壒瀹氫簬涓繪満鐨勯厤緗粠applicationContext.xml鏂囦歡涓Щ闄わ紝榪欐牱渚垮噺杞諱簡鍏跺湪涓嶅悓搴旂敤紼嬪簭閮ㄧ講涓殑鍚屾鎬с?/p>
銆銆濡傛灉榪欑鏂規硶鎴愪負鎮ㄧ殑鏂頒範鎯紝鎮ㄨ繕鍙互浣垮叾鏇村姞鐏墊椿銆傞氳繃閬靛畧涓嬪垪鎸囦護錛屼篃鍙互灝嗙壒瀹氫簬涓繪満鐨勯厤緗粠web.xml鏂囦歡涓Щ闄ゃ?/p>
銆銆涓烘錛岄渶瑕佸垱寤虹壒瀹氫簬鎴戜滑鐨勫簲鐢ㄧ▼搴忎笂涓嬫枃鐨勭被錛?/p>
package聽net.nighttale.spring.util;
import聽java.net.InetAddress;
import聽org.springframework.web.context.support.XmlWebApplicationContext;
public聽class聽PerHostXmlWebApplicationContext聽
聽extends聽XmlWebApplicationContext聽
{
聽聽聽聽聽聽聽聽
聽聽聽聽protected聽String[]聽getDefaultConfigLocations()聽
{
聽聽聽聽聽聽聽聽聽聽聽聽String聽hostname聽=聽"localhost";
聽聽聽聽聽聽聽聽聽聽聽聽try聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽hostname聽=聽InetAddress.getLocalHost().getHostName();
聽聽聽聽聽聽聽聽聽聽聽聽}聽catch聽(Exception聽e)聽
{
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽String聽perHostConfiguration聽=聽DEFAULT_CONFIG_LOCATION_PREFIX聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+聽"applicationContext-"聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+聽hostname聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+聽DEFAULT_CONFIG_LOCATION_SUFFIX
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽;
聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽logger.debug(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"Adding聽per聽host聽configuration聽file:聽"聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+聽perHostConfiguration
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽);
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽if聽(getNamespace()聽!=聽null)聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽new聽String[]聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽DEFAULT_CONFIG_LOCATION_PREFIX聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+聽getNamespace()聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+聽DEFAULT_CONFIG_LOCATION_SUFFIX
聽聽聽聽聽聽聽聽聽聽聽聽聽,聽perHostConfiguration};
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽else聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return聽new聽String[]聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽DEFAULT_CONFIG_LOCATION
聽聽聽聽聽聽聽聽聽聽聽聽聽聽,聽perHostConfiguration};
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽}
}
銆銆榪欎釜綾繪嫇灞曚簡Spring涓父琚綔涓洪粯璁ゅ間嬌鐢ㄧ殑XmlWebApplicationContext銆俋mlWebApplicationContext綾誨皢Web搴旂敤紼嬪簭鐨勯厤緗粠XML瀹氫箟鏂囦歡涓鍒惰繃鏉ャ傞粯璁ゆ儏鍐典笅錛屽畠鍙互閰嶇疆鏉ヨ嚜applicationContext.xml鍜?strong>[servlet-name]-servlet.xml鏂囦歡涓殑搴旂敤紼嬪簭銆傝繖涓被鎵ц鐨勬儫涓涓欏歸澶栦換鍔′究鏄幏鍙栧畠鎵鍦ㄧ殑涓繪満鍚嶇О錛屽茍灝哸pplicationContext-[hostname].xml鏂囦歡娣誨姞鍒伴厤緗枃浠跺垪琛ㄤ腑銆?/p>
銆銆涓轟簡浣跨敤榪欎釜綾伙紝鎴戜滑闇瑕佸鍏惰繘琛岀紪璇戯紝灝嗗叾鍖呭惈鍦ㄧ被閫斿緞涓紝騫舵寚紺篠pring妗嗘灦浣跨敤瀹冦傚墠涓ゆ闈炲父綆鍗曪紝鎴戜滑灝變笉鍦ㄦ璧樿堪銆傛垜浠彲浠ユ寚紺篠ping閫氳繃contextClass涓婁笅鏂囧弬鏁版潵浣跨敤瀹冦傞櫎浜唚eb.xml鏂囦歡涓殑鍘熸湁閰嶇疆錛屾垜浠繕鍙互娣誨姞涓嬪垪鍐呭錛?/p>
<context-param>
聽聽聽<param-name>contextClass</param-name>
聽聽<param-value>
聽聽聽net.nighttale.spring.util.PerHostXmlWebApplicationContext
聽聽</param-value>
</context-param>
銆銆濡傛灉鎴戜滑浣跨敤榪欎竴閰嶇疆鐗囨柇錛屽皢浼氭湁涓変釜鏂囦歡琚敤浜庡垵濮嬪寲榪欎釜妗嗘灦錛?strong>[servlet-name]-servlet.xml銆乤pplicationContext-[hostname].xml浠ュ強applicationContext.xml銆?/p>
銆銆姝e鎮ㄦ墍鐪嬪埌鐨勶紝applicationContext.xml鍜寃eb.xml鏂囦歡宸茬粡瀹屽叏鎽嗚劚浜嗕換浣曠壒瀹氱殑閰嶇疆緇嗚妭錛岃屼笖鎮ㄤ篃涓嶅繀鎷呭績浼氬湪鏇存柊搴旂敤紼嬪簭鏃剁牬鍧忛厤緗?/p>
銆銆浣嗘槸錛岃繖縐嶆柟娉曟湁涓涓笉瓚充箣澶勩傚洜涓猴紝涓嶈鏄惁浼氫嬌鐢紝閮介渶瑕佸湪搴旂敤紼嬪簭閮ㄧ講涓湁絎笁涓厤緗枃浠躲傚湪榪欑鎯呭喌涓嬶紝渚夸笉闇瑕佺壒瀹氫簬涓繪満鐨勯厤緗備緥濡傦細
<?xml聽version="1.0"聽encoding="UTF-8"?>
<!DOCTYPE聽beans聽PUBLIC聽"-//SPRING//DTD聽BEAN//EN"聽
聽聽聽聽"http://www.springframework.org/dtd/spring-beans.dtd">
<beans></beans>
銆銆鏈鍚庯紝闇瑕佺煡閬撳簲鐢ㄧ▼搴忎笂涓嬫枃綾婚渶瑕佹煡鎵劇殑鐗瑰畾涓繪満鍚嶃傛鏌ヤ富鏈哄悕縐扮殑鏈綆鍗曠殑鏂規硶鏄湪鏈哄櫒涓婅繍琛屼笅鍒椾唬鐮侊細
System.out.println(InetAddress.getLocalHost().getHostName())
銆銆鍙互灝嗗叾浣滀負Java浠g爜鎵ц錛屼篃鍙湪鍠滄浣跨敤鐨勮剼鏈璦錛堝BeanShell鎴朑roovy錛変腑浣滀負涓涓叿鏈塉ava椋庢牸璇硶鐨勮剼鏈墽琛屻傚湪鑾峰彇浜嗕富鏈虹殑鍚嶇О涔嬪悗錛屽簲璇ュ垱寤轟竴涓粯璁ょ殑/WEB-INF/applicationContext-[hostname].xml絀烘枃浠跺す錛堝鎴戜滑涓婇潰鎵瀹氫箟鐨勶級錛岀劧鍚庝究鍙互寮濮嬩簡銆?/p>
銆銆鍦ㄦ湰鏂囦腑錛屾垜浠彁渚涗簡涓緋誨垪鐨勯厤緗妧宸э紝璁╂偍鍦ㄤ嬌鐢⊿pring MVC妗嗘灦瀹屾垚鏃ュ父宸ヤ綔鐨勬椂鍊欐洿鍔犺交鏉俱傚鏋滄偍甯屾湜鐭ラ亾濡備綍緇存姢鍚勭Web搴旂敤紼嬪簭閮ㄧ講錛屽彲浠ヨ瘯鐫鎵懼嚭鏈閫傚悎鎮ㄧ殑寮鍙戣繃紼嬬殑瑙e喅鏂規銆傛偍鐨勭敓媧諱細鏇翠負杞繪澗銆?/p>
鍘熸枃鍑哄:http://www.onjava.com/pub/a/onjava/2006/03/22/advanced-spring-configuration.html
聽浣滆呯畝浠?/span> | |
Dejan Bosanac 鏄竴浣嶈蔣浠跺紑鍙戜漢鍛樸佹妧鏈【闂拰浣滆咃紝浠栦富瑕佸叧娉ㄤ笉鍚屾妧鏈殑鏁村悎鍜屽崗浣滐紝灝ゅ叾鏄笌Java鍜學eb鐩稿叧鐨勬妧鏈?/td> |
鍦?/font>
SpringSide
閲岀炕鍒頒竴涓ソ涓滆タ錛?
jodd:form
"
Jodd Form鐨勪嬌鐢ㄦ瀬鍏剁畝鍗曪紝鍥犱負澶畝鍗曚簡錛屾墠浼氬悕涓嶈緇忎紶鑰岃鎴戜滑閫夌敤錛岃鎴戜滑緗旈【鍚勫ぇFramework鐨凢orm Tag錛?/font>
浠栧彧瑕佹妸<form>鐨勫ご灝句互<jodd:form bean= "mybean">鍖呬綇鍗沖彲錛屽氨浼氳嚜鍔ㄧ粦瀹歮ybean鐨勬墍鏈夊悓鍚嶅睘鎬у埌鏅歨tml鏍囪--input, selectbox, checkbox,radiobox.....鍦ㄨ繖浜沬nput妗嗛噷涓嶇敤鍐嶅啓浠諱綍浠g爜
鍙錛屽畠鐨勫ソ澶勪竴鏄妭綰︿唬鐮侊紝浜屾槸淇濈暀浜唄tml鐗堢殑form tag, 涓嶉渶瑕佺敤涓濂梩aglib鏉ヤ唬鏇?/strong>
鑰屼笖鏀寔鍐呭祵瀵硅薄鐨勭粦瀹氾紝濡俠ook.category.name銆?/font>
姣旈偅浜涢渶瑕佷嬌鐢ㄩ潪綰痟tml鏍囪鐨?lt;ww:input>錛岄愪釜緇戝畾input妗嗭紝select妗嗙殑Form Tag錛岃櫧鍑忎簡浜涜鐏墊椿鎬э紝浣嗗疄鍦ㄦ柟渚垮緱澶帀瀹熾?/font>
濡傛灉灞炴ф潵鑷簬request錛岃屼笉鏄煇涓猨ava bean錛屽啓<jodd:form bean= "request">
jodd閲囩敤鐨勬槸鏅氱殑bean鍙嶅皠錛岃皟鐢ㄦ墍鏈夊睘鎬х殑toString()鍑芥暟銆?/font>
娉ㄦ剰錛宩odd鍦╤tml tag涓嶅惈value="xxx"灞炴ф椂鎵嶄細鑷姩緇戝畾銆傚鏋滄煇涓猧nput妗嗕綘涓嶅笇鏈沯odd鑷姩緇戝畾錛屾垨鑰呴粯璁ょ殑toString()涓嶈兘婊¤凍瑕佹眰鏃訛紝鍙互鎵嬪伐涓鴻input妗嗗啓涓?value="xxxx"錛宩odd鐪嬪埌浣犲凡緇忓畾涔変簡灞炴у鹼紝灝變細鑷姩緇曞紑銆?br />
"
紜疄濂界敤錛?/p>
Jodd 鏄竴涓紑婧愰」鐩紝 http://jodd.sourceforge.net 錛?/span> 鏈変竴涓ソ鐢ㄧ殑 jsp 鏍囩錛屽彲浠ュぇ澶х畝鍖栨湁琛ㄥ崟杈撳叆鐨?/span> controller 銆?/span>
浣跨敤
Jodd
鐨勪紭鐐癸細
<!--[if !supportLists]-->1.<!--[endif]-->綆鍖栧拰緇熶竴controller錛屾姏寮?/span>extends SimpleFormController錛岀粺涓浣跨敤implements Controller鐨勬柟寮忋?/span>
<!--[if !supportLists]-->2.<!--[endif]-->綆鍖?/span>JSP欏甸潰鐨?/span>bind,涓嶉渶瑕佷竴涓瓧孌典竴涓瓧孌電殑緇戝畾銆?/span>
<!--[if !supportLists]-->3.<!--[endif]-->瀵?/span>bean娌℃湁浠諱綍瑕佹眰錛屽彲浠ヤ嬌鐢ㄤ換鎰忕殑bean鍋氫負formBean.
浣跨敤鏂規硶綆浠嬶細
<!--[if !supportLists]-->錛戯紟<!--[endif]-->鎶?/span>jodd.jar鏀懼埌web-inf->lib涓嬶紝鍦?/span>web.xml閲屽0鍚嶆爣絳撅細
<!--[if !supportLists]-->錛掞紟<!--[endif]-->浠繪剰鐨勪竴涓?/span>javaBean鍋氫負FormBean
<!--[if !supportLists]-->錛擄紟<!--[endif]-->鍦?/span>JSP欏甸潰浣跨敤jodd tag:,姣斿瀵瑰簲鐢ㄦ埛鐧誨綍欏甸潰鐨?/span>
<!--[if !supportLists]-->錛旓紟<!--[endif]-->Dispatch-servelt.xml涓controller鐨勯厤緗?/span>
<bean id="myController" class="caike.MyController">聽聽聽聽
聽聽聽 </bean>
聽聽聽
涓嶅啀闇瑕佽繖縐嶆柟寮忥細
聽聽聽
<!--
聽聽聽聽聽聽 <bean id="myController" class="caike.MyFormController">聽聽聽聽
聽聽聽聽聽聽 <property name="commandClass" value="caike" />聽聽聽聽聽聽
聽聽聽聽聽聽 <property name="formView" value="userForm" />聽聽聽
聽聽聽聽聽聽 </bean>
聽聽聽 -->
<!--[if !supportLists]-->錛曪紟<!--[endif]-->鍦?/span>controller涓彇鍑?/span>user
闇瑕佹敞鎰忕殑鍦版柟錛?/span>
琛ㄥ崟涓搴旂殑鍚嶅瓧 name 鍜?/span> javaBean 閲屽搴旂殑灞炴у悕瑕佺浉鍚屻?/span>
<input type="text" name="userName"
聽聽聽聽聽聽聽聽聽聽聽聽聽 class="input" size="20">
public class User {
聽聽聽聽聽聽 private String userName;
.......
http://www.tkk7.com/calvin/archive/2005/08/24/10914.html
銆 鑺遍挶鐨勫勾鍗?/a> 銆銆銆綆鍖朣pring(4)--View灞?/a>