绠€浠嬶細 聽浠?V2.1 寮€濮嬶紝Struts 2 寮€濮嬫彁渚?Convention 鎻掍欢锛屽畠鍏佽鏍规嵁鈥滅害瀹氣€濇潵鎼滅储 Action锛屼互鍙婄鐞?Action 鍜?Result 鐨勬槧灏勩€傚彟澶栵紝Struts 2.1 杩樻彁渚涗簡 REST 鎻掍欢锛屼娇 Struts 2 鍙互鏀寔 Rails 椋庢牸鐨?URL锛屼互瀵瑰鎻愪緵 REST 椋庢牸鐨勮祫婧愭湇鍔°€傛湰鏂囦綔鑰呴€氳繃浠g爜绀轰緥婕旂ず浜嗚繖浜涚壒鎬с€?
REST 绠€浠?
REST 鏄嫳鏂?Representational State Transfer 鐨勭缉鍐欙紝杩欎釜鏈鐢?Roy Thomas Fielding 鍗氬+鍦ㄤ粬鐨勮鏂囥€夾rchitectural Styles and the Design of Network-based Software Architectures銆嬩腑鎻愬嚭銆備粠杩欑瘒璁烘枃鐨勬爣棰樺彲浠ョ湅鍑猴細REST 鏄竴绉嶅熀浜庣綉缁滅殑杞欢鏋舵瀯椋庢牸銆?
鎻愮ず锛氬浗鍐呭緢澶氱綉缁滆祫鏂欏皢 REST 缈昏瘧涓衡€滆〃杩版€х姸鎬佽浆绉烩€濓紝涓嶈繃绗旇€呭杩欎釜缈昏瘧涓嶅お璁ゅ悓銆傚洜涓鸿繖涓笓涓氭湳璇棤娉曚紶杈?REST 鐨勫惈涔夛紝璇昏€呭彲浠ュ厛涓嶈鐞嗕細 REST 鍒板簳璇ュ浣曠炕璇戯紝灏介噺鍏堝幓鐞嗚В REST 鏄粈涔堬紵鏈変粈涔堢敤锛熺劧鍚庡啀鏉ョ湅杩欎釜鏈鐨勭炕璇戙€傚叧浜?Roy Thomas Fielding 鍗氬+鐨勫師鏂囧弬瑙佸涓嬪湴鍧€锛歨ttp://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm銆?
REST 鏋舵瀯鏄拡瀵逛紶缁?Web 搴旂敤鎻愬嚭鐨勪竴绉嶆敼杩涳紝鏄竴绉嶆柊鍨嬬殑鍒嗗竷寮忚蒋浠惰璁℃灦鏋勩€傚浜庡紓鏋勭郴缁熷浣曡繘琛屾暣鍚堢殑闂锛岀洰鍓嶄富娴佸仛娉曢兘闆嗕腑鍦ㄤ娇鐢?SOAP銆乄SDL 鍜?WS-* 瑙勮寖鐨?Web Services銆傝€?REST 鏋舵瀯瀹為檯涓婁篃鏄В鍐冲紓鏋勭郴缁熸暣鍚堥棶棰樼殑涓€绉嶆柊鎬濊矾銆?
濡傛灉寮€鍙戣€呭湪寮€鍙戣繃绋嬩腑鑳藉潥鎸?REST 鍘熷垯锛屽皢鍙互寰楀埌涓€涓娇鐢ㄤ簡浼樿川 Web 鏋舵瀯鐨勭郴缁燂紝浠庤€屼负绯荤粺鎻愪緵鏇村ソ鐨勫彲浼哥缉鎬э紝骞堕檷浣庡紑鍙戦毦搴︺€傚叧浜?REST 鏋舵瀯鐨勪富瑕佸師鍒欏涓嬶細
- 缃戠粶涓婄殑鎵€鏈変簨鐗╅兘鍙鎶借薄涓鸿祫婧愶紙Resource锛夈€?/li>
- 姣忎釜璧勬簮閮芥湁涓€涓敮涓€鐨勮祫婧愭爣璇嗙锛圧esource Identifier锛夈€?/li>
- 鍚屼竴璧勬簮鍏锋湁澶氱琛ㄧ幇褰㈠紡銆?/li>
- 浣跨敤鏍囧噯鏂规硶鎿嶄綔璧勬簮銆?/li>
- 閫氳繃缂撳瓨鏉ユ彁楂樻€ц兘銆?/li>
- 瀵硅祫婧愮殑鍚勭鎿嶄綔涓嶄細鏀瑰彉璧勬簮鏍囪瘑绗︺€?/li>
- 鎵€鏈夌殑鎿嶄綔閮芥槸鏃犵姸鎬佺殑锛圫tateless锛夈€?/li>
浠呬粠涓婇潰鍑犳潯鍘熷垯鏉ョ湅 REST 鏋舵瀯锛屽叾瀹炰緷鐒舵瘮杈冮毦浠ョ悊瑙o紝涓嬮潰绗旇€呭皢浠庡涓嬩簩涓柟闈㈡潵浠嬬粛 REST銆?
璧勬簮鍜屾爣璇嗙
鐜板湪鐨?Web 搴旂敤涓婂寘鍚簡澶ч噺淇℃伅锛屼絾杩欎簺淇℃伅閮借闅愯棌鍦?HTML銆丆SS 鍜?JavaScript 浠g爜涓紝瀵逛簬鏅€氭祻瑙堣€呰€岃█锛屼粬浠繘鍏ヨ繖涓郴缁熸椂鏃犳硶鐭ラ亾璇ョ郴缁熷寘鍚摢浜涢〉闈紱瀵逛簬涓€涓渶瑕佽闂绯荤粺璧勬簮鐨勭涓夋柟绯荤粺鑰岃█锛屽悓鏍锋棤娉曟槑鐧借繖涓郴缁熷寘鍚 灏戝姛鑳藉拰淇℃伅銆?
URI 鍜?URL
涓?URI 鐩稿叧鐨勬蹇佃繕鏈?URL锛孶RL 鏄?Uniform Resource Locator锛屼篃灏辨槸缁熶竴璧勬簮瀹氫綅绗︾殑鎰忔€濄€傚叾涓?http://www.crazyit.org 灏辨槸涓€涓粺涓€璧勬簮瀹氫綅绗︼紝URL 鏄?URI 鐨勫瓙闆嗐€傜畝鑰岃█涔嬶細姣忎釜 URL 閮芥槸 URI锛屼絾涓嶆槸姣忎釜 URI 閮芥槸 URL銆?
浠?REST 鏋舵瀯鐨勮搴︽潵鐪嬶紝璇ョ郴缁熼噷鍖呭惈鐨勬墍鏈夊姛鑳藉拰淇℃伅锛岄兘鍙绉颁负璧勬簮锛圧esource锛夛紝REST 鏋舵瀯涓殑璧勬簮鍖呭惈闈欐€侀〉闈€丣SP 鍜?Servlet 绛夛紝璇ュ簲鐢ㄦ毚闇插湪缃戠粶涓婄殑鎵€鏈夊姛鑳藉拰淇℃伅閮藉彲琚О涓鸿祫婧愩€?
闄ゆ涔嬪锛孯EST 鏋舵瀯瑙勮寖浜嗗簲鐢ㄨ祫婧愮殑鍛藉悕鏂瑰紡锛孯EST 瑙勫畾瀵瑰簲鐢ㄨ祫婧愪娇鐢ㄧ粺涓€鐨勫懡鍚嶆柟寮忥細REST 绯荤粺涓殑璧勬簮蹇呴』缁熶竴鍛藉悕鍜岃鍒掞紝REST 绯荤粺鐢变娇鐢?URI锛圲niform Resource Identifier锛屽嵆缁熶竴璧勬簮鏍囪瘑绗︼級鍛藉悕鐨勮祫婧愮粍鎴愩€傜敱浜?REST 瀵硅祫婧愪娇鐢ㄤ簡鍩轰簬 URI 鐨勭粺涓€鍛藉悕锛屽洜姝よ繖浜涗俊鎭氨鑷劧鍦版毚闇插嚭鏉ヤ簡锛屼粠鑰岄伩鍏?鈥滀俊鎭湴绐栤€濈殑涓嶈壇鍚庢灉銆?
瀵逛簬褰撲粖鏈€甯歌鐨勭綉缁滃簲鐢ㄦ潵璇达紝璧勬簮鏍囪瘑绗﹀氨鏄?URI锛岃祫婧愮殑浣跨敤鑰呭垯鏍规嵁 URI 鏉ユ搷浣滃簲鐢ㄨ祫婧愩€傚綋 URI 鍙戠敓鏀瑰彉鏃讹紝琛ㄦ槑瀹㈡埛鏈烘墍浣跨敤鐨勮祫婧愬彂鐢熶簡鏀瑰彉銆?
浠庤祫婧愮殑瑙掑害鏉ョ湅锛屽綋瀹㈡埛鏈烘搷浣滀笉鍚岀殑璧勬簮鏃讹紝璧勬簮鎵€鍦ㄧ殑 Web 椤碉紙灏?Web 椤靛綋鎴愯櫄鎷熺殑鐘舵€佹満鏉ョ湅锛夌殑鐘舵€佸氨浼氬彂鐢熸敼鍙樸€佽縼绉伙紙Transfer锛夛紝杩欏氨鏄?REST 鏈涓?ST锛圫tate Tranfer锛夌殑鐢辨潵浜嗐€?
瀹㈡埛鏈轰负浜嗘搷浣滀笉鍚岀姸鎬佺殑璧勬簮锛屽垯闇€瑕佸彂閫佷竴浜?Representational 鐨勬暟鎹紝杩欎簺鏁版嵁鍖呭惈蹇呰鐨勪氦浜掓暟鎹紝浠ュ強鎻忚堪杩欎簺鏁版嵁鐨勫厓鏁版嵁銆傝繖灏辨槸 REST 鏈涓?RE锛圧epresentational锛夌殑鐢辨潵浜嗐€傜悊瑙d簡杩欎釜灞傛涔嬪悗锛岃嚦浜?REST 濡備綍缈昏瘧銆佹垨鏄惁鐪熸缁欏畠涓€涓腑鏂囨湳璇紝璇昏€呭彲鑷鍐冲畾銆?
聽
鎿嶄綔璧勬簮鐨勬柟寮?
瀵逛簬 REST 鏋舵瀯鐨勬湇鍔″櫒绔€岃█锛屽畠鎻愪緵鐨勬槸璧勬簮锛屼絾鍚屼竴璧勬簮鍏锋湁澶氱琛ㄧ幇褰㈠紡锛堝彲閫氳繃鍦?HTTP Content-type 澶翠腑鍖呭惈鍏充簬鏁版嵁绫诲瀷鐨勫厓鏁版嵁锛夈€傚鏋滃鎴风▼搴忓畬鍏ㄦ敮鎸?HTTP 搴旂敤鍗忚锛屽苟鑳芥纭鐞?REST 鏋舵瀯鐨勬爣鍑嗘暟鎹牸寮忥紝閭d箞瀹冨氨鍙互涓庝笘鐣屼笂浠绘剰涓€涓?REST 椋庢牸鐨勭敤鎴蜂氦浜掋€傝繖绉嶆儏鍐典笉浠呴€傜敤浜庝粠鏈嶅姟鍣ㄧ鍒板鎴风鐨勬暟鎹紝鍙嶄箣浜︾劧鈥斺€斿€樿嫢浠庡鎴风浼犳潵鐨勬暟鎹鍚?REST 鏋舵瀯鐨勬爣鍑嗘暟鎹牸寮忥紝閭d箞鏈嶅姟鍣ㄧ涔熷彲浠ユ纭鐞嗘暟鎹紝鑰屼笉鍘诲叧蹇冨鎴风鐨勭被鍨嬨€?
鍏稿瀷鎯呭喌涓嬶紝REST 椋庢牸鐨勮祫婧愯兘浠?XHTML銆乆ML 鍜?JSON 涓夌褰㈠紡瀛樺湪锛屽叾涓?XML 鏍煎紡鐨勬暟鎹槸 WebServices 鎶€鏈殑鏁版嵁浜ゆ崲鏍煎紡锛岃€?JSON 鍒欐槸鍙︿竴绉嶈交閲忕骇鐨勬暟鎹氦鎹㈡牸寮忥紱鑷充簬 XHTML 鏍煎紡鍒欎富瑕佺敱娴忚鍣ㄨ礋璐e憟鐜般€傚綋鏈嶅姟鍣ㄤ负鎵€鏈夎祫婧愭彁渚涘绉嶈〃鐜板舰寮忎箣鍚庯紝杩欎簺璧勬簮涓嶄粎鍙互琚爣鍑?Web 娴忚鍣ㄦ墍浣跨敤锛岃繕鍙互鐢?JavaScript 閫氳繃 Ajax 鎶€鏈皟鐢紝鎴栬€呬互 RPC锛圧emote Procedure Call锛夐鏍艰皟鐢紝浠庤€屽彉鎴?REST 椋庢牸鐨?WebServices銆?
REST 鏋舵瀯闄や簡瑙勫畾鏈嶅姟鍣ㄦ彁渚涜祫婧愮殑鏂瑰紡涔嬪锛岃繕鎺ㄨ崘瀹㈡埛绔娇鐢?HTTP 浣滀负 Generic Connector Interface锛堜篃灏辨槸閫氱敤杩炴帴鍣ㄦ帴鍙o級锛岃€?HTTP 鍒欐妸瀵逛竴涓?URI 鐨勬搷浣滈檺鍒跺湪浜?4 涓箣鍐咃細GET銆丳OST銆丳UT 鍜?DELETE銆傞€氳繃浣跨敤閫氱敤杩炴帴鍣ㄦ帴鍙e璧勬簮杩涜鎿嶄綔鐨勫ソ澶勬槸淇濊瘉绯荤粺鎻愪緵鐨勬湇鍔¢兘鏄珮搴﹁В鑰︾殑锛屼粠鑰岀畝鍖栦簡绯荤粺寮€鍙戯紝鏀瑰杽浜嗙郴缁熺殑浜や簰鎬у拰鍙噸鐢ㄦ€с€?
REST 鏋舵瀯瑕佹眰瀹㈡埛绔殑鎵€鏈夌殑鎿嶄綔鍦ㄦ湰璐ㄤ笂鏄棤鐘舵€佺殑锛屽嵆浠庡鎴峰埌鏈嶅姟鍣ㄧ殑姣忎釜 Request 閮藉繀椤诲寘鍚悊瑙h Request 鐨勬墍鏈夊繀闇€淇℃伅銆傝繖绉嶆棤鐘舵€佹€х殑瑙勮寖鎻愪緵浜嗗涓嬪嚑鐐瑰ソ澶勶細
- 鏃犵姸鎬佹€т娇寰楀鎴风鍜屾湇鍔″櫒绔笉蹇呬繚瀛樺鏂圭殑璇︾粏淇℃伅锛屾湇鍔″櫒鍙渶瑕佸鐞嗗綋鍓?Request锛岃€屼笉蹇呬簡瑙e墠闈?Request 鐨勫巻鍙层€?/li>
- 鏃犵姸鎬佹€у噺灏戜簡鏈嶅姟鍣ㄤ粠灞€閮ㄩ敊璇腑鎭㈠鐨勪换鍔¢噺锛屽彲浠ラ潪甯告柟渚垮湴瀹炵幇 Fail Over 鎶€鏈紝浠庤€屽緢瀹规槗鍦板皢鏈嶅姟鍣ㄧ粍浠堕儴缃插湪闆嗙兢鍐呫€?/li>
- 鏃犵姸鎬佹€т娇寰楁湇鍔″櫒绔笉蹇呭湪澶氫釜 Request 涓繚瀛樼姸鎬侊紝浠庤€屽彲浠ユ洿瀹规槗鍦伴噴鏀捐祫婧愩€?/li>
- 鏃犵姸鎬佹€ф棤闇€鏈嶅姟缁勪欢淇濆瓨 Request 鐘舵€侊紝鍥犳鍙鏈嶅姟鍣ㄥ厖鍒嗗埄鐢?Pool 鎶€鏈潵鎻愰珮绋冲畾鎬у拰鎬ц兘銆?/li>
褰撶劧锛屾棤鐘舵€佹€т細浣垮緱鏈嶅姟鍣ㄤ笉鍐嶄繚瀛?Request 鐨勭姸鎬佹暟鎹紝鍥犳闇€瑕佸湪涓€绯诲垪 Request 涓彂閫侀噸澶嶆暟鎹紝浠庤€屾彁楂樹簡绯荤粺鐨勯€氫俊鎴愭湰銆備负浜嗘敼鍠勬棤鐘舵€佹€у甫鏉ョ殑鎬ц兘涓嬮檷锛孯EST 鏋舵瀯濉姞浜嗙紦瀛樼害鏉熴€傜紦瀛樼害鏉熷厑璁搁殣寮忔垨鏄惧紡鍦版爣璁颁竴涓?Response 涓殑鏁版嵁锛岃繖鏍峰氨璧嬩簣浜嗗鎴风缂撳瓨 Response 鏁版嵁鐨勫姛鑳斤紝杩欐牱灏卞彲浠ヤ负浠ュ悗鐨?Request 鍏辩敤缂撳瓨鐨勬暟鎹紝閮ㄥ垎鎴栧叏閮ㄧ殑娑堥櫎涓€浜涗氦浜掞紝澧炲姞浜嗙綉缁滅殑鏁堢巼銆備絾鏄敤浜庡鎴风缂撳瓨浜嗕俊鎭紝涔熷氨鍚屾椂澧炲姞浜嗗鎴风涓庢湇鍔″櫒鏁版嵁涓嶄竴鑷寸殑鍙兘锛屼粠鑰岄檷浣庝簡鍙?闈犳€с€?
聽
聽
Struts 2 鐨?REST 鏀寔
绾﹀畾浼樹簬閰嶇疆
Convention 杩欎釜鍗曡瘝鐨勭炕璇戣繃鏉ュ氨鏄€滅害瀹氣€濈殑鎰忔€濄€傛湁 Ruby On Rails 寮€鍙戠粡楠岀殑璇昏€呯煡閬?Rails 鏈変竴鏉¢噸瑕佸師鍒欙細绾﹀畾浼樹簬閰嶇疆銆俁ails 寮€鍙戣€呭彧闇€瑕佹寜绾﹀畾寮€鍙?ActiveRecord銆丄ctiveController 鍗冲彲锛屾棤闇€杩涜閰嶇疆銆傚緢鏄庢樉锛孲truts 2 鐨?Convention 鎻掍欢鍊熼壌浜?Rails 鐨勫垱鎰忥紝鐢氳嚦杩炴彃浠剁殑鍚嶇О閮藉€熼壌浜嗏€滅害瀹氫紭浜庨厤缃€濆師鍒欍€?
浠?Struts 2.1 寮€濮嬶紝Struts 2 鏀逛负浣跨敤 Convention 鎻掍欢鏉ユ敮鎸侀浂閰嶇疆銆侰onvention 鎻掍欢褰诲簳鍦版姏寮冧簡閰嶇疆淇℃伅锛屼笉浠呬笉闇€瑕佷娇鐢?struts.xml 鏂囦欢杩涜閰嶇疆锛岀敋鑷充笉闇€瑕佷娇鐢?Annotation 杩涜閰嶇疆銆傝€屾槸鐢?Struts 2 鏍规嵁绾﹀畾鏉ヨ嚜鍔ㄩ厤缃€?
Convention 杩欎釜鍗曡瘝鐨勭炕璇戣繃鏉ュ氨鏄€滅害瀹氣€濈殑鎰忔€濄€傛湁 Ruby On Rails 寮€鍙戠粡楠岀殑璇昏€呯煡閬?Rails 鏈変竴鏉¢噸瑕佸師鍒欙細绾﹀畾浼樹簬閰嶇疆銆俁ails 寮€鍙戣€呭彧闇€瑕佹寜绾﹀畾寮€鍙?ActiveRecord銆丄ctiveController 鍗冲彲锛屾棤闇€杩涜閰嶇疆銆傚緢鏄庢樉锛孲truts 2 鐨?Convention 鎻掍欢鍊熼壌浜?Rails 鐨勫垱鎰忥紝鐢氳嚦杩炴彃浠剁殑鍚嶇О閮藉€熼壌浜嗏€滅害瀹氫紭浜庨厤缃€濆師鍒欍€?
鐢变簬 Struts 2 鐨?Convention 鎻掍欢鐨勪富瑕佺壒鐐规槸鈥滅害瀹氫紭浜庨厤缃€濓紝褰撴垜浠凡缁忎範鎯簡 Struts 2 鐨勫熀鏈紑鍙戞柟娉曚箣鍚庯紝濡傛灉甯屾湜鏀逛负浣跨敤 Convention 鎻掍欢涔熼潪甯稿鏄擄紝鎴戜滑鍙鏀惧純 Stuts 2.1 搴旂敤鍘熸湁鐨勯厤缃枃浠讹紝鏀逛负鎸?Convention 鎻掍欢鐨勭害瀹氭潵瀹氫箟 Action 鍗冲彲銆?
浠?Convention 鎻掍欢涓哄熀纭€锛孲truts 2.1 鍙堟柊澧炰簡 REST 鎻掍欢锛屽厑璁?Struts 2 搴旂敤瀵瑰鎻愪緵 REST 鏈嶅姟銆俁EST 鎻掍欢涔熸棤闇€浣跨敤 XML 杩涜閰嶇疆绠$悊銆係truts 2.1 閫氳繃 REST 鎻掍欢瀹屽叏鍙互鎻愪緵璁╀汉鍜屾満鍣ㄥ鎴风鍏卞悓浣跨敤鐨勮祫婧愶紝骞舵敮鎸?Ruby On Rails 椋庢牸鐨?URL銆?
聽
RestActionMapper 绠€浠?
浠庢湰璐ㄤ笂鏉ョ湅锛孲truts 2 渚濈劧鏄竴涓?MVC 妗嗘灦锛屾渶鍒濊璁?Struts 2 鏃跺苟娌℃湁鎸?REST 鏋舵瀯杩涜璁捐锛屽洜姝?Struts 2 鏈川涓婂苟涓嶆槸涓€涓?REST 妗嗘灦銆傜敱浜?Struts 2 鎻愪緵浜嗚壇濂界殑鍙墿灞曟€э紝鍥犳鍏佽閫氳繃 REST 鎻掍欢灏嗗叾鎵╁睍鎴愭敮鎸?REST 鐨勬鏋躲€俁EST 鎻掍欢鐨勬牳蹇冩槸 RestActionMapper锛屽畠璐熻矗灏?Rails 椋庢牸鐨?URL 杞崲涓轰紶缁熻姹傜殑 URL銆?
鐢?WinRAR 鎵撳紑 struts2-rest-plugin-2.1.6 鏂囦欢锛岀湅鍒拌鏂囦欢閲屽寘鍚竴涓?struts-plugin.xml 鏂囦欢锛岃鏂囦欢涓寘鍚涓嬩竴琛岋細
|
聽
閫氳繃鏌ョ湅 RestActionMapper 鐨?API 璇存槑锛屾垜浠彂鐜板畠鍙帴鍙楀涓嬪嚑涓弬鏁帮細
- struts.mapper.idParameterName锛氱敤浜庤缃?ID 璇锋眰鍙傛暟鐨勫弬鏁板悕锛岃灞炴€у€奸粯璁ゆ槸 id銆?/li>
- struts.mapper.indexMethodName锛氳缃笉甯?id 璇锋眰鍙傛暟鐨?GET 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 index銆?/li>
- struts.mapper.getMethodName锛氳缃甫 id 璇锋眰鍙傛暟鐨?GET 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 show銆?/li>
- struts.mapper.postMethodName锛氳缃笉甯?id 璇锋眰鍙傛暟鐨?POST 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 create銆?/li>
- struts.mapper.putMethodName锛氳缃甫 id 璇锋眰鍙傛暟鐨?PUT 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 update銆?/li>
- struts.mapper.deleteMethodName锛氳缃甫 id 璇锋眰鍙傛暟鐨?DELETE 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 destroy銆?/li>
- struts.mapper.editMethodName锛氳缃甫 id 璇锋眰鍙傛暟銆佷笖鎸囧畾鎿嶄綔 edit 璧勬簮鐨?GET 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 edit銆?/li>
- struts.mapper.newMethodName锛氳缃笉甯?id 璇锋眰鍙傛暟銆佷笖鎸囧畾鎿嶄綔 edit 璧勬簮鐨?GET 璇锋眰璋冪敤 Action 鐨勫摢涓柟娉曘€傝灞炴€у€奸粯璁ゆ槸 editNew銆?/li>
鍦?RestActionMapper 鐨勬柟娉曞垪琛ㄤ腑锛屾垜浠湅鍒?setIdParameterName銆乻etIndexMethodName銆乻etGetMethodName銆?setPostMethodName銆乻etPutMethodName銆乻etDeleteMethodName銆?setEditMethodName銆乻etNewMethodName 绛夋柟娉曪紝杩欎簺鏂规硶瀵瑰簲涓轰笂闈㈠垪鍑虹殑鏂规硶鎻愪緵 setter 鏀寔銆?
閫氬父鎯呭喌涓嬶紝鎴戜滑娌℃湁蹇呰鏀瑰彉 RestActionMapper 鐨勫弬鏁帮紝鐩存帴浣跨敤杩欎簺鍙傛暟鐨勯粯璁ゅ€煎氨鍙敮鎸?Rails 椋庢牸鐨?REST銆傛牴鎹墠闈粙缁嶅彲浠ョ湅鍑猴細鏀寔 REST 椋庢牸鐨?Action 鑷冲皯鍖呭惈濡備笅 7 涓柟娉曪細
- index锛氬鐞嗕笉甯?id 璇锋眰鍙傛暟鐨?GET 璇锋眰銆?/li>
- show锛氬鐞嗗甫 id 璇锋眰鍙傛暟鐨?GET 璇锋眰銆?/li>
- create锛氬鐞嗕笉甯?id 璇锋眰鍙傛暟鐨?POST 璇锋眰銆?/li>
- update锛氬鐞嗗甫 id 璇锋眰鍙傛暟鐨?PUT 璇锋眰銆?/li>
- destroy锛氬鐞嗗甫 id 璇锋眰鍙傛暟鐨?DELETE 璇锋眰銆?/li>
- edit锛氬鐞嗗甫 id 璇锋眰鍙傛暟锛屼笖鎸囧畾鎿嶄綔 edit 璧勬簮鐨?GET 璇锋眰銆?/li>
- editNew锛氬鐞嗕笉甯?id 璇锋眰鍙傛暟锛屼笖鎸囧畾鎿嶄綔 edit 璧勬簮鐨?GET 璇锋眰銆?/li>
濡傛灉璇锋眰闇€瑕佸悜鏈嶅姟鍣ㄥ彂閫?id 璇锋眰鍙傛暟锛岀洿鎺ュ皢璇锋眰鍙傛暟鐨勫€奸檮鍔犲湪 URL 涓嵆鍙€傝〃 1 鏄剧ず浜?RestActionMapper 瀵逛笉鍚?HTTP 璇锋眰鐨勫鐞嗙粨鏋溿€?
琛?1. RestActionMapper 瀵?HTTP 璇锋眰鐨勫鐞?
HTTP 鏂规硶 | URI | 璋冪敤 Action 鐨勬柟娉? | 璇锋眰鍙傛暟 |
GET | /book | index | 聽 |
POST | /book | create | 聽 |
PUT | /book/2 | update | id=2 |
DELETE | /book/2 | destroy | id=2 |
GET | /book/2 | show | id=2 |
GET | /book/2/edit | edit | id=2 |
GET | /book/new | editNew | 聽 |
聽
涓嶅垢鍦版槸锛屾爣鍑?HTML 璇█鐩墠鏍规湰涓嶆敮鎸?PUT 鍜?DELETE 涓や釜鎿嶄綔锛屼负浜嗗讥琛ヨ繖绉嶄笉瓒筹紝REST 鎻掍欢鍏佽寮€鍙戣€呮彁浜よ姹傛椂棰濆澧炲姞涓€涓?_method 璇锋眰鍙傛暟锛岃鍙傛暟鍊煎彲浠ヤ负 PUT 鎴?DELETE锛岀敤浜庢ā鎷?HTTP 鍗忚鐨?PUT 鍜?DELETE 鎿嶄綔銆?
鍥為〉棣?
涓?Struts 2 搴旂敤瀹夎 REST 鎻掍欢
瀹夎 REST 鎻掍欢闈炲父绠€鍗曪紝鍙渶鎸夊涓嬫楠よ繘琛屽嵆鍙細
- 灏?Struts 2 椤圭洰涓?struts2-convention-plugin-2.1.6.jar銆乻truts2-rest-plugin-2.1.6.jar 涓や釜 JAR 鍖呭鍒跺埌 Web 搴旂敤鐨?WEB-INF/lib 璺緞涓嬨€?/li>
- 鐢变簬 Struts 2 鐨?REST 鎻掍欢杩橀渶瑕佸皢鎻愪緵 XML銆丣SON 鏍煎紡鐨勬暟鎹紝鍥犳杩橀渶瑕佸皢 xstream-1.2.2.jar銆乯son-lib-2.1.jar銆乪zmorph-1.0.3.jar 浠ュ強 Jakarta-Common 鐩稿叧 JAR 鍖呭鍒跺埌 Web 搴旂敤鐨?WEB-INF/lib 璺緞涓嬨€?/li>
- 閫氳繃 struts.xml銆乻truts.properties 鎴?web.xml 鏀瑰彉 struts.convention.default.parent.package 甯搁噺鐨勫€硷紝璁╂敮鎸?REST 椋庢牸鐨?Action 鎵€鍦ㄧ殑鍖呴粯璁ょ户鎵?rest-default锛岃€屼笉鏄户鎵块粯璁ょ殑 convention-default 鐖跺寘銆?/li>
瀵逛簬绗笁涓楠よ€岃█锛屽紑鍙戣€呭畬鍏ㄥ彲浠ヤ笉璁剧疆璇ュ父閲忥紝濡傛灉寮€鍙戣€呬笉璁剧疆璇ュ父閲忥紝鍒欐剰鍛崇潃寮€鍙戣€呭繀椤婚€氳繃 Annotation 涓烘瘡涓?Action 绫昏缃埗鍖呫€?
鍥為〉棣?
瀹炵幇鏀寔 REST 鐨?Action 绫?
鍦ㄥ疄鐜版敮鎸?REST 鐨?Action 涔嬪墠锛屾垜浠厛涓虹郴缁熸彁渚涗竴涓?Model 绫伙細Book锛岃 Book 绫婚潪甯哥畝鍗曪紝浠g爜濡備笅锛?
|
聽
闄や簡鎻愪緵涓婇潰鐨?Book 绫讳箣澶栵紝鎴戜滑杩樹负璇?Book 绫绘彁渚涗竴涓笟鍔¢€昏緫缁勪欢锛欱ookService銆備负浜嗙畝鍗曡捣瑙侊紝BookService 绫讳笉鍐嶄緷璧?DAO 缁勪欢璁块棶鏁版嵁搴擄紝鑰屾槸鐩存帴鎿嶄綔鍐呭瓨涓殑 Book 鏁扮粍鈥斺€旂畝鍗曞湴璇达紝鏈郴缁熶腑鐘舵€佹槸鐬€佺殑锛屾病鏈夋寔涔呭寲淇濆瓨锛屽簲鐢ㄨ繍琛岃繃绋嬩腑杩欎簺鐘舵€佷竴鐩村瓨鍦紝浣嗕竴鏃﹂噸鍚搴旂敤锛屽垯绯荤粺鐘舵€佷涪澶便€備笅闈㈡槸 BookService 绫荤殑浠g爜锛?
|
聽
浠庝笂闈㈢矖浣撳瓧浠g爜鍙互鐪嬪嚭锛孊ookService 鎻愪緵浜?4 涓柟娉曪紝鐢ㄤ簬瀹炵幇瀵?Book 瀵硅薄鐨?CRUD 鎿嶄綔銆?
涓嬮潰寮€濮嬪畾涔夋敮鎸?REST 鐨?Action 绫讳簡锛岃繖涓?Action 绫讳笌鍓嶉潰浠嬬粛 Struts 2 鐨勬櫘閫?Action 瀛樺湪涓€浜涘樊寮傗€斺€斿洜涓鸿 Action 涓嶅啀鐢?execute() 鏂规硶鏉ュ鐞嗙敤鎴疯姹傦紝鑰屾槸浣跨敤鍓嶉潰浠嬬粛鐨?7 涓爣鍑嗘柟娉曟潵澶勭悊鐢ㄦ埛璇锋眰銆傞櫎姝や箣澶栵紝璇?Action 鎬绘槸闇€瑕佸鐞?id 璇锋眰鍙傛暟锛屽洜姝ゅ繀椤绘彁渚?id 璇锋眰鍙傛暟锛屽苟涓轰箣鎻愪緵瀵瑰簲鐨?setter 鍜?getter 鏂规硶銆?
鍥犱负鏈郴缁熷凡缁忔彁渚涗簡 Book Model 绫伙紝骞朵笖涓轰簡鏇村ソ鐨勬ā鎷?Rails 涓?ActiveController锛圕ontroller锛夌洿鎺ヨ闂?ActiveRecord锛圡odel锛夌殑鏂瑰紡锛屾湰绯荤粺閲囩敤浜?ModelDriven 鐨勫紑鍙戞柟寮忥紝涓嬮潰鏄湰绯荤粺涓敮鎸?REST 鐨?Action 绫荤殑浠g爜銆?
|
聽
涓婇潰 Action 浠g爜涓矖浣撳瓧浠g爜瀹氫箟浜?7 涓柟娉曪紝杩?7 涓柟娉曟鏄墠闈㈡彁鍒扮殑鏍囧噯鏂规硶銆傞櫎姝や箣澶栵紝璇?Action 閲岃繕鍖呭惈涓€涓澶栫殑 deleteConfirm() 鏂规硶锛岃繖涓柟娉曠敤浜庡鐞嗗甫 id 鍙傛暟銆佷笖鎸囧畾鎿嶄綔 deleteConfirm 璧勬簮鐨?GET 璇锋眰銆備篃灏辨槸璇达紝褰撶敤鎴疯姹?/book/1/deleteConfirm 鏃讹紝璇ヨ姹傚皢鐢辫鏂规硶璐熻矗澶勭悊銆傚疄闄呬笂锛孯estActionMapper 涓嶄粎鍙互灏嗗 /book/1/edit 鐨勮姹傛槧灏勫埌 Book 鎺у埗鍣ㄧ殑 edit() 鏂规硶锛岃€?1 灏嗕綔涓?id 璇锋眰鍙傛暟銆傚疄闄呬笂锛屽畠鍙互灏嗕换鎰?/book/1/xxx 鐨勮姹傛槧灏勫埌 Book 鎺у埗鍣ㄧ殑 xxx() 鏂规硶锛岃€?1 鏄姹傚弬鏁般€備笂闈?Action 绫讳娇鐢ㄤ簡 @Results 杩涜淇グ锛岃繖琛ㄦ槑褰?Action 鐨勪换浣曟柟娉曡繑鍥炩€渟uccess鈥濋€昏緫瑙嗗浘鏃讹紝绯荤粺灏嗛噸瀹氬悜鍒?book.action銆?
鍙兘鏈夎鑰呬細瀵?index()銆乧reate()銆乻how() 涓変釜鏂规硶鐨勮繑鍥炲€兼劅鍒扮枒鎯戯細瀹冧滑涓嶅啀鐩存帴杩斿洖鏅€氬瓧绗︿覆浣滀负閫昏緫瑙嗗浘鍚嶅瓧锛岃€屾槸杩斿洖涓€涓互瀛楃涓蹭负鍙傛暟鐨?DefaultHttpHeaders 瀵硅薄锛熷叾瀹炶鑰呬笉蹇呭 DefaultHttpHeaders 鎰熷埌鐤戞儜锛屽叾瀹?DefaultHttpHeaders 鍙槸鏅€氬瓧绗︿覆鐨勫姞寮哄舰寮忥紝鐢ㄤ簬 REST 瀵瑰鐞嗙粨鏋滆繘琛屾洿澶氶澶栫殑鎺у埗銆傚綋 Action 绫荤殑澶勭悊鏂规硶杩斿洖瀛楃涓蹭綔涓洪€昏緫瑙嗗浘鏃讹紝Struts 2 鍙兘灏嗗叾褰撴垚涓€涓畝鍗曠殑瑙嗗浘鍚嶏紝浠呰兘鏍规嵁璇ヨ鍥惧悕鏄犲皠鍒板疄闄呰鍥捐祫婧愶紝浠呮鑰屽凡銆傚鏋滀娇鐢?DefaultHttpHeaders 浣滀负閫昏緫瑙嗗浘锛孌efaultHttpHeaders 闄や簡鍙互鍖呭惈鏅€氬瓧绗︿覆浣滀负閫昏緫瑙嗗浘鍚嶄箣澶栵紝杩樺彲浠ラ澶栧鍔犳洿澶氱殑鎺у埗鏁版嵁锛屼粠鑰屽彲浠ュ寮哄 Response 鐨勬帶鍒躲€傚叧浜?HttpHeaders 鍜?DefaultHttpHeaders 鐨勪粙缁嶈鍙傝€?REST 鎻掍欢鐨?API銆?
杩樻湁涓€鐐归渶瑕佹寚鍑猴紝涓婇潰鐨?BookController 鎺у埗鍣ㄥ疄鐜扮被鐨勭被鍚嶅苟涓嶄互 Action 缁撳熬锛岃€屾槸浠?Controller 缁撳熬锛屽洜姝ゆ垜浠彲浠ュ湪 struts.xml 鏂囦欢涓厤缃涓嬪父閲忥細
|
聽
鍥為〉棣?
瀹炵幇瑙嗗浘灞?
瀹氫箟浜嗕笂闈?Action 涔嬪悗锛屾帴涓嬫潵搴旇涓鸿繖浜?Action 鎻愪緵瑙嗗浘椤甸潰浜嗭紝鏍规嵁 Convention 鎻掍欢鐨勭害瀹氾紝鎵€鏈夎鍥鹃〉闈㈤兘搴旇鏀惧湪 WEB-INF/content 鐩綍涓嬶紝渚嬪褰撶敤鎴峰悜 /book.action 鍙戦€佽姹傛椂锛岃璇锋眰灏嗙敱 BookController 鐨?index() 鏂规硶杩涜澶勭悊锛岃鏂规硶澶勭悊缁撴潫鍚庤繑鍥炩€渋ndex鈥濆瓧绗︿覆锛屼篃灏辨槸灏嗕細浣跨敤 WEIN-INF/content/book-index.jsp 椤甸潰浣滀负瑙嗗浘璧勬簮銆備笅闈㈡槸 book-index.jsp 椤甸潰鐨勪唬鐮侊細
|
聽
涓婇潰 JSP 椤甸潰闈炲父绠€鍗曪紝瀹冭礋璐h凯浠h緭鍑?Action 閲屽寘鍚殑闆嗗悎鏁版嵁锛屽悜璇ュ簲鐢?book.action 鍙戦€佽姹傚皢鐪嬪埌濡傚浘 1 鎵€绀洪〉闈€?
鍥?1 浣跨敤 Struts 2 寮€鍙戠殑 REST 鏈嶅姟
Struts 2 鐨?REST 鎻掍欢鏀寔涓€绉嶈祫婧愬叿鏈夊灏戣〃绀哄舰寮忥紝褰撴祻瑙堣€呭悜 book.xml 鍙戦€佽姹傚皢鍙互鐪嬪埌濡傚浘 2 鎵€绀洪〉闈€?
鍥?2 REST 鏈嶅姟鐨?XML 褰㈠紡
浠庡浘 2 鍙互鐪嬪嚭锛岃椤甸潰姝f槸 Action 鎵€鍖呭惈鐨勫叏閮ㄦ暟鎹紝褰撲娇鐢?XML 鏄剧ず鏃?REST 鎻掍欢灏嗕細璐熻矗鎶婅繖浜涙暟鎹浆鎹㈡垚 XML 鏂囨。銆?
闄ゆ涔嬪锛孯EST 鎻掍欢杩樻彁渚涗簡 JSON 鏍煎紡鐨勬樉绀烘柟寮忥紝褰撳紑鍙戣€呭悜 book.json 鍙戦€佽姹傚皢鐪嬪埌濡傚浘 3 鎵€绀洪〉闈€?
鍥?3 REST 鏈嶅姟鐨?JSON 褰㈠紡
Struts 2 鐨?REST 鎻掍欢榛樿鏀寔 XHTML銆乆ML 鍜?JSON 涓夌褰㈠紡鐨勬暟鎹€?
褰撴祻瑙堣€呭崟鍑婚〉闈㈠彸杈圭殑鈥滅紪杈戔€濋摼鎺ワ紝灏嗕細鍚?book/idVal/edit 鍙戦€佽姹傦紝杩欐槸涓€涓寘鍚?ID 璇锋眰鍙傛暟銆佷笖鎸囧畾鎿嶄綔 edit 璧勬簮鐨勮姹傦紝鍥犳灏嗙敱 BookController 鐨?edit() 鏂规硶璐熻矗澶勭悊锛屽鐞嗙粨鏉熷悗杩涘叆 book-edit.jsp 椤甸潰銆傛祻瑙堝櫒閲屽皢鐪嬪埌濡傚浘 4 鎵€绀洪〉闈€?
鍥?4 缂栬緫鎸囧畾鍥句功
璇ラ〉闈㈠崟鍑烩€滀慨鏀光€濇寜閽椂闇€瑕佷慨鏀瑰浘涔︿俊鎭紝涔熷氨鏄渶瑕佷娇鐢?PUT 鎿嶄綔锛屼絾鐢变簬 HTML 涓嶆敮鎸?PUT 鎿嶄綔锛屽洜姝ら渶瑕佷负璇ヨ〃鍗曢〉澧炲姞涓€涓澶栫殑璇锋眰鍙傛暟锛歘method锛岃璇锋眰鍙傛暟鐨勫€间负 put銆傝琛ㄥ崟椤电殑浠g爜濡備笅锛?
|
聽
璇ヨ〃鍗曞皢鎻愪氦缁?BookController 鐨?update() 鏂规硶澶勭悊锛寀pdate() 鏂规硶灏嗚礋璐d慨鏀圭郴缁熼噷鎸囧畾 ID 瀵瑰簲鐨勫浘涔︿俊鎭€?
涓庝箣绫讳技鐨勬槸锛屽綋璇锋眰闇€瑕佹墽琛?DELETE 鎿嶄綔鏃讹紝涓€鏍烽渶瑕佸鍔犲悕涓?_method 鐨勮姹傚弬鏁帮紝骞跺皢璇ヨ姹傚弬鏁板€艰缃负 delete銆?
聽
鍙傝€冭祫鏂?
- 鈥滅紪鍐?REST 鏈嶅姟 鈥濓紙developerWorks锛?007 骞?11 鏈堬級锛氭湰鏁欑▼璁ㄨ浜?REST 鍜?Atom 鍙戝竷鍗忚锛圓tom Publishing Protocol锛孉PP锛夌殑姒傚康锛屽苟灞曠ず濡備綍鍦ㄦ湇鍔′腑杩涜搴旂敤銆?
- 鈥滄瀯寤?RESTful Web 鏈嶅姟 鈥濓紙developerWorks锛?008 骞?8 鏈堬級锛氭湰鏁欑▼浠?REST 鐨勫熀鏈蹇靛紑濮嬶紝閫愭鎸囧鎮ㄤ娇鐢?Restlet 妗嗘灦鏋勫缓搴旂敤绋嬪簭銆?
- 鈥滃熀浜?REST 鐨?Web 鏈嶅姟锛氬熀纭€ 鈥濓紙developerWorks锛?008 骞?12 鏈堬級锛?鍦ㄦ湰鏂囦腑锛孉lex Rodriguez 灏嗗悜鎮ㄤ粙缁?REST 鐨勫熀鏈師鐞嗐€?
- 鈥滆繘涓€姝ユ彁鍗?Struts 2 瀵?Velocity 鐨勬敮鎸佸姏搴?鈥濓紙developerWorks锛?007 骞?7 鏈堬級锛氭湰鏂囦富瑕佷粙缁嶅浣曡В鍐?Struts 2 鍜屾渶鏂扮増鏈殑 Velocity 缁撳悎鐨勯棶棰樹互鍙婅繘涓€姝ユ彁鍗?Struts 2 瀵?Velocity 鐨勬敮鎸佸姏搴︺€?
- 鈥滃熀浜?Struts 2 鏋勫缓 WebSphere Portal 涓婄殑 Portlet 搴旂敤 鈥?锛坉eveloperWorks锛?008 骞?2 鏈堬級锛氭湰鏂囩殑鐩殑灏辨槸閫氳繃鍦?IBM 鐨?WebSphere Portal Server 涓婂紑鍙戝拰閮ㄧ讲涓€涓熀浜?Struts 2 鐨?Porlet 搴旂敤锛屽悜璇昏€呬粙缁嶅埄鐢?Struts 2 杩涜 Portlet 搴旂敤寮€鍙戠殑浼樺娍鍜屽叧閿祦绋嬨€?
- 鈥滃熀浜?Struts 2 鎷︽埅鍣ㄥ疄鐜扮粏绮掑害鐨勫熀浜庤鑹茬殑瀛樺彇鎺у埗 鈥濓紙developerWorks锛?008 骞?9 鏈堬級锛氭湰鏂囦粙缁嶅浣曞埄鐢?Struts 2 鎷︽埅鍣ㄦ潵涓?Java Web 搴旂敤娣诲姞搴旂敤绠$悊鐨勫熀浜庤鑹茬殑瀛樺彇鎺у埗鐨勮璁″拰瀹炵幇鏂规硶銆?
- 鍙傝€冩湰鏂囦綔鑰呮潕鍒氱紪钁楃殑鍥句功锛氥€?Struts 2.1 鏉冨▉鎸囧崡鈥斺€斿熀浜?WebWork 鏍稿績鐨?MVC 寮€鍙戙€?銆?
- 鍙傝€冿細Struts 2 瀹樻柟绔欑偣 銆?
- 闃呰鎶€鏈枃绔狅細Go Light with Apache Struts 2 and REST 銆?
- Java 鎶€鏈笓鍖?锛氬鎵?Java 缂栫▼鍚勬柟闈㈢殑鎶€鏈枃绔犮€?
鍏充簬浣滆€?
鏉?鍒氾紝浠庝簨 Java EE 搴旂敤寮€鍙戣繎 10 骞淬€傛浘浠?LITEON 鍏徃鐨?J2EE 鎶€鏈富绠★紝璐熻矗璇ュ叕鍙哥殑浼佷笟淇℃伅鍖栧钩鍙扮殑鏋舵瀯璁捐銆傛浘浠诲箍宸炵數淇°€佸箍涓滈緳娉夌鎶€绛夊叕鍙哥殑鎶€鏈煿璁暀甯堛€?鐤媯 Java 鑱旂洘锛坔ttp://www.crazyit.org锛夌珯闀裤€傜柉鐙?Java 瀹炶钀ュ垱濮嬩汉锛岀柉鐙?Java 浣撶郴鍥句功浣滆€咃紝鏇句换涓滄柟鏍囧噯骞垮窞涓績杞欢鏁欏鎬荤洃锛屾浘鍏间换骞夸笢鎶€鏈笀鑼冨闄㈣绠楁満绉戝绯荤殑鍏艰亴鍓暀鎺堛€傚浗鍐呯煡鍚岻T鎶€鏈綔瀹讹紝宸插嚭鐗堛€婄柉鐙?Java 璁蹭箟銆嬨€併€婅交閲忕骇 Java EE 浼佷笟搴旂敤瀹炴垬銆嬨€併€婄柉鐙?Ajax 璁蹭箟銆嬨€併€奡truts 2.1 鏉冨▉鎸囧崡銆嬨€併€奟uby On Rails 鏁忔嵎寮€鍙戞渶浣冲疄璺点€嬬瓑钁椾綔銆?
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽
聽