锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品中文字幕无乱码麻豆,亚洲图片激情小说,亚洲欧洲日韩极速播放http://www.tkk7.com/mikechen/category/50934.html鐢?shù)瀛愬晢鍔℃妧鏈灦鏋?/description>zh-cnWed, 04 Jul 2012 00:46:15 GMTWed, 04 Jul 2012 00:46:15 GMT60妗嗘灦-quartzhttp://www.tkk7.com/mikechen/archive/2012/07/03/382090.html闄堢澘闄堢澘Tue, 03 Jul 2012 06:42:00 GMThttp://www.tkk7.com/mikechen/archive/2012/07/03/382090.htmlhttp://www.tkk7.com/mikechen/comments/382090.htmlhttp://www.tkk7.com/mikechen/archive/2012/07/03/382090.html#Feedback0http://www.tkk7.com/mikechen/comments/commentRss/382090.htmlhttp://www.tkk7.com/mikechen/services/trackbacks/382090.html涓錛歲uartz綆浠?/strong>
       OpenSymphony 鐨凲uartz鎻愪緵浜嗕竴涓瘮杈冨畬緹庣殑浠誨姟璋冨害瑙e喅鏂規(guī)銆?/span>
       Quartz 鏄釜寮婧愮殑浣滀笟璋冨害妗嗘灦錛屽畾鏃惰皟搴﹀櫒錛屼負鍦?Java 搴旂敤紼嬪簭涓繘琛屼綔涓氳皟搴︽彁渚涗簡綆鍗曞嵈寮哄ぇ鐨勬満鍒躲?/div>
       Quartz涓湁涓や釜鍩烘湰姒傚康錛氫綔涓氬拰瑙﹀彂鍣ㄣ備綔涓氭槸鑳藉璋冨害鐨勫彲鎵ц浠誨姟錛岃Е鍙戝櫒鎻愪緵浜嗗浣滀笟鐨勮皟搴?br />
浜岋細quartz spring閰嶇疆璇﹁В
  •  涓轟粈涔堜笉閫傜敤java.util.Timer緇撳悎java.util.TimerTask 
        1.涓昏鐨勫師鍥狅紝閫傜敤涓嶆柟渚匡紝鐗瑰埆鏄埗瀹氬叿浣撶殑騫存湀鏃ユ椂鍒嗙殑鏃墮棿錛岃宷uartz浣跨敤綾諱技linux涓婄殑cron閰嶇疆錛屽緢鏂逛究鐨勯厤緗瘡闅旀椂闂存墽琛岃Е鍙戙?br />
        2.鍏舵鎬ц兘鐨勫師鍥狅紝浣跨敤jdk鑷甫鐨凾imer涓嶅叿澶囧綰跨▼錛岃宷uartz閲囩敤綰跨▼姹狅紝鎬ц兘涓婃瘮timer楂樺嚭寰堝銆?br />

  •    璇﹁Вquartz鍦╯pring閲岄潰鐨勯厤緗?/strong>
    鍦╯pring閲屼富瑕佸垎涓轟袱縐嶄嬌鐢ㄦ柟寮忥細絎竴縐嶏紝涔熸槸鐩墠浣跨敤鏈澶氱殑鏂瑰紡錛宻pring鎻愪緵鐨凪ethodInvokingJobDetailFactoryBean浠g悊綾伙紝閫氳繃闆峰埄綾葷洿鎺ヨ皟鐢ㄤ換鍔$被鐨勬煇涓嚱鏁幫紱絎簩縐?紼嬪簭閲屽疄鐜皅uartz鎺ュ彛錛宷uartz閫氳繃璇ユ帴鍙h繘琛岃皟搴︺?br />
      涓昏璁茶В閫氳繃spring鎻愪緵鐨勪唬鐞嗙被MethodInvokingJobDetailFactoryBean

        1.涓氬姟閫昏緫綾?涓氬姟閫昏緫鏄嫭绔嬬殑錛屾湰韜氨涓巕uartz瑙h︾殑錛屽茍娌℃湁娣卞叆榪涘幓錛岃繖瀵逛笟鍔℃潵璁叉槸寰堝ソ鐨勪竴涓柟寮忋?br />
                        public class  TestJobTask{
     

      /**
       *涓氬姟閫昏緫澶勭悊
       
*/
        public void   service(){
            /**涓氬姟閫昏緫*/
                ..
        }

}
       
    2.澧炲姞涓涓嚎紼嬫睜
    <!-- 綰跨▼鎵ц鍣ㄩ厤緗紝鐢ㄤ簬浠誨姟娉ㄥ唽 -->
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
 <property name="corePoolSize" value="10" />
 <property name="maxPoolSize" value="100" />
 <property name="queueCapacity" value="500" />
</bean>

  3.瀹氫箟涓氬姟閫昏緫綾?br />
    <!-- 涓氬姟瀵硅薄 -->
<bean id="testJobTask" class="com.mike.scheduling.TestJobTask" />


    4.澧炲姞quartz璋冪敤涓氬姟閫昏緫

    <!-- 璋冨害涓氬姟 -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
 <property name="targetObject" ref="testJobTask" />
 <property name="targetMethod" value="service" />
</bean>

    5.澧炲姞璋冪敤鐨勮Е鍙戝櫒錛岃Е鍙戠殑鏃墮棿錛屾湁涓ょ鏂瑰紡錛?br />
     絎竴縐嶈Е鍙戞椂闂達紝閲囩敤綾諱技linux鐨刢ron錛岄厤緗椂闂寸殑琛ㄧず鍙戝嚭涓板瘜  
  <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
 <property name="jobDetail" ref="jobDetail" />
 <property name="cronExpression" value="10 0/1 * * * ?" />
</bean>
  Cron琛ㄨ揪寮?#8220;10 */1 * * * ?”鎰忎負錛氫粠10縐掑紑濮嬶紝姣?鍒嗛挓鎵ц涓嬈?/span> 
  
    絎簩縐嶏紝閲囩敤姣旇緝綆璇濈殑鏂瑰紡錛岀敵鏄庡歡榪熸椂闂村拰闂撮殧鏃墮棿
  <bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
 <property name="jobDetail" ref="jobDetail" />
 <property name="startDelay" value="10000" />
 <property name="repeatInterval" value="60000" />
</bean>
  寤惰繜10縐掑惎鍔紝鐒跺悗姣忛殧1鍒嗛挓鎵ц涓嬈?/span> 

    6.寮濮嬭皟鐢?br />
      <!-- 璁劇疆璋冨害 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 <property name="triggers">
  <list>
   <ref bean="cronTrigger" />
  </list>
 </property>
 <property name="taskExecutor" ref="executor" />
</bean>

   7.緇撴潫錛氬惎鍔ㄥ鍣ㄥ嵆鍙紝宸茬粡灝唖pring鍜宷uartz緇撳悎瀹屾瘯銆?/strong>

    Cron甯哥敤鐨勮〃杈懼紡
    "0 0 12 * * ?" 姣忓ぉ涓崍12鐐硅Е鍙?/span>
"0 15 10 ? * *" 姣忓ぉ涓婂崍10:15瑙﹀彂
"0 15 10 * * ?" 姣忓ぉ涓婂崍10:15瑙﹀彂
"0 15 10 * * ? *" 姣忓ぉ涓婂崍10:15瑙﹀彂
"0 15 10 * * ? 2005" 2005騫寸殑姣忓ぉ涓婂崍10:15瑙﹀彂
"0 * 14 * * ?" 鍦ㄦ瘡澶╀笅鍗?鐐瑰埌涓嬪崍2:59鏈熼棿鐨勬瘡1鍒嗛挓瑙﹀彂
"0 0/5 14 * * ?" 鍦ㄦ瘡澶╀笅鍗?鐐瑰埌涓嬪崍2:55鏈熼棿鐨勬瘡5鍒嗛挓瑙﹀彂
"0 0/5 14,18 * * ?" 鍦ㄦ瘡澶╀笅鍗?鐐瑰埌2:55鏈熼棿鍜屼笅鍗?鐐瑰埌6:55鏈熼棿鐨勬瘡5鍒嗛挓瑙﹀彂
"0 0-5 14 * * ?" 鍦ㄦ瘡澶╀笅鍗?鐐瑰埌涓嬪崍2:05鏈熼棿鐨勬瘡1鍒嗛挓瑙﹀彂
"0 10,44 14 ? 3 WED" 姣忓勾涓夋湀鐨勬槦鏈熶笁鐨勪笅鍗?:10鍜?:44瑙﹀彂
"0 15 10 ? * MON-FRI" 鍛ㄤ竴鑷沖懆浜旂殑涓婂崍10:15瑙﹀彂
"0 15 10 15 * ?" 姣忔湀15鏃ヤ笂鍗?0:15瑙﹀彂
"0 15 10 L * ?" 姣忔湀鏈鍚庝竴鏃ョ殑涓婂崍10:15瑙﹀彂
"0 15 10 ? * 6L" 姣忔湀鐨勬渶鍚庝竴涓槦鏈熶簲涓婂崍10:15瑙﹀彂 
"0 15 10 ? * 6L 2002-2005" 2002騫磋嚦2005騫寸殑姣忔湀鐨勬渶鍚庝竴涓槦鏈熶簲涓婂崍10:15瑙﹀彂
"0 15 10 ? * 6#3" 姣忔湀鐨勭涓変釜鏄熸湡浜斾笂鍗?0:15瑙﹀彂

涓夛細quartz鍘熺悊

    鏍規(guī)嵁涓婇潰spring鐨勯厤緗紝鎴戜滑灝辨瘮杈冩竻妤歲uartz鐨勫唴閮ㄦ儏鍐碉紝涓嬮潰鎴戜滑涓昏璇﹁В閰嶇疆娑夊強鍒扮殑姣忎釜鐐?/strong>
    1.鎴戜滑鍏堜粠鏈鍚庝竴涓楠ょ湅璧鳳紝SchedulerFactoryBean 錛宻cheduler鐨勫伐鍘傚疄鐜幫紝閲岄潰鍙互鐢熶駭鍑哄搴旂殑澶氫釜jobDetail鍜宼rigger錛屾瘡涓猨obDetail瀵瑰簲trigger浠h〃涓涓換鍔?br />         Quartz鐨凷chedulerFactory鏄爣鍑嗙殑宸ュ巶綾伙紝涓嶅お閫傚悎鍦⊿pring鐜涓嬩嬌鐢ㄣ傛澶栵紝涓轟簡淇濊瘉Scheduler鑳藉鎰熺煡 Spring瀹瑰櫒鐨勭敓鍛藉懆鏈燂紝瀹屾垚鑷姩鍚姩鍜屽叧闂殑鎿嶄綔錛屽繀欏昏Scheduler鍜孲pring瀹瑰櫒鐨勭敓鍛藉懆鏈熺浉鍏寵仈銆備互渚垮湪Spring瀹瑰櫒鍚姩鍚庯紝 Scheduler鑷姩寮濮嬪伐浣滐紝鑰屽湪Spring瀹瑰櫒鍏抽棴鍓嶏紝鑷姩鍏抽棴Scheduler銆備負姝わ紝Spring鎻愪緵 SchedulerFactoryBean錛岃繖涓狥actoryBean澶ц嚧鎷ユ湁浠ヤ笅鐨勫姛鑳斤細 
     1)浠ユ洿鍏稡ean椋庢牸鐨勬柟寮忎負Scheduler鎻愪緵閰嶇疆淇℃伅錛?nbsp;
     2)璁㏒cheduler鍜孲pring瀹瑰櫒鐨勭敓鍛藉懆鏈熷緩绔嬪叧鑱旓紝鐩哥敓鐩告伅錛?nbsp;
     3)閫氳繃灞炴ч厤緗儴鍒嗘垨鍏ㄩ儴浠f浛Quartz鑷韓鐨勯厤緗枃浠躲?nbsp;
  2.jobDetail,琛ㄧず涓涓彲鎵ц鐨勪笟鍔¤皟鐢?br />  
  3.trigger:璋冨害鐨勬椂闂磋鍒掞紝浠涔堟椂鍊欙紝姣忛殧澶氬皯鏃墮棿鍙墽琛岀瓑鏃墮棿璁″垝

  4.ThreadPoolTaskExecutor錛岀嚎紼嬫睜錛岀敤鏉ュ茍琛屾墽琛屾瘡涓搴旂殑job錛屾彁楂樻晥鐜囷紝榪欎篃鏄笂闈㈡彁鍒頒笉鎺ㄨ崘浣跨敤jdk鑷韓timer鐨勪竴涓緢閲嶈鐨勫師鍥?/span>


闄堢澘 2012-07-03 14:42 鍙戣〃璇勮
]]>妗嗘灦-springhttp://www.tkk7.com/mikechen/archive/2012/02/29/370992.html闄堢澘闄堢澘Wed, 29 Feb 2012 06:45:00 GMThttp://www.tkk7.com/mikechen/archive/2012/02/29/370992.htmlhttp://www.tkk7.com/mikechen/comments/370992.htmlhttp://www.tkk7.com/mikechen/archive/2012/02/29/370992.html#Feedback0http://www.tkk7.com/mikechen/comments/commentRss/370992.htmlhttp://www.tkk7.com/mikechen/services/trackbacks/370992.html涓錛歴pring姒傝

    綆鍗曟潵璇達紝Spring鏄竴涓交閲忕駭鐨勬帶鍒跺弽杞紙IoC錛夊拰闈㈠悜鍒囬潰錛?a target="_blank" style="text-decoration: underline; color: #136ec2; ">AOP錛夌殑瀹瑰櫒妗嗘灦銆?br />    鎺у埗鍙嶈漿——Spring閫氳繃涓縐嶇О浣滄帶鍒跺弽杞紙IoC錛夌殑鎶鏈績榪涗簡鏉捐﹀悎銆傚綋搴旂敤浜咺oC錛屼竴涓璞′緷璧栫殑鍏跺畠瀵硅薄浼氶氳繃琚姩鐨勬柟寮忎紶閫掕繘鏉ワ紝鑰屼笉鏄繖涓璞¤嚜宸卞垱寤烘垨鑰呮煡鎵句緷璧栧璞°備綘鍙互璁や負IoC涓嶫NDI鐩稿弽——涓嶆槸瀵硅薄浠庡鍣ㄤ腑鏌ユ壘渚濊禆錛岃屾槸瀹瑰櫒鍦ㄥ璞″垵濮嬪寲鏃朵笉絳夊璞¤姹傚氨涓誨姩灝嗕緷璧栦紶閫掔粰瀹冦?div>
銆銆◆闈㈠悜鍒囬潰——Spring鎻愪緵浜?a target="_blank" style="text-decoration: underline; color: #136ec2; ">闈㈠悜鍒囬潰緙栫▼鐨勪赴瀵屾敮鎸侊紝鍏佽閫氳繃鍒嗙搴旂敤鐨勪笟鍔¢昏緫涓庣郴緇熺駭鏈嶅姟錛堜緥濡傚璁★紙auditing錛夊拰浜嬪姟錛坱ransaction錛夌鐞嗭級榪涜鍐呰仛鎬х殑寮鍙戙傚簲鐢ㄥ璞″彧瀹炵幇瀹冧滑搴旇鍋氱殑——瀹屾垚涓氬姟閫昏緫——浠呮鑰屽凡銆傚畠浠茍涓嶈礋璐o紙鐢氳嚦鏄剰璇嗭級鍏跺畠鐨勭郴緇熺駭鍏蟲敞鐐癸紝渚嬪鏃ュ織鎴栦簨鍔℃敮鎸併?div style="height: 14px; line-height: 14px; font-size: 12px; overflow-x: hidden; overflow-y: hidden; ">
銆銆◆瀹瑰櫒——Spring鍖呭惈騫剁鐞嗗簲鐢ㄥ璞$殑閰嶇疆鍜岀敓鍛藉懆鏈燂紝鍦ㄨ繖涓剰涔変笂瀹冩槸涓縐嶅鍣紝浣犲彲浠ラ厤緗綘鐨勬瘡涓猙ean濡備綍琚垱寤?#8212;—鍩轟簬涓涓彲閰嶇疆鍘熷瀷錛坧rototype錛夛紝浣犵殑bean鍙互鍒涘緩涓涓崟鐙殑瀹炰緥鎴栬呮瘡嬈¢渶瑕佹椂閮界敓鎴愪竴涓柊鐨勫疄渚?#8212;—浠ュ強瀹冧滑鏄浣曠浉浜掑叧鑱旂殑銆傜劧鑰岋紝Spring涓嶅簲璇ヨ娣峰悓浜庝紶緇熺殑閲嶉噺綰х殑EJB瀹瑰櫒錛屽畠浠粡甯告槸搴炲ぇ涓庣閲嶇殑錛岄毦浠ヤ嬌鐢ㄣ?div style="height: 14px; line-height: 14px; font-size: 12px; overflow-x: hidden; overflow-y: hidden; ">銆銆◆妗嗘灦——Spring鍙互灝嗙畝鍗曠殑緇勪歡閰嶇疆銆佺粍鍚堟垚涓哄鏉傜殑搴旂敤銆傚湪Spring涓紝搴旂敤瀵硅薄琚0鏄庡紡鍦扮粍鍚堬紝鍏稿瀷鍦版槸鍦ㄤ竴涓猉ML鏂囦歡閲屻係pring涔熸彁渚涗簡寰堝鍩虹鍔熻兘錛堜簨鍔$鐞嗐佹寔涔呭寲妗嗘灦闆嗘垚絳夌瓑錛夛紝灝嗗簲鐢ㄩ昏緫鐨勫紑鍙戠暀緇欎簡浣犮?div style="height: 14px; line-height: 14px; font-size: 12px; overflow-x: hidden; overflow-y: hidden; ">銆銆鎵鏈塖pring鐨勮繖浜涚壒寰佷嬌浣犺兘澶熺紪鍐欐洿騫插噣銆佹洿鍙鐞嗐佸茍涓旀洿鏄撲簬嫻嬭瘯鐨勪唬鐮併傚畠浠篃涓篠pring涓殑鍚勭妯″潡鎻愪緵浜嗗熀紜鏀寔銆?br />
浜岋細spring鐨勬暣涓敓鍛藉懆鏈?/strong>
    棣栧厛璇翠竴涓媠pring鐨勬暣涓垵濮嬪寲榪囩▼錛寃eb搴旂敤涓垱寤簊pring瀹瑰櫒鏈変袱縐嶆柟寮忥細
    絎竴縐嶏細鍦╳eb.xml閲岀洿鎺ラ厤緗畇pring瀹瑰櫒錛宻ervletcontextlistener
    絎簩縐嶏細閫氳繃load-on-startup servlet瀹炵幇銆?br />    涓昏灝辮涓涓嬬涓縐嶆柟寮忥細
    spring鎻愪緵浜哠ervletContextListener鐨勫疄鐜扮被ContextLoaderListener,璇ョ被浣滀負listener浣跨敤錛屽湪鍒涘緩鏃惰嚜鍔ㄦ煡鎵網(wǎng)EB-INF鐩綍涓嬬殑applicationContext.xml,璇ユ枃浠舵槸榛樿鏌ユ壘鐨勶紝濡傛灉鍙湁涓涓氨涓嶉渶瑕侀厤緗垵濮嬪寲xml鍙傛暟錛屽鏋滈渶瑕侀厤緗紝璁劇疆contextConfigLocation涓篴pplication鐨剎ml鏂囦歡鍗沖彲銆傚彲浠ュソ濂介槄璇諱竴涓婥ontextLoaderListener鐨勬簮浠g爜錛屽氨鍙互寰堟竻妤氱殑鐭ラ亾spring鐨勬暣涓姞杞借繃紼嬨?br />    spring瀹瑰櫒鐨勫垵濮嬪寲浠g爜濡備笅錛?br />    /**
     * Initialize the root web application context.
     */
    
public void contextInitialized(ServletContextEvent event) {
        
this.contextLoader = createContextLoader();
        
if (this.contextLoader == null) {
            
this.contextLoader = this;
        }
        
this.contextLoader.initWebApplicationContext(event.getServletContext());//contextLoader鍒濆鍖杦eb搴旂敤瀹瑰櫒

    }
    緇х畫鍒嗘瀽initWebApplicationContext鍋氫簡浠涔堜簨鎯咃細
    

    
/**
     * Initialize Spring's web application context for the given servlet context,
     * according to the "{
@link #CONTEXT_CLASS_PARAM contextClass}" and
     * "{
@link #CONFIG_LOCATION_PARAM contextConfigLocation}" context-params.
     * 
@param servletContext current servlet context
     * 
@return the new WebApplicationContext
     * 
@see #CONTEXT_CLASS_PARAM
     * 
@see #CONFIG_LOCATION_PARAM
     
*/
    
public WebApplicationContext initWebApplicationContext(ServletContext servletContext) {
      
//棣栧厛鍒涘緩涓涓猻pring鐨勭埗瀹瑰櫒錛岀被浼兼牴鑺傜偣root瀹瑰櫒錛岃屼笖鍙兘鏄竴涓紝濡傛灉宸茬粡鍒涘緩錛屾姏鍑哄搴旂殑寮傚父
        
if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
            
throw new IllegalStateException(
                    
"Cannot initialize context because there is already a root application context present - " +
                    
"check whether you have multiple ContextLoader* definitions in your web.xml!");
        }

        Log logger 
= LogFactory.getLog(ContextLoader.class);
        servletContext.log(
"Initializing Spring root WebApplicationContext");
        
if (logger.isInfoEnabled()) {
            logger.info(
"Root WebApplicationContext: initialization started");
        }
        
long startTime = System.currentTimeMillis();

        
try {
            
// Determine parent for root web application context, if any.
            ApplicationContext parent = loadParentContext(servletContext);//鍒涘緩閫氳繃web.xml閰嶇疆鐨勭埗瀹瑰櫒            
鍏蜂綋閲岄潰鐨勪唬鐮佹槸鎬庝箞瀹炵幇鐨勶紝灝變笉鍦ㄨ繖閲岃繘琛岃瑙d簡
// Store context in local instance variable, to guarantee that
            
// it is available on ServletContext shutdown.
            this.context = createWebApplicationContext(servletContext, parent);//涓昏鐨勫垱寤鴻繃紼嬮兘鍦ㄦ敼鏂規(guī)硶鍐咃紝鍙互鑷繁鍘葷湅婧愪唬鐮?/span>
            servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, 
this.context);
            
//鎶妔pring鍒濆濂界殑瀹瑰櫒鍔犺澆鍒皊ervletcontext鍐咃紝鐩稿綋浜巗ervletcontext鍖呭惈webapplicationcontext
            ClassLoader ccl 
= Thread.currentThread().getContextClassLoader();
            
if (ccl == ContextLoader.class.getClassLoader()) {
                currentContext 
= this.context;
            }
            
else if (ccl != null) {
                currentContextPerThread.put(ccl, 
this.context);
            }

            
if (logger.isDebugEnabled()) {
                logger.debug(
"Published root WebApplicationContext as ServletContext attribute with name [" +
                        WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 
+ "]");
            }
            
if (logger.isInfoEnabled()) {
                
long elapsedTime = System.currentTimeMillis() - startTime;
                logger.info(
"Root WebApplicationContext: initialization completed in " + elapsedTime + " ms");
            }

            
return this.context;
        }
        
catch (RuntimeException ex) {
            logger.error(
"Context initialization failed", ex);
            servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, ex);
            
throw ex;
        }
        
catch (Error err) {
            logger.error(
"Context initialization failed", err);
            servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, err);
            
throw err;
        }
    }
    
    鐪嬪埌榪欓噷鍩烘湰宸茬粡娓呮浜嗘暣涓猻pring瀹瑰櫒鐨勫姞杞借繃紼嬶紝濡傛灉榪樻兂浜嗚В鏇村姞娣卞叆錛岃鏌ョ湅鎴戠孩鑹叉爣娉ㄧ殑鏂規(guī)硶浣撱?br />
    鍏舵鍐嶈涓涓媠pring鐨処OC鍜孉OP浣跨敤鐨勫満鏅紝鐢變簬鍘熺悊澶у閮藉緢娓呮浜嗭紝閭e氨璇翠竴涓嬪畠浠嬌鐢ㄥ埌鐨勫湴鏂癸細
   

    IOC浣跨敤鐨勫満鏅細
        綆$悊bean鐨勪緷璧栧叧緋伙紝鐩墠涓繪祦鐨勭數(shù)瀛愬晢鍔$綉绔欏熀鏈兘閲囩敤spring綆$悊涓氬姟灞備唬鐮佺殑渚濊禆鍏崇郴錛屽寘鎷?娣樺疂錛屾敮浠樺疂錛岄樋閲屽反宸達紝鐧懼害絳夊叕鍙搞?br />        

闄堢澘 2012-02-29 14:45 鍙戣〃璇勮
]]>
妗嗘灦-struts2http://www.tkk7.com/mikechen/archive/2012/02/27/370857.html闄堢澘闄堢澘Mon, 27 Feb 2012 09:07:00 GMThttp://www.tkk7.com/mikechen/archive/2012/02/27/370857.htmlhttp://www.tkk7.com/mikechen/comments/370857.htmlhttp://www.tkk7.com/mikechen/archive/2012/02/27/370857.html#Feedback2http://www.tkk7.com/mikechen/comments/commentRss/370857.htmlhttp://www.tkk7.com/mikechen/services/trackbacks/370857.html涓錛歴truts2姒傝
    浠ebWork浼樼璁捐鎬濇兂涓烘牳蹇冿紝鍚告敹浜唖truts1鐨勯儴鍒嗕紭鐐廣?br />
浜岋細struts2璇﹁В
    涓昏灝辨槸璇﹁Вstruts2涓巗truts1涔嬮棿鐨勫尯鍒紝浠ュ強涓轟粈涔堣閲囩敤webwork閲嶆柊璁捐鏂版鏋訛紝浠ュ強鍚告敹浜唖truts1鐨勫摢閮ㄥ垎浼樼偣銆?br />    棣栧厛灝嗗尯鍒細
  •     鏈澶х殑鍖哄埆鏄笌servlet鎴愬姛瑙h︼紝涓嶅湪渚濊禆瀹瑰櫒鏉ュ垵濮嬪寲HttpServletRequest鍜孒ttpServletResponse
    struts1閲屼緷璧栫殑鏍稿績鎺у埗鍣ㄤ負ActionServlet鑰宻truts2渚濊禆ServletDispatcher,涓涓槸servlet涓涓槸filter,姝f槸閲囩敤浜唂ilter鎵嶄笉鑷充簬鍜宻ervlet鑰﹀悎錛屾墍鏈夌殑鏁版嵁 閮芥槸閫氳繃鎷︽埅鍣ㄦ潵瀹炵幇錛屽涓嬪浘鏄劇ず錛?/blockquote>    

  •     web灞傝〃鐜板眰鐨勪赴瀵岋紝struts2宸茬粡鍙互浣跨敤jsp銆乿elocity銆乫reemarker
  •     綰跨▼妯″紡鏂歸潰錛歴truts1鐨刟ction鏄崟渚嬫ā寮忚屼笖蹇呴』鏄嚎紼嬪畨鍏ㄦ垨鍚屾鐨勶紝鏄痵truts2鐨刟ction瀵規(guī)瘡涓涓姹傞兘浜х敓涓涓柊鐨勫疄渚嬶紝鍥犳娌℃湁綰跨▼瀹夊叏闂?      棰樸?/li>
  •     灝佽璇鋒眰鍙傛暟錛氭槸struts1閲囩敤ActionForm灝佽璇鋒眰鍙傛暟錛岄兘蹇呴』緇ф壙ActionForm鍩虹被錛岃宻truts2閫氳繃bean鐨勫睘鎬у皝瑁咃紝澶уぇ闄嶄綆浜嗚﹀悎銆?/li>
  •     綾誨瀷杞崲錛歴truts1灝佽鐨凙ctionForm閮芥槸String綾誨瀷錛岄噰鐢–ommons- Beanutils榪涜綾誨瀷杞崲錛屾瘡涓被涓涓漿鎹㈠櫒錛泂truts2閲囩敤OGNL榪涜綾誨瀷杞?      鎹紝鏀寔鍩烘湰鏁版嵁綾誨瀷鍜屽皝瑁呯被鍨嬬殑鑷姩杞崲銆?/li>
  •     鏁版嵁鏍¢獙錛歴truts1鍦ˋctionForm涓噸鍐檝alidate鏂規(guī)硶錛泂truts2鐩存帴閲嶅啓validate鏂規(guī)硶錛岀洿鎺ュ湪action閲岄潰閲嶅啓鍗沖彲錛屼笉闇瑕佺戶鎵夸換浣曞熀綾伙紝瀹為檯鐨勮皟鐢ㄩ『搴忔槸錛寁alidate()-->execute()錛屼細鍦ㄦ墽琛宔xecute涔嬪墠璋冪敤validate,涔熸敮鎸亁work鏍¢獙妗嗘灦鏉ユ牎楠屻?/li>
    鍏舵錛岃涓涓嬩負浠涔堣閲囩敤webwork鏉ラ噸鏂拌璁truts2
          
棣栧厛鐨勪粠鏍稿績鎺у埗鍣ㄨ皥璧鳳紝struts2鐨凢ilterDispatcher錛岃繖閲屾垜浠煡閬撴槸涓涓猣ilter鑰屼笉鏄竴涓猻ervlet,璁插埌榪欓噷寰堝浜鴻繕涓嶆槸寰堟竻妤歸eb.xml閲屽畠浠箣闂寸殑鑱旂郴錛屽厛綆鐭涓涓嬪畠浠殑鍔犺澆欏哄簭錛宑ontext-param(搴旂敤鑼冨洿鐨勫垵濮嬪寲鍙傛暟)-->listener(鐩戝惉搴旂敤绔殑浠諱綍淇敼閫氱煡)-->filter(榪囨護)-->servlet銆?br />    filter鍦ㄦ墽琛宻ervlet涔嬮棿灝變互鍙婅皟鐢ㄤ簡錛屾墍浠ユ墠鏈夊彲鑳借В鑴卞畬鍏ㄤ緷璧杝ervlet鐨勫眬闈紝閭f垜浠潵鐪嬬湅榪欎釜filter鍋氫簡浠涔堜簨鎯咃細
    /**
     * Process an action or handle a request a static resource.
     * <p/>
     * The filter tries to match the request to an action mapping.
     * If mapping is found, the action processes is delegated to the dispatcher's serviceAction method.
     * If action processing fails, doFilter will try to create an error page via the dispatcher.
     * <p/>
     * Otherwise, if the request is for a static resource,
     * the resource is copied directly to the response, with the appropriate caching headers set.
     * <p/>
     * If the request does not match an action mapping, or a static resource page,
     * then it passes through.
     *
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     
*/
    
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request 
= (HttpServletRequest) req;
        HttpServletResponse response 
= (HttpServletResponse) res;
        ServletContext servletContext 
= getServletContext();

        String timerKey 
= "FilterDispatcher_doFilter: ";
        
try {

            
// FIXME: this should be refactored better to not duplicate work with the action invocation
            ValueStack stack = dispatcher.getContainer().getInstance(ValueStackFactory.class).createValueStack();
            ActionContext ctx 
= new ActionContext(stack.getContext());
            ActionContext.setContext(ctx);

            UtilTimerStack.push(timerKey);
            request 
= prepareDispatcherAndWrapRequest(request, response);
            ActionMapping mapping;
            
try {
                mapping 
= actionMapper.getMapping(request, dispatcher.getConfigurationManager());
            } 
catch (Exception ex) {
                log.error(
"error getting ActionMapping", ex);
                dispatcher.sendError(request, response, servletContext, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
                
return;
            }

            
if (mapping == null) {
                
// there is no action in this request, should we look for a static resource?
                String resourcePath = RequestUtils.getServletPath(request);

                
if ("".equals(resourcePath) && null != request.getPathInfo()) {
                    resourcePath 
= request.getPathInfo();
                }

                
if (staticResourceLoader.canHandle(resourcePath)) {
                    staticResourceLoader.findStaticResource(resourcePath, request, response);
                } 
else {
                    
// this is a normal request, let it pass through
                    chain.doFilter(request, response);
                }
                
// The framework did its job here
                return;
            }

            dispatcher.serviceAction(request, response, servletContext, mapping);
//榪囨護鐢ㄦ埛璇鋒眰錛屾嫤鎴櫒鎵ц錛屾妸瀵瑰簲鐨刟ction璇鋒眰杞埌涓氬姟action鎵ц        } 

finally {
            
try {
                ActionContextCleanUp.cleanUp(req);
            } 
finally {
                UtilTimerStack.pop(timerKey);
            }
        }
    }
    瀵瑰簲鐨刟ction鍙傛暟鐢辨嫤鎴櫒鑾峰彇銆?br />    瑙hervlet鏄痵truts2閲囩敤webwork鎬濊礬鐨勬渶閲嶈鐨勪竴涓師鍥狅紝涔熻繋鍚堜簡鏁翠釜鎶鏈殑涓涓彂灞曟柟鍚戯紝瑙h︿竴鐩磋瘡絀夸簬鏁翠釜妗嗘灦銆?/span>
        

闄堢澘 2012-02-27 17:07 鍙戣〃璇勮
]]> 主站蜘蛛池模板: 91视频免费观看高清观看完整| 亚洲美女视频免费| 亚洲国产精品无码成人片久久| 国产在线jyzzjyzz免费麻豆| 曰批免费视频播放免费| 亚洲AV永久无码区成人网站| 在线免费视频一区二区| 国产在线精品观看免费观看| 亚洲三级在线免费观看| 亚洲高清无码综合性爱视频| 国产免费一区二区三区| 一级一级毛片免费播放| 中文字幕亚洲男人的天堂网络| 亚洲午夜福利精品久久| 我想看一级毛片免费的| A毛片毛片看免费| 亚洲国产精品日韩av不卡在线| 老子影院午夜伦不卡亚洲| 国产片免费在线观看| 久久免费视频精品| 香港特级三A毛片免费观看| 亚洲免费电影网站| 亚洲精品成人片在线播放| 国产午夜免费福利红片| 成人免费观看一区二区| 日韩精品无码免费专区午夜不卡| 日韩欧美亚洲中文乱码| 亚洲成综合人影院在院播放| 亚洲色偷偷偷鲁综合| 又黄又爽一线毛片免费观看| 114一级毛片免费| 久久午夜羞羞影院免费观看 | 国产亚洲国产bv网站在线| 中文字幕久久亚洲一区| 免费真实播放国产乱子伦| 国产情侣激情在线视频免费看| 日韩精品在线免费观看| 一区二区三区免费电影| 狠狠热精品免费观看| 久久久久久亚洲精品无码 | 鲁丝片一区二区三区免费|