<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE學(xué)習(xí)筆記

    程序猿的軌跡

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      7 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks
    對(duì)于RequestProcessor這個(gè)類,有的人可能很陌生,畢竟它不象ActionSerlvet那樣,在我們的面前頻繁的出現(xiàn)。但是,RequestProcessor用的要遠(yuǎn)比ActionServlet多,那么RequestProcessor到底是干什么的呢?當(dāng)ActionServlet接收到客戶請(qǐng)求后,會(huì)進(jìn)行一連串的初始化操作,然后,就會(huì)將客戶請(qǐng)求轉(zhuǎn)交給合適的處理器進(jìn)行處理,這個(gè)合適的處理器就是org.apache.struts.action.RequestProcessor。既然我們知道了RequestProcessor的用處,下面我們就詳細(xì)的分析下這個(gè)處理器類。
    1.調(diào)用processMultipart( )方法,如果HttpServletRequest是POST方式,且請(qǐng)求為multipart/form-data ,Struts框架將請(qǐng)求對(duì)象包裝成處理multipart 請(qǐng)求專用的請(qǐng)求對(duì)象,否則,只是簡(jiǎn)單地返回原有的請(qǐng)求對(duì)象。一般來(lái)說(shuō),除非需要處理文件上傳,否則不用關(guān)心multipart 功能的具體細(xì)節(jié)。
    2.調(diào)用processPath( ) 方法,該方法用來(lái)從請(qǐng)求URL中獲應(yīng)用取路徑部分。獲取到的信息在稍后的步驟中用于選擇合適的Struts Action調(diào)用。
    3.調(diào)用processLocale( )方法,處理一些國(guó)際化的事務(wù)。
    4.調(diào)用方法processContent( ),來(lái)決定請(qǐng)求的content type編碼(encoding)方式。content type可以配合在配置文件中,也可以在jsp文件中配置,默認(rèn)為text/html。
    5.根據(jù)noCache屬性的設(shè)置調(diào)用processNoCache( ) 方法,如果noCache設(shè)置為true。則添加合適的響應(yīng)頭到響應(yīng)對(duì)象中,使得頁(yè)面保留在瀏覽器的Cache中。這些響應(yīng)頭包含Pragma, Cache-Control, 和Expires 。
    6.調(diào)用processPreprocess( )方法,這個(gè)方法在這兒設(shè)置一個(gè)鉤子,方法的默認(rèn)實(shí)現(xiàn)只是簡(jiǎn)單地返回true,這樣給了自定義處理器的開(kāi)發(fā)者提供了一個(gè)合適的地方讓你添加自己的業(yè)務(wù)邏輯。因?yàn)檫@個(gè)方法在調(diào)用Action之前被調(diào)用,如果你重載這個(gè)方法,只需要返回false,則Action就不會(huì)被調(diào)用。例如,你可以重載這個(gè)方法用戶檢查客戶session,如果不通過(guò)就返回false。
    7.調(diào)用processMapping( )方法,根據(jù)客戶請(qǐng)求信息中的path 信息來(lái)決定是否返回ActionMapping對(duì)象實(shí)例。如果不能夠找到path 的映射,則客戶將會(huì)得到一個(gè)error 響應(yīng)。
    8.通過(guò)調(diào)用processRoles( )方法,檢查是否為Action配置了安全角色。如果配置了角色要求,則請(qǐng)求對(duì)象的isUserInRole( )方法被調(diào)用,如果用戶屬于這些角色,則客戶會(huì)得到顯示一個(gè)error 響應(yīng)。
    9.調(diào)用processActionForm( )方法,檢查是否存在為ActionMapping配置的ActionForm 。如果存在,則在有效區(qū)域內(nèi)查找是否存在該ActionForm 的實(shí)例,存在,則復(fù)用,不存在,則創(chuàng)建一個(gè)實(shí)例。然后將實(shí)例保存與再配置文件中配置好的有效區(qū)域(request,session,application)內(nèi),并用Action元素的name屬性作為該實(shí)例的關(guān)鍵字。
    10.調(diào)用processPopulate( )方法,如果存在為ActionMapping配置的ActionForm,則封裝請(qǐng)求對(duì)象中的數(shù)據(jù)到ActionForm 中,在進(jìn)行封裝之前,先調(diào)用ActionForm 的reset( )方法進(jìn)行屬性值的默認(rèn)化。
    11.調(diào)用processValidate( )方法,如果ActionForm被配置好,并且action元素的屬性validate被設(shè)置為true ,則進(jìn)一步調(diào)用validate( )方法進(jìn)行規(guī)則校驗(yàn)。如果validate( )方法校驗(yàn)失敗,就會(huì)保存一個(gè)ActionErrors 對(duì)象到請(qǐng)求區(qū)域中,請(qǐng)求將會(huì)自動(dòng)重定向到action映射的input屬性所指定的頁(yè)面中。如果校驗(yàn)通過(guò)或在action 映射中沒(méi)有配置ActionForm,則繼續(xù)處理請(qǐng)求。
    12.根據(jù)action 映射是否配置了forward屬性或include屬性來(lái)決定下一步操作。如果配置了任意一個(gè),則相應(yīng)地調(diào)用RequestDispatcher對(duì)象的forward( )方法或include( )方法,調(diào)用后,對(duì)客戶請(qǐng)求的處理結(jié)束。否則,繼續(xù)處理請(qǐng)求。
    13.調(diào)用processActionCreate( )方法,創(chuàng)建或獲取一個(gè)Action對(duì)象實(shí)例處理請(qǐng)求。processActionCreate( )方法會(huì)在緩存中查找是否存在已經(jīng)創(chuàng)建好的Action實(shí)例,如果存在,則復(fù)用,否則,則重新創(chuàng)建并將其村于緩存中。
    14.調(diào)用processActionPerform( )方法,該方法用于在一個(gè)try/catch 代碼塊中調(diào)用action 實(shí)例的execute( )方法,這樣確保action 的execute( )方法一旦發(fā)生執(zhí)行異常能夠被RequestProcessor捕獲。
    15.調(diào)用processActionForward( )方法,并傳入action的execute( )方法所返回的ActionForward對(duì)象實(shí)例,方法通過(guò)檢查ActionForward對(duì)象實(shí)例,決定采用redirect或forword方式進(jìn)行重定向。究竟采用redirect還是
    forword取決于forward元素的redirect屬性值。

    上面這些分析,也是我在網(wǎng)上搜集的資料并加以整理總結(jié)出來(lái)的,在實(shí)際的應(yīng)用開(kāi)發(fā)中,如果我們想對(duì)Struts在初始化的時(shí)候進(jìn)行一些擴(kuò)展,我們可以重新寫(xiě)ActionServlet的子類,或RequestProcessor的子類,但是不建議去寫(xiě)ActionServlet的子類,在RequestProcessor中為我們提供了processPreprocess()這個(gè)鉤子方法,這樣,我們可以去重寫(xiě)這個(gè)方法,來(lái)進(jìn)行擴(kuò)展。雖然RequestProcessor在表面上不是很常用到,但是他給人的感覺(jué)卻恰恰相反,這個(gè)類用來(lái)處理我們每一次的請(qǐng)求,所以,更好的了解RequestProcessor類對(duì)我們來(lái)說(shuō)很重要。
    posted on 2008-12-31 11:07 Fighter 閱讀(860) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV无码乱码国产麻豆穿越| 亚洲无限乱码一二三四区| 九九精品成人免费国产片| 亚洲精品中文字幕乱码影院| 成年女人毛片免费视频| 一级做a爱过程免费视| 亚洲天天在线日亚洲洲精| 成人免费无码大片A毛片抽搐| 人禽伦免费交视频播放| 久久久久亚洲精品日久生情| 免费毛片在线播放| 久久大香伊焦在人线免费| 亚洲色少妇熟女11p| 国产亚洲婷婷香蕉久久精品| 成人毛片18女人毛片免费视频未 | 国产精品极品美女自在线观看免费| 亚洲国产一区国产亚洲| 大胆亚洲人体视频| 免费看h片的网站| 久久久久国色AV免费观看| 99久久婷婷国产综合亚洲| 亚洲精品无码永久中文字幕| 免费看香港一级毛片| 毛片在线全部免费观看| 美国免费高清一级毛片| 亚洲性69影院在线观看| 自拍偷自拍亚洲精品第1页| 成人性生交大片免费看无遮挡| 中文字幕不卡高清免费| 婷婷国产偷v国产偷v亚洲| 亚洲福利视频网址| 亚洲AV一宅男色影视| 国产av无码专区亚洲国产精品| 女人18毛片水真多免费播放| 95老司机免费福利| 99精品免费视频| 一区二区免费在线观看| 亚洲精品无码成人| 亚洲免费在线视频观看| 久久丫精品国产亚洲av| 国产亚洲精品无码成人|