锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍦╳eb.xml鏂囦歡閲岄厤緗竴涓淳閬e櫒ServletDispatcher錛屼互鎺ユ敹鎵鏈変互action緇撳熬鐨剈rl璇鋒眰銆傚茍榪涜http璇鋒眰璋冨害澶勭悊.
<servlet>
<servlet-name></servlet-name>
<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
褰揝ervletDispatche璋冨害鍣ㄦ帴鏀跺埌涓涓?action緇撳熬鐨勮姹傛椂錛屼細璋冪敤ServletDispatche綾葷殑service鏂規(guī)硶榪涜澶勭悊,璇ユ柟娉曟渶緇堟槸鍒涘緩涓涓狝ctionProxy瀵硅薄錛屽茍閫氳繃鎵цActionProxy涓殑execute鏂規(guī)硶鏉?BR>璋冪敤鎵璇鋒眰鐨凙ction鐨別xecute鏂規(guī)硶.涔嬪墠瑕佹墽琛屼竴浜涙柟娉曟潵鍒涢犳潯浠訛細鍒涘緩Action涓婁笅鏂?==>浠巖equest涓幏寰楀煎爢鏍坰tack===>鍒涘緩ActionProxyFactory瀵硅薄錛屽茍鍒濆鍖栦竴涓狣efaultActionProxy瀵硅薄====>閫氳繃DefaultAction鐨勬瀯閫犲嚱鏁拌皟鐢–onfigurationManager鑾峰緱褰撳墠璇鋒眰鐨凙ction鍦▁work.xml涓殑閰嶇疆淇℃伅====>DefaultActionProxy涓殑prepare鏂規(guī)硶閫氳繃鍒涘緩涓涓狝ctionInvocation瀵硅薄鏉ュ疄鐜板璇鋒眰action鐨勮皟鐢ㄣ?BR>
AroundInterceptor鎷︽埅鏈?->
DefaultActionInvocation涓湁涓涓暟緇勭淮鎶や簡鎷︽埅鏈虹殑鎵ц欏哄簭錛?BR>1銆丼taticParametersInterceptor, 2銆丳arametersInterceptor, 3銆乄ebWorkConversionErrorInterceptor
4銆丮odelDrivenInterceptor 5銆丒xternalReferencesInterceptor
6銆丼taticParametersInterceptor 7銆乸arametersInterceptor, 8銆乄ebWorkConversionErrorInterceptor
9銆丮odelDrivenInterceptor 10銆乂alidationInterceptor
娉細榪欓噷1銆?銆?銆?鎷︽埅鏈烘墽琛屼簡涓ゆ錛屼負浠涔堜細鎵ц涓ゆ鍛?
鐤戦棶錛氳繖閲岀殑鎵ц欏哄簭鍜寃ebwork-default.xml涓殑<interceptors>閰嶇疆鏈変綍鍏寵仈?
Action ---> 鏍規(guī)嵁Action瀹炵幇鐩稿簲鐨凙ction,ModelDriven鎺ュ彛璋冪敤鍩虹被鐨?BR>ParametersInterceptor涓細
final Map parameters = ActionContext.getContext().getParameters();
浠嶢roundInterceptor鐨刢ontext涓彇鍑洪〉闈㈡彁浜ゅ瓧孌電殑鍚嶇О鍜屽?鐒跺悗瀹冧細鍏堟妸stack.pus(modelDriven.getModel()); modelDriven.getModel()鏀懼埌CompoundRoot涓?CompounRoot鏄竴涓狝rrayList)涓婇潰鎻愬埌鏈夊洓涓嫤鎴満鎵ц涓ゆ錛屽洜涓虹涓嬈¤push榪涘幓涓涓┖鐨勫璞★紝鏂逛究濉鹼紝絎簩嬈℃斁鐨勬槸濉厖濂界殑瀵硅薄銆備篃灝辨槸Action涓璯etModel()鐨勫璞°傛妸鍊間粠parameters 璁劇疆鍒癘gnlValueStack鐨凜ompoundRoot鐨勭涓涓笅鏍囦腑鐨凙ction閲岀殑getModel()瀵硅薄閲宑ode:stack.setValue(name, value);name瀵瑰簲鐨勬槸getModel()瀵瑰簲鐨勫瓧孌碉紝value涓鴻濉厖鐨勫?