锘??xml version="1.0" encoding="utf-8" standalone="yes"?> <result name="success" type="freemarker">foo.ftl</result> (6)銆丣asperReports:灝咥ction鎵ц鐨勭粨鏋滈氳繃JasperReports鎶ヨ〃褰㈠紡杈撳嚭錛屽彲浠ユ寚瀹欽asperReports鏀寔鐨勮緭鍑烘牸寮?PDF,HTML,XLS,CVS,XML絳?錛岄粯璁ょ殑鏄疨DF鏍煎紡銆?br />
location 鏄?/span> 鎵ц瀹屾垚涔嬪悗杞悜鐨勪綅緗?/span> parse 鍚?/span> 榛樿鐨勬槸“true”錛屽鏋滆緗負(fù)“false”錛宭ocation鍙傛暟灝嗕笉浼?xì)琚玂GNL琛ㄨ揪寮忚璦瑙f瀽 dataSource 鏄?/span> 瀹冩槸Action鐨勪竴涓瓧孌碉紙閫氬父鏄竴涓狶ist錛夛紝OGNL琛ㄨ揪寮忚鐢ㄦ潵鍘籿alue stack錛圤gnlValueStack錛夐噸鏂版壘鍥炶繖涓猟ataSource format 鍚?/span> 鎶ヨ〃鐢熸垚鐨勬暟鎹牸寮忥紝榛樿鐨勬槸pdf
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
xwork.xml鏂囦歡鐨勬爣絳懼厓绱?br />
1銆亁work:xwork閰嶇疆鏂囦歡鐨勫唴瀹癸紝閮芥槸瀹氫箟鍦?lt;xwork>鏍囩涓紝瀹冪殑鐩存帴瀛愭爣絳炬湁<package>鍜?lt;include>
2銆丳ackage:鎴戜滑鐨凙ction,Interceptor,Result-type閮芥槸鍦ㄦ鏍囩涓畾涔夛紝<package>鏍囩鏈変釜蹇呴渶鐨勫睘鎬?name",瀹冪敤鏉ユ爣璇嗗敮涓鐨勪竴涓猵ackage.灞炴?extends"鏄彲閫夌殑錛屽畠鐢ㄦ潵緇ф壙鍓嶉潰瀹氫箟鐨勪竴涓垨涓涓互涓奝ackage閰嶇疆淇℃伅銆?br />
3銆丷esult-type:鐢ㄦ潵瀹氫箟杈撳嚭緇撴灉綾誨瀷鐨凜lass:<result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true"/>,default="true"琛ㄧず濡傛灉鍦ˋction鐨剅esult涓笉鎸囧畾result-type,灝變嬌鐢ㄨ繖涓粯璁ょ殑result-type.
4銆両nterceptors:瀹冩槸涓涓畝鍗曠殑<interceptors></interceptors>鏍囩錛屾垜浠殑interceptor鍜宨nterceptor-stack閮藉湪榪欓噷瀹氫箟銆?br />
5銆両nterceptor:鐢ㄦ潵瀹氫箟鎴戜滑鐨勬嫤鎴櫒錛?br />
<interceptor name="timer" class="com.opensymphony.xwork.interceptor.TimerInterceptor"/>,鍦ˋction涓紝鍙互閫氳繃<interceptor-ref/>鏉ョ洿鎺ュ紩鐢ㄥ墠闈㈠畾涔夌殑鎷︽埅鍣ㄣ?br />
6銆両nterceptor-satack:鐢ㄦ潵灝嗕笂闈㈠畾涔夌殑Interceptor緇勭粐鎴愬爢鏍堢殑褰㈠紡錛岃繖鏍鋒垜浠氨鍙互鍒涘緩涓緇勬爣鍑嗙殑interceptor,璁╀粬鎸夌収欏哄簭鎵ц錛屽湪鎴戜滑鐨刟ction涓洿鎺ュ紩鐢ㄨ繖涓猧nterceptor鍫嗘爤灝卞彲浠ヤ簡(jiǎn)銆?br />
<interceptor-stack name="validationWorkflowStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
7銆丟lobal-results:瀹冨厑璁告垜浠畾涔夊叏灞鐨勮緭鍑虹粨鏋?global result)銆?br />
<global-results>
<result name="login" type="dispacher">
<param name="location">/login.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/error.jsp</param>
</result>
</global-results>
]]>
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>
2銆佸紑鍚疉ction鐨勯獙璇佸姛鑳斤細(xì)
鍦▁work.xml涓姞鍏?lt;interceptor class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
3銆佸疄鐜版垜浠殑楠岃瘉鏂囦歡(涔熷氨鏄鍒?錛?br />
鎴戜滑鐨勯獙璇佹枃浠跺繀闇浠ctionName-validation.xml鏍煎紡鍛藉悕錛屼粬蹇呴渶琚斁緗埌涓庤繖涓狝ction鐩稿悓鐨勫寘涓?br />
鏍煎紡錛?br />
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<field name="count">
<field-validator type="required">
<message>You must enter a value for count.</message>
</field-validator>
<field-validator type="int">
<param name="min">0</param>
<param name="max">5</param>
<message>
count must be between ${min} and ${max}, current value is ${count}.
</message>
</field-validator>
</field>
</validators>
(1)銆?lt;field>鏍囩浠h〃涓涓瓧孌碉紝灞炴?name"鍜岄〉闈㈣緭鍏ユ鐨?name"灞炴у繀闇瀹屽叏涓鑷淬?br />
(2)銆?lt;field-validator>鏍囩瀹氫箟鎴戜滑鐨勯獙璇佽鍒欙紝type灞炴х殑鍊煎氨鏄垜浠墠闈㈠畾涔夌殑楠岃瘉綾誨瀷銆?br />
(3)銆侀獙璇佹枃浠朵腑錛屽瓧孌墊暟鎹槸閫氳繃琛ㄨ揪寮忚璦浠庢垜浠殑鍊煎爢鏍堜腑鍙栧緱錛屼竴鑸槸Action瀵硅薄銆?br />
(4)銆佷笉綆¢獙璇佹槸鍚﹂氳繃錛屾垜浠殑Action閮戒細(xì)鎵ц錛屼絾鏄鏋滈獙璇佹病鏈夐氳繃錛屼粬涓嶄細(xì)璋冪敤Action鐨別xecute()鏂規(guī)硶銆?/span>
4銆侀獙璇丄ction鐨勫啓娉曪細(xì)
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.ValidationAware;
public class SimpleAction extends ActionSupport implements ValidationAware {
private int count;
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public String execute(){
//鍦ㄨ繖閲岃皟鐢ㄧ敤鎴鋒敞鍐岀殑涓氬姟閫昏緫錛屾瘮濡傦細(xì)灝嗘敞鍐屼俊鎭瓨鍌ㄥ埌鏁版嵁搴?br />
return SUCCESS;
}
}
5銆亁work.xml涓渶瑕佹敞鎰忕殑鍦版柟錛?br />
<action name="validation" class="com.wyq.login.action.SimpleAction">
<result name="success" type="dispatcher">
<param name="location">/login/simple_result.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/login/simple.jsp</param>
</result>
榪欓噷鏄渶閲嶈鐨勶紝涓嶇鍚堟潯浠剁殑閮戒粠涓嬮潰杈撳嚭錛岃繖閲屼篃鏄繀闇澹版槑鐨?br />
<!-- If you don't override execute(), you must do this: -->
<result name="input" type="dispatcher">
<param name="location">/login/simple.jsp</param>
</result>
<interceptor-ref name="validator" />
<interceptor-ref name="debugStack" />
<interceptor-ref name="defaultStack" />
</action>
]]>
<result name="success" type="dispatcher">
<param name="location">register-result.jsp</param>
</result>
<interceptor-ref name="params"/>
</action>
result鏍囩閲岄潰鐨?name"鍊艱〃紺篴ction鏍規(guī)嵁鍚嶅瓧榪涜瑙嗗浘杈撳嚭銆?br />
type鍐沖畾閲囩敤閭d竴縐嶈鍥炬妧鏈紝灝嗘墽琛岀粨鏋滃睍鐜扮粰鐢ㄦ埛錛屼笅闈㈡槸Type鐨勭被鍨嬶細(xì)
(1)銆乨ispatcher:閫氳繃javax.servlet.RequestDispatcher鐨刦orward()鎴杋nclude()鏂規(guī)硶璋冨害鍒伴〉闈㈠睍鐜幫紝榪欐牱鐨勯〉闈竴鑸槸Jsp欏甸潰銆俵ocation鏄繀闇鐨勫弬鏁幫紝琛ㄧず鎵ц瀹屾垚涔嬪悗杞悜鐨勪綅緗?br />
(2)銆乺edirect:灝嗗搷搴旈噸鏂板畾鍚戝埌嫻忚鍣ㄦ寚瀹氱殑浣嶇疆錛屽畠?yōu)畣浼?xì)瀵艱嚧Action鎵ц瀹屾垚鐨勬暟鎹涪澶辨垨涓嶅啀鍙敤錛屽皢鍝嶅簲瀹氬悜鍒板弬鏁發(fā)ocation鎸囧畾鐨勶紝鏂扮殑url涓紝location鏄繀闇鐨勶紝鎵ц瀹屾垚涔嬪悗杞悜鐨勪綅緗?br />
(3)銆乧haining:灝咥ction鎵ц瀹屾垚涔嬪悗榪炴帴鍒板彟涓涓狝ction涓戶緇墽琛岋紝鏂扮殑Action浣跨敤涓婁竴涓狝ction鐨勪笂涓嬫枃錛宎ctionName鏄繀闇鐨勶紝灝嗚琚繛鎺ョ殑Action鍚嶅瓧銆?br />
(4)銆乿elocity:瀹冪被浼糐sp鐨勬墽琛岀幆澧?浣跨敤JavaServlet瀹瑰櫒)錛屽皢Velocity妯℃澘杞寲鎴愭暟鎹祦鐨勫艦寮忥紝鐩存帴閫氳繃JavaServlet杈撳嚭錛宭ocation鏄繀闇鐨勬墽琛屽畬鎴愪箣鍚庤漿鍚戠殑浣嶇疆(涓鑸槸.vm欏甸潰).
<result name="success" type="velocity">
<param name="location">foo.vm</param>
</result>
(5)銆丗reeMarker:鏄竴涓函Java妯℃澘寮曟搸錛屼竴涓櫘閫氱殑鍩轟簬妯℃澘鐢熸垚鏂囨湰鐨勫伐鍏楓俵ocation鏄繀闇鐨勶紝鎵ц瀹屾垚涔嬪悗杞悜鐨勪綅緗?/span>
<result name="success" type="jasper">
<param name="location">foo.jasper</param>
<param name="dataSource">mySource</param>
<param name="format">CSV</param>
</result>
(1)銆乮mer錛氳褰旳ction鎵ц鐨勬椂闂達(dá)紝騫跺仛涓烘棩蹇椾俊鎭緭鍑猴紱
(2)銆乴ogger錛氬湪鏃ュ織淇℃伅涓緭鍑?guó)櫐佹墽琛岀殑Action淇℃伅錛?/p>
(3)銆乧hain錛氬皢鍓嶄竴涓墽琛岀粨鏉熺殑Action灞炴ц緗埌褰撳墠鐨凙ction涓傚畠琚敤鍦≧esultType涓?#8220;chain”鎸囧畾緇撴灉鐨凙ction涓紝璇ョ粨鏋淎ction瀵硅薄浼?xì)浠嶰gnlValueStack涓幏寰楀墠涓涓狝ction瀵瑰簲鐨勫睘鎬э紝瀹冨疄鐜癆ction閾句箣闂寸殑鏁版嵁浼犻掞紱
(4)銆乻tatic-params錛氬皢xwork.xml閰嶇疆鏂囦歡閲屽畾涔夌殑Action鍙傛暟錛岃緗埌瀵瑰簲鐨凙ction涓侫ction鍙傛暟浣跨敤<param />鏍囩錛屾槸<action />鏍囩鐨勭洿鎺ュ瓙鍏冪礌銆傛垜浠繖閲屽畾涔夌殑Action綾誨繀闇瀹炵幇com.opensymphony.xwork.config.entities. Parameterizable鎺ュ彛錛?/p>
(5)銆乸arams錛氬皢Request璇鋒眰鐨勫弬鏁拌緗埌鐩稿簲Action瀵硅薄鐨勫睘鎬т腑錛岀敤鎴鋒敞鍐屼緥瀛愮敤鍒拌繃榪欎釜鎷︽埅鍣紱
(6)銆乵odel-driven錛氬鏋淎ction瀹炵幇ModelDriven鎺ュ彛錛屽畠?yōu)畣getModel()鍙栧緱鐨勬ā鍨嬪璞″瓨鍏gnlValueStack涓紱
(7)銆乧omponent錛氭縺媧葷粍浠跺姛鑳芥敮鎸侊紝璁╂敞鍐岃繃鐨勭粍浠跺湪褰撳墠Action涓彲鐢紝鍗充負(fù)Action鎻愪緵IoC錛堜緷璧栧掕漿鎺у埗錛夋鏋剁殑鏀寔錛?/p>
(8)銆乼oken錛氭牳瀵瑰綋鍓岮ction璇鋒眰錛坮equest錛夌殑鏈夋晥鏍囪瘑錛岄槻姝㈤噸澶嶆彁浜ction璇鋒眰(request)銆?/p>
(9)銆乼oken-session錛氬姛鑳藉悓涓婏紝浣嗘槸褰撴彁浜ゆ棤鏁堢殑Action璇鋒眰鏍囪瘑鏃訛紝瀹冧細(xì)灝嗚姹傛暟鎹繚瀛樺埌session涓?/p>
(10)銆乿alidation錛氬疄鐜頒嬌鐢▁ml閰嶇疆鏂囦歡錛坽Action}-validation.xml錛夊Action灞炴у艱繘琛岄獙璇侊紝璇︾粏璇風(fēng)湅鍚庨潰浠嬬粛鐨勯獙璇佹鏋躲?/p>
(11)銆亀orkflow錛氳皟鐢ˋction綾葷殑楠岃瘉鍔熻兘錛屽亣璁続ction浣跨敤ValidationAware瀹炵幇楠岃瘉錛圓ctionSupport鎻愪緵姝ゅ姛鑳斤級(jí)錛屽鏋滈獙璇佹病鏈夐氳繃錛寃orkflow浼?xì)灏嗚h眰榪斿洖鍒癷nput瑙嗗浘錛圓ction鐨?lt;result />涓畾涔夌殑錛夈?/p>
(12)銆乻ervlet-config錛氭彁渚汚ction鐩存帴瀵笻ttpServletRequest鎴朒ttpServletResponse絳塉avaServlet api鐨勮闂紝Action瑕佸疄鐜扮浉搴旂殑鎺ュ彛錛屼緥濡傦細(xì)ServletRequestAware鎴朣ervletResponseAware絳夈傚鏋滃繀闇瑕佹彁渚涘JavaServlet api鐨勮闂紝鎴戜滑寤鴻浣跨敤ServletActionContext錛屽湪鍓嶉潰ActionContext绔犺妭涓湁浠嬬粛銆?/p>
(13)銆乸repare錛氬湪Action鎵ц涔嬪墠璋冪敤Action鐨刾repare()鏂規(guī)硶錛岃繖涓柟娉曟槸鐢ㄦ潵鍑嗗Action鎵ц涔嬪墠瑕佸仛鐨勫伐浣溿傚畠瑕佹眰鎴戜滑鐨凙ction蹇呴渶瀹炵幇com.opensymphony.xwork. Preparable鎺ュ彛
(14)銆乧onversionError錛氱敤鏉ュ鐞嗘鏋惰繘琛岀被鍨嬭漿鍖?Type Conversion)鏃剁殑鍑洪敊淇℃伅銆傚畠?yōu)畣瀛樺偍鍦ˋctionContext涓殑綾誨瀷杞寲錛圱ype Conversion錛夐敊璇俊鎭漿鍖栨垚鐩稿簲鐨凙ction瀛楁鐨勯敊璇俊鎭紝淇濆瓨鍦ㄥ爢鏍堜腑銆傛牴鎹渶瑕侊紝鍙互灝嗚繖浜涢敊璇俊鎭湪瑙嗗浘涓樉紺哄嚭鏉ャ?br />
public String intercept(ActionInvocation invocation) throws Exception {
String result = null;
before(invocation);
result = invocation.invoke();
after(invocation, result);
return result;
}
1銆?nbsp; javax.servlet.http.HttpServletRequest錛欻TTPservlet璇鋒眰瀵硅薄
2銆?nbsp; javax.servlet.http.HttpServletResponse;錛欻TTPservlet鐩稿簲瀵硅薄
3銆?nbsp; javax.servlet.ServletContext錛歋ervlet 涓婁笅鏂囦俊鎭?/p>
4銆?nbsp; javax.servlet.ServletConfig錛歋ervlet閰嶇疆瀵硅薄
5銆?nbsp; javax.servlet.jsp.PageContext錛欻ttp欏甸潰涓婁笅鏂?br />
1銆?鍙栧緱HttpServletRequest瀵硅薄錛?/p>
HttpServletRequest request = ServletActionContext. getRequest();
2銆?鍙栧緱HttpSession瀵硅薄錛?/p>
HttpSession session = ServletActionContext. getRequest().getSession();
<action name="register" class="example.register.RegisterAction" >
<result name="success" type="dispatcher">
<param name="location">/register-result.jsp</param>
</result>
<interceptor-ref name="params"/>
</action>
<interceptor-refname="params"/>,interceptor-ref鏍囩璁劇疆榪欎釜Action鐢ㄥ埌鐨勬嫤鎴櫒錛?params"寮曠敤鐨勬槸閰嶇疆鏂囦歡涓殑<interceptor name="params" class="com.opensymphony.xworkinterceptor.ParametersInterceptor"/>榪欎釜鎷︽埅鍣ㄥ皢鍦ˋction璋冪敤execute()鏂規(guī)硶鎵ц涔嬪墠璋冪敤錛屼綔鐢ㄦ槸灝唕equest璇鋒眰鐨勫弬鏁伴氳繃琛ㄨ揪寮忚璦璁劇疆鍒扮浉搴擜ction鐨勬ā鍨嬮噷銆?br />
Action鏍規(guī)嵁FormBean鐨勪笉鍚屽彲浠ュ垎涓轟簩綾伙細(xì)
涓綾繪槸Field-Driven(瀛楁椹卞姩鐨?Action
Action灝嗙洿鎺ョ敤鑷繁鐨勫瓧孌墊潵鍏呭綋FormBean鐨勫姛鑳斤紝鍙互鐩存帴鐢ㄥ煙瀵硅薄浣滀負(fù)Action鐨勫瓧孌點(diǎn)?br />
浜岀被鏄疢odel-Driven(妯″瀷椹卞姩鐨?Action
浠栧緢鎯砈truts鐨凢ormBean,浣嗗湪webwork涓紝鍙閫氳繃Java瀵硅薄灝卞彲浠ュ厖褰撴ā鍨嬮儴鍒嗐侻odel-Driven(妯″瀷椹卞姩鐨?Action瑕佹眰鎴戜滑鐨凙ction瀹炵幇com.opensymphony.xwork.ModelDriven鎺ュ彛錛屽畠鏈変竴涓柟娉曪細(xì)Object getModel();鎴戜滑鐢ㄨ繖涓柟娉曡繑鍥炴垜浠殑妯″瀷瀵硅薄銆?br />
閲囩敤妯″瀷瀵硅薄姣旇緝閲嶈鐨勪竴鐐規(guī)槸鍦ˋction鐨勯厤緗枃浠禭work.xml涓閰嶇疆妯″瀷鎷︽埅鍣╩odel-driven,浠栫殑浣滅敤鏄皢妯″瀷瀵硅薄淇濆瓨鍒板煎爢鏍堜腑銆?br />
<action name="registerModel" class="example.register.RegisterActionModel">
<result name="success" type="dispatcher">
<param name="location">/register-result-model.jsp</param>
</result>
<interceptor-ref name="model-driven"/>
<interceptor-ref name="params"/>
</action>
<servlet-name>webwork</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>