锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Web搴旂敤鐨勫彂甯冩弿榪版枃浠?web搴旂敤鍙戝竷鎻忚堪鏂囦歡鍙互鍦ㄥ簲鐢ㄥ紑鐫鑰?鍙戝竷鑰呭拰緇勮鑰呬箣闂翠紶閫掗厤緗俊鎭?Web瀹瑰櫒鍦ㄥ惎鍔ㄧ殑鏃跺欎粠璇ユ枃浠朵腑璇誨彇閰嶇疆淇℃伅,鏍規嵁瀹冩潵瑁呰澆鍜岄厤緗畐eb搴旂敤.鏂囨。綾誨瀷瀹氫箟DTD瀵筙ML鏂囨。鐨勬牸寮忓仛浜嗗畾涔?DTD鍚ML鏂囨。鍒掑垎涓哄厓绱?灞炴?瀹炰綋姣忎竴縐峏ML鏂囨。閮芥湁鐙嚜鐨凞TD鏂囦歡.鍙互浠庣綉涓婁笅杞?<web-app>鍏冪礌鏄痺eb.xml鐨勬牴鍏冪礌,鍏朵粬鍏冪礌蹇呴』宓屽叆鍦?lt;web-app>鍏冪礌涔嬪唴.瑕佹敞鎰忕殑鏄瓙鍏冪礌涔熸槸鏈夐『搴忕殑姣斿蹇呴』鏄鍏?lt;servlet>,鐒跺悗<servlet-mapping>鏈鍚?lt;taglib>.
涓?span lang="EN-US">Struts搴旂敤閰嶇疆Web.xml鏂囦歡:棣栧厛鏈閲嶈鐨勪竴姝ユ槸閰嶇疆ActionServlet,榪欎釜鐢?lt;servlet>鏍囩鐨剆ervlet-name灞炴ц搗涓涓悕瀛楀彨action,鐒跺悗鐢╯ervlet-class灞炴ф寚瀹欰ctionServlet鐨勭被.鐒跺悗鐢?lt;servlet-mapping>鏍囩鐨剆ervlet-name灞炴ф寚瀹歛ction,鍦ㄧ敤url-pattern鎸囧畾鎺ユ敹鑼冨洿鏄?.do鐨勮姹?涓嶇搴旂敤涓寘鍚簡澶氬皯瀛愬簲鐢?閮藉彧闇瑕侀厤緗竴涓狝ctionServlet,綾繪潵鍑烘潵搴旂敤涓殑涓嶅悓鐨勫姛鑳?鍏跺疄鑰呭氨鏄笉蹇呰鐨?鍥犱負Servlet鏈韓灝辨槸澶氱嚎紼嬬殑,鑰屼笖鐩墠Struts鍙厑璁擱厤緗竴涓狝ctionServlet.澹版槑ActionServlet鐨勫垵濮嬪寲鍙傛暟:<servlet>鐨?lt;init-param>瀛愬厓绱犵敤鏉ラ厤緗甋ervlet鐨勫垵濮嬪寲鍙傛暟.param-name璁劇疆config鍙傛暟鍚?param-value璁劇疆struts-config.xml鐨勮礬寰勫弬鏁板?
閰嶇疆嬈㈣繋浣跨敤娓呭崟:濡傛灉瀹㈡埛璁塊棶Web鐨勬椂鍊欏兼槸璁塊棶浜哤EB搴旂敤鐨勬牴鐩綍URL.娌℃湁鍏蜂綋鐨勬寚瀹氭枃浠?Web浼氳嚜鍔ㄨ皟鐢╓eb鐨勬榪庢枃浠?<welcome-file-list>鍏冪礌鏉ラ厤緗殑.閫氳繃鍏朵腑鐨?lt;welcome-file>嬈㈣繋欏甸潰</welcome-file>鏉ラ厤緗?
閰嶇疆閿欒澶勭悊:灝界Struts妗嗘灦鍔熻兘寮哄ぇ鐨勯敊璇鐞嗘満鍒?浣嗘槸涓嶈兘淇濊瘉澶勭悊鎵鏈夌殑閿欒鎴栬呭紓甯?褰撻敊璇彂鐢熸椂,濡傛灉妗嗘灦涓嶈兘澶勭悊榪欑閿欒,鎶婇敊璇姏寮冪粰Web瀹瑰櫒,鍦ㄩ粯璁ょ殑鎯呭喌涓媤eb瀹瑰櫒浼氭兂瀹㈡埛绔繑鍥為敊璇俊鎭?濡傛灉鎯抽伩鍏嶈瀹㈡埛鐪嬪埌鍘熷鐨勯敊璇俊鎭?鍙互鍦╓eb搴旂敤鍙戝竷鎻忚堪鏂囦歡涓厤緗?lt;error-page>鍏冪礌.閫氳繃<error-code>404鏉ュ畾涔夐敊璇殑綾誨瀷.鐒跺悗閫氳繃<location>瑕佸鐞嗛敊璇殑JSP欏甸潰鏉ュ閿欒榪涜澶勭悊.榪樺彲浠ョ敤<exception-type>鏉ヨ緗紓甯?鐒跺悗閫氳繃<location>鏉ュ鐞嗗紓甯哥殑JSP欏甸潰鏉ュ鐞嗗紓甯?
閰嶇疆Struts鏍囩搴?榪欎釜灝卞拰浠ュ墠瀛﹀埌鐨凧SP鑷畾涔夋爣絳劇被浼?閰嶇疆鍏冪礌涓?lt;taglib>鏉ラ厤緗?<taglib-uri>榪欎釜鎸囧畾鏍囩搴撶殑uri,綾諱技璧蜂竴涓悕縐?<taglib-location>榪欎釜鏄爣絳懼簱鐨勪綅緗篃灝辨槸瀹為檯鎵鍦ㄧ殑璺緞.閫氳繃榪欐牱鐨勬柟娉曞紩鍏ヤ竴涓爣絳懼簱,鐒跺悗鍦ㄥ墠鍙癑SP欏甸潰灝卞彲浠ラ氳繃鑷繁瀹氫箟鐨刄RI鏉ヨ皟鐢ㄦ爣絳?
Struts閰嶇疆鏂囦歡:struts-config.xml鏂囦歡.棣栧厛鐮旇涓涓媜rg.apache.struts.config鍖?鍦╯truts搴旂敤鍚姩鐨勬椂鍊欎細鎶奡truts閰嶇疆鏂囦歡淇℃伅璇誨彇鍒板唴瀛樹腑,騫舵妸瀹冧滑瀛樻斁鍦╟onfig鍖呬腑鐩稿叧鐨凧avaBean綾葷殑瀹炰緥涓?鍖呬腑鐨勬瘡涓涓被閮藉拰struts閰嶇疆鏂囦歡涓壒瀹氱殑閰嶇疆鍏冪礌瀵瑰簲,ModuleConfig鍦⊿truts妗嗘灦涓壆婕斾簡鍗佸垎閲嶈鐨勮鑹?瀹冩槸鏁翠釜config鍖呯殑鏍稿績,鍦⊿truts榪愯鏃舵潵瀛樻斁鏁翠釜搴旂敤鐨勯厤緗俊鎭?濡傛灉鏈夊涓瓙搴旂敤閮戒細鏈変竴涓狹oduleConfig瀵硅薄,瀹冨拰Struts鏂囦歡鏍瑰厓绱犵殑<struts-config>瀵瑰簲.鏍瑰厓绱犱腑鍖呭惈<form-bean><action><forward>絳夊厓绱?
<struts-config>鍏冪礌:鏃禨truts閰嶇疆鏂囦歡鐨勬牴鍏冪礌,鍜屽畠瀵瑰簲鐨勯厤緗被ModuleConfig綾?<struts-config>鍏冪礌鏈?涓瓙鍏冪礌.浠栦滑鐨凞TD瀹氫箟鏄痙ata-sources?form-bean? global-exception?global-forwards?action-mapping?controller?message-resources?plug-in*鍦⊿truts閰嶇疆鏂囦歡涓?蹇呴』鎸夌収DTD鎸囧畾鐨勫厛鎵嬮『搴忔潵閰嶇疆<struts-config>鍏冪礌鐨勫悇涓瓙鍏冪礌,濡傛灉棰犲掍簡榪欎簺瀛愬厓绱犵殑欏哄簭,浼氫駭鐢熼敊璇?
<data-sources>鍏冪礌:鐢ㄦ潵閰嶇疆搴旂敤鎵闇瑕佺殑鏁版嵁婧?鏁版嵁婧愯礋璐e垱寤哄拰鐗瑰畾鐨勬暟鎹簱鐨勮繛鎺?璁稿鏁版嵁婧愰噰鐢ㄨ繛鎺ユ睜鐨勬満鍒跺疄鐜?浠ヤ究鎻愰珮鏁版嵁搴撹闂殑鎬ц兘.JAVA璇█鎻愪緵浜唈avax.sql.DataSource鎺ュ彛,鎵鏈夌殑鏁版嵁婧愰兘蹇呴』瀹炵幇榪欎釜鎺ュ彛.璁稿搴旂敤鏈嶅姟鍣ㄥ拰Web鏈嶅姟鍣ㄩ兘鎻愪緵浜嗘暟鎹簮緇勪歡.寰堝鏁版嵁搴撳巶鍟嗕篃鎻愪緵浜嗘暟鎹簮鐨勫疄鐜?<data-sources>鍏冪礌鍖呭惈澶氫釜<data-source>瀛愬厓绱犳案榪滈厤緗壒瀹氱殑鏁版嵁婧?浠栦滑鍙互鍖呭惈澶氫釜<set-property>瀛愬厓绱犵敤浜庤緗暟鎹簮鐨勫悇縐嶅睘鎬?閰嶇疆浜嗘暟鎹簮浠ュ悗,灝卞彲浠ュ湪Action綾諱腑璁塊棶鏁版嵁婧?鍦ˋction涓畾涔変簡getDataSource(HttpRequest)鏂規硶,鐢ㄤ簬鑾峰彇鏁版嵁婧愬璞$殑寮曠敤.鐒跺悗鍙互鍒╃敤DataSource瀵硅薄璋冪敤getConnection鑾峰彇涓涓繛鎺ュ璞″鏁版嵁搴撹繘琛屾搷浣?鍦ㄩ厤緗枃浠朵腑澹版槑澶氫釜鏁版嵁婧愮殑鏃跺欓渶瑕佷負姣忎竴涓暟鎹簮鍒嗛厤鍞竴鐨凨ey鍊?閫氳繃榪欎釜鏉ヨ〃紺虹壒瀹氱殑鏁版嵁婧?鑾峰彇鐗瑰畾鐨勬暟鎹簮鐨勬椂鍊欏彲浠ョ敤dataSource = getDataSource(reqeust,鈥滱鈥?;
<form-beans>鍏冪礌:鐢ㄦ潵閰嶇疆澶氫釜ActionForm,鍖呭惈涓涓垨鑰匩涓?lt;form-bean>瀛愬厓绱?姣忎釜<form-bean>鍏冪礌閮藉寘鍚涓睘鎬?className鎸囧畾鍜?lt;form-bean>鍖歸厤鐨勭被.name鎸囧畾璇ctionForm鐨勫敮涓鏍囪瘑絎?榪欎釜灞炴ф槸蹇呴』鐨勪互鍚庝綔涓哄紩鐢ㄤ嬌鐢?type鎸囧畾ActionForm綾葷殑瀹屾暣綾誨悕,榪欎釜灞炴т篃鏄繀欏葷殑.娉ㄦ剰鍖呭悕涔熻鍔犱笂.<form-property>鏄寚瀹氬姩鎬佺殑Form鐨勫厓绱?浠ュ悗浼氭繁鍏ヤ簡瑙?
<global-exception>鍏冪礌:鐢ㄤ簬閰嶇疆寮傚父澶勭悊,鍏冪礌鍙互鍖呭惈涓涓垨鑰呭涓?lt;exception>鍏冪礌,鐢ㄦ潵璁劇疆JAVA寮傚父鍜屽紓甯稿鐞嗙被ExceptionHandler涔嬮棿鐨勬槧灝?className鎸囧畾鍜屽厓绱犲搴旂殑閰嶇疆綾?榛樿鐨勪笉鐢ㄥ姩.handler鎸囧畾寮傚父澶勭悊綾婚粯璁ゆ槸ExceptionHandler.key鎸囧畾鍦ㄦ湰鍦拌祫婧愭枃浠朵腑寮傚父鐨勬秷鎭疜ey,path鎸囧畾褰撳墠寮傚父鍙戠敓鐨勬椂鍊欒漿鍙戠殑璺緞.scope鎸囧畾ActionMessages瀹炰緥瀛樻斁鐨勮寖鍥?type鎸囧畾闇瑕佸鐞嗗紓甯哥被鐨勫悕瀛?蹇呴』鐨?bundle鎸囧畾Resource Bundle.
<global-forwards>鍏冪礌:鐢ㄦ潵澹版槑鍏ㄥ眬杞彂,鍏冪礌鍙互鏈変竴涓垨鑰匩涓?lt;forward>鍏冪礌緇勬垚,鐢ㄤ簬鎶婁竴涓昏緫鍚嶆槧灝勫埌鐗瑰畾鐨刄RL,閫氳繃榪欑鏂規硶Action綾繪垨鑰匤SP欏甸潰鏃犻渶鎸囧畾URL,鍙鎸囧畾閫昏緫鍚嶇О灝卞彲浠ュ疄鐜拌姹傝漿鍙戞垨鑰呴噸瀹氬悜.榪欐牱鍙互鍑忓皯鎺у埗緇勪歡鍜岃鍥劇殑鑱氬悎.鏄撲簬緇存姢.className瀵瑰簲鐨勯厤緗被.contextRelative濡傛灉涓簍rue琛ㄧず褰損ath灞炴т互/寮澶寸殑鏃跺?緇欏嚭鐨勬槸瀵瑰簲鐨勪笂涓嬫枃URL榛樿鏄痜alse.name杞彂璺緞鐨勯昏緫鍚?蹇呴』鍐?path杞彂鎴栬呴噸瀹氬悜鐨刄RL,蹇呴』鍐欏繀欏繪槸浠?寮澶?redirect璁劇疆涓簍rue鐨勬椂鍊欒〃紺烘墽琛岄噸瀹氬悜鎿嶄綔,姝ら」涓篺alse鐨勬椂鍊?琛ㄧず鎵ц璇鋒眰杞彂鎿嶄綔.閲嶅畾鍚戜笌璇鋒眰杞彂鐨勫尯鍒互鍚庡氨鏄噸瀹氬悜鏄妸璇鋒眰鐢熸垚搴旂瓟緇欏鎴風鐒跺悗鍦ㄩ噸鏂板彂閫佺粰瀹氬悜鐨刄RL,嫻忚鍣ㄥ湴鍧鏍忎細鏈夋樉紺?鑰岃漿鍙戝氨鏄洿鎺ユ妸璇鋒眰杞彂緇欐湰搴旂敤鐨勫彟涓涓枃浠?涓嶇敓鎴愬簲絳旀墍浠ュ鎴風IE娌℃樉紺?
<action-mapping>鍏冪礌:鍖呭惈涓涓垨鑰匩涓?lt;action>鍏冪礌,鎻忚堪浜嗕粠鐗瑰畾鐨勮姹傝礬寰勫埌鍝嶅簲鐨凙ction鐨勬槧灝?鍦?lt;action>鍏冪礌涓彲浠ュ寘鍚涓?lt;exception>鍜?lt;forward>瀛愬厓绱?浠栦滑鍒嗗埆閰嶇疆灞閮ㄥ紓甯稿鐞嗗拰灞閮ㄨ漿鍙?attribute璁劇疆Action鍏寵仈鐨凙ctionForm鍦╮equest鎴栬卻ession鑼冨洿鍐呯殑key.灝辨槸鍦╮equest鎴栬卻ession鍏變韓鍐呯殑鍚嶇О.className瀵瑰簲閰嶇疆鍏冪礌鐨勭被.榛樿鐨勬槸ActionMapping.forward鎸囧畾杞彂URL璺緞include鎸囧畾鍖呭惈URL璺緞.input鎸囧畾鍖呭惈琛ㄥ崟鐨刄RL,褰撹〃鍗曢獙璇佸け璐ョ殑鏃跺欏彂閫佺殑URL.name,鎸囧畾鍜岃Action鍏寵仈鐨凢orm鍚嶅瓧.璇ュ悕瀛楀繀欏繪槸鍦╢orm-bean涓畾涔夎繃鐨?鍙啓鍙笉鍐?path蹇呴』/寮澶寸殑鏂逛綅Action鐨勮礬寰?parameter鎸囧畾Action閰嶇疆鍙傛暟.鍦ˋction鐨別xecute()鏂規硶涓彲浠ヨ皟鐢ˋctionMapping鐨刧etParameter()鏂規硶鏉ヨ鍙栧尮閰嶇殑鍙傛暟.roles鎸囧畾鍏佽璋冪敤璇ction鐨勫畨鍏ㄨ鑹?澶氫釜瑙掕壊涔嬮棿閫楀彿鏍煎紑.scope鎸囧畾Form鐨勫瓨鍦ㄨ寖鍥?榛樿鏄痵ession.tyep鎸囧畾Action鐨勫畬鏁寸被鍚?unknown濡傛灉鏄痶rue琛ㄧず鍙互澶勭悊鐢ㄦ埛鍙戝嚭鐨勬墍鏈夌殑鏃犳晥鐨凙ctionURL榛樿鏄痜alse.validate鎸囧畾鏄惁璋冪敤ActionForm鐨剉alidate鏂規硶.
<controller>鍏冪礌:鐢ㄤ簬閰嶇疆ActionServlet.buffreSize鎸囧畾涓婅澆鏂囦歡鐨勮緭鍏ョ紦鍐插ぇ灝?璇ュ睘鎬т負鍙夐粯璁?096.className鎸囧畾鍏冪礌瀵瑰簲鐨勯厤緗被,ControllerConfig.鐒跺悗鏄痗ontentType鎸囧畾鍝嶅簲緇撴灉鍐呭綾誨瀷鍜屽瓧絎︾紪鐮?璇ュ睘鎬т負鍙?榛樿鏄痶ext/html濡傛灉鍦ˋction鎴栬匤SP緗戦〉涔熻緗簡綾誨瀷鍐呭,浼氳鐩栬繖涓?locale鎸囧畾鏄惁鎶奓ocale瀵硅薄淇濆瓨鍒板綋鍓嶇敤鎴風殑session涓粯璁alse.tempDir鎸囧畾澶勭悊鏂囦歡涓婅澆鐨勪復鏃跺伐浣滅洰褰?nochache濡傛灉鏄痶rue鍦ㄥ搷搴旂粨鏋滀腑鍔犲叆鐗瑰畾鐨勫ご鍙傛暟.
<message-resources>鍏冪礌:鐢ㄦ潵閰嶇疆Resource Bundle.鐢ㄤ簬瀛樻斁鏈湴鏂囨湰娑堟伅鏂囦歡.className鍏冪礌瀵瑰簲鐨勯厤緗被.MessageResourcesConfig.factory鎸囧畾娑堟伅鐨勫伐鍘傜被.key鎸囧畾鏂囦歡瀛樻斁鐨凷ervlet瀵硅薄涓噰鐢ㄧ殑灞炴ey.null鎸囧畾濡備綍澶勭悊鏈煡娑堟伅.parameter鎸囧畾娑堟伅鐨勬枃浠跺悕.
<plug-in>鍏冪礌:鐢ㄤ簬閰嶇疆Struts鎻掍歡.
閰嶇疆澶氬簲鐢ㄦā鍧?span lang="EN-US">:鎵鏈夌殑瀛愬簲鐢ㄩ兘鍙互鍏變韓鍚屼竴涓狝ctionServlet瀹炰緥,浣嗘槸姣忎釜瀛愬簲鐢ㄩ兘鏈夊崟鐙殑閰嶇疆鏂囦歡.鎶婂簲鐢ㄥ垝鍒嗕負澶氫釜瀛愬簲鐢ㄦā鍧?棣栧厛涓烘瘡涓簲鐢ㄥ垱寤哄崟鐙殑Struts閰嶇疆鏂囦歡,鍦╳eb.xml鐨凙ctionServlet閰嶇疆浠g爜涓坊鍔犲嚑涓瓙搴旂敤淇℃伅.閲囩敤<forward>鍏冪礌鏉ュ疄鐜板簲鐢ㄤ箣闂寸殑鍒囨崲.
Digester緇勪歡:鏄竴涓狝pache鐨勫彟涓涓紑婧愪唬鐮侀」鐩?褰揝truts琚垵濮嬪寲鐨勬椂鍊?棣栧厛浼氳鍙栧茍瑙f瀽閰嶇疆鏂囦歡,妗嗘灦閲囩敤Digester緇勪歡鏉ヤ笖瑗塊厤緗枃浠?鐒跺悗鍒涘緩config鍖呬腑鐨勫璞?鑰呭璞$敤浜庡瓨鏀鵑厤緗俊鎭?
鍏跺疄閰嶇疆鏂囦歡涓嶉毦,鍙閮界悊鍏朵腑鐨勫師鐞嗗氨OK浜?鐪熸瀹為檯鐨勯」鐩紑鍙戜腑,閲囩敤鐨勫伐鍏蜂緥濡侲clipse緋誨垪,鎻愪緵浜嗙浉搴旂殑鎻掍歡,鍦ㄥ垱寤轟竴涓猄truts宸ョ▼鐨勬椂鍊欓厤緗枃浠剁殑鏍囩閮芥槸鑷姩鐢熸垚鐨?鑰屾垜浠彧闇瑕佸線閲岄潰濉啓灞炴у氨OK浜? (緗戝弸浠殑鏀寔,鏄垜緇х畫鍐欐妧鏈枃绔犵殑鍔ㄥ姏!)