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

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

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

    J2EE學習筆記

    程序猿的軌跡

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

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

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲精品伦理熟女国产一区二区| 久久精品国产亚洲夜色AV网站| 亚洲伊人色一综合网| 午夜精品射精入后重之免费观看| 亚洲午夜无码久久久久| 岛国岛国免费V片在线观看| 免费人成年激情视频在线观看| 特级毛片A级毛片免费播放| 四虎影院永久免费观看| 免费夜色污私人影院网站| 亚洲爽爽一区二区三区| 中文字幕手机在线免费看电影| 亚洲人成精品久久久久| 久久久久国产精品免费看| 亚洲视频国产视频| 色妞WWW精品免费视频| 亚洲AV无码一区二区三区久久精品| 免费无遮挡无码视频网站| 日韩在线视频免费| 亚洲精品无码久久久影院相关影片 | 亚洲国产精品一区| 日本h在线精品免费观看| 亚洲综合小说另类图片动图| 又黄又爽无遮挡免费视频| 人妻免费久久久久久久了| 中文字幕亚洲天堂| 18pao国产成视频永久免费| 久久亚洲精品国产亚洲老地址| 免费的涩涩视频在线播放| 一级毛片a女人刺激视频免费| 亚洲AV无码欧洲AV无码网站| 国产精品成人免费福利| 美女又黄又免费的视频| 亚洲AV无码久久精品蜜桃| 69成人免费视频无码专区| 国产一级a毛一级a看免费视频 | 狠狠综合亚洲综合亚洲色| 国产AV无码专区亚洲AV毛网站| 亚洲成人免费电影| 一级做a爰片久久毛片免费陪| 亚洲AV无码不卡在线播放|