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

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

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

    AppFuse學(xué)習(xí)筆記-控制層

    1. 我們先詳細(xì)介紹一下Struts的控制器的工作流程。
        首先,控制器(ActionServlet)進(jìn)行初始化工作,讀取配置文件struts-config.xml,為不同的Struts模塊初始化相應(yīng)的 ModuleConfig對(duì)象。相應(yīng)地有ControlConfig集合、FormBeanConfig集合、ForwardConfig集合和 MessageResourcesConfig集合等。
        AppFuse中設(shè)計(jì)了一個(gè)繼承ActionServlet 的子類:LoginServlet做為控制器,對(duì)ActionServlet的功能進(jìn)行了擴(kuò)展。主要的功能是對(duì)本系統(tǒng)使用到的一些組件進(jìn)行初始化工作,如用戶身份的安全校驗(yàn)url、密碼加密規(guī)則等。
        控制器接收到HTTP請(qǐng)求,并從ActionConfig中找出對(duì)應(yīng)于該請(qǐng)求的Action子類,如果沒有對(duì)應(yīng)的Action,控制器直接將請(qǐng)求轉(zhuǎn)發(fā)給JSP或者靜態(tài)頁(yè)面。否則控制器將請(qǐng)求分發(fā)至具體Action類進(jìn)行處理。
        在控制器調(diào)用具體Action的方法之前,相應(yīng)的ActionForm對(duì)象將利用HTTP請(qǐng)求中的參數(shù)來填充自己。此外,若所操作的ActionForm 類配置了validate,系統(tǒng)會(huì)調(diào)用validate組件來檢查請(qǐng)求參數(shù)的合法性,并且返回一個(gè)包含所有錯(cuò)誤信息的ActionErrors對(duì)象。如果 執(zhí)行成功,ActionForm自動(dòng)將這些參數(shù)信息以FormBean的方式保存在Servlet Context中,這樣它們就可以被其它Action對(duì)象或者JSP調(diào)用。
        執(zhí)行完成Action中的方法之后,返回一個(gè)ActionForward對(duì)象,控制器通過該ActionForward對(duì)象來進(jìn)行轉(zhuǎn)發(fā)工作。

        AppFuse實(shí)現(xiàn)的最主要的功能是對(duì)用戶的管理。下面就以對(duì)用戶的管理來說明一下AppFuse控制器的實(shí)現(xiàn)。

        與用戶信息表單數(shù)據(jù)相關(guān)的FormBean是UserForm。UserForm用來存放用戶的基本信息。
        UserForm的控制器是org.appfuse.webapp.action.UserAction。UserAction繼承了 BaseAction。BaseAction也是系統(tǒng)中幾乎所有Action類的父類,它繼承自Struts提供的DispatchAction,并提供 了控制層通用的方法。

    2. Action
    Action是用戶請(qǐng)求和業(yè)務(wù)邏輯之間的橋梁,每個(gè)Action充當(dāng)客戶的一項(xiàng)業(yè)務(wù)代理。主要完成以下任務(wù):
        1. 接收用戶請(qǐng)求。
        2. 根據(jù)用戶請(qǐng)求,調(diào)用合適的模型組件來執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。
        3. 獲取業(yè)務(wù)邏輯執(zhí)行結(jié)果
        4. 根據(jù)當(dāng)前狀態(tài)以及業(yè)務(wù)邏輯執(zhí)行結(jié)果,選擇合適的視圖組件返回給用戶。

    3. DispatchAction
        org.apache.struts.actions.DispatchAction是org.apache.struts.action.Action的子類。
        Action的execute()方法是調(diào)用模型的業(yè)務(wù)方法,完成用戶請(qǐng)求的業(yè)務(wù)邏輯,然后根據(jù)執(zhí)行結(jié)果把請(qǐng)求轉(zhuǎn)發(fā)給其它合適的Web組件。通常,在一個(gè)Action類中只能完成一種業(yè)務(wù)操作(通過execute()方法)。
        DispatchAction允許用戶將完成一個(gè)業(yè)務(wù)邏輯所需要的連續(xù)動(dòng)作和相關(guān)動(dòng)作集中于一個(gè)Action類中。無須覆蓋execute()方法,而是可以創(chuàng)建一些實(shí)現(xiàn)實(shí)際業(yè)務(wù)操作的方法,用戶通過method請(qǐng)求參數(shù)指定所需要使用的方法。

    4. BaseAction
        BaseAction中實(shí)現(xiàn)了系統(tǒng)中Action子類需要用到的通用方法,主要有:
        1. public Object getBean(String name):通過讀取Spring的applicationContext-service.xml配置文件來創(chuàng)建實(shí)例從而實(shí)現(xiàn)“依賴注入”的方法。
        2. public ActionMessages getMessages(HttpServletRequest request):初始化Struts的ActionMessages,并返回。
        3. protected Object convert(Object o) :POJO與FormBean之間的轉(zhuǎn)換方法。
        4. execute():置換了原始的execute()方法。作用是根據(jù)請(qǐng)求的url尋找相關(guān)的業(yè)務(wù)方法(沒有method請(qǐng)求參數(shù)時(shí))。例如請(qǐng)求的頁(yè)面是editUser.html,則執(zhí)行edit()方法。
        5. protected ActionForm getActionForm(ActionMapping mapping, HttpServletRequest request):在mapping范圍內(nèi)得到一個(gè)Action FormBean。
        6. protected User getUser(HttpSession session) :從Session中拿到當(dāng)前登錄用戶信息。
        7. protected void updateFormBean(ActionMapping mapping, HttpServletRequest request, ActionForm form):在指定的范圍內(nèi)更新當(dāng)前Action 所對(duì)應(yīng)的Form Bean對(duì)象。
        8. protected void removeFormBean(ActionMapping mapping, HttpServletRequest request):去除無用的Form Bean。 

    5. UserAction
        UserAction是用戶數(shù)據(jù)管理的控制器,提供了對(duì)用戶數(shù)據(jù)的添加、修改、刪除、查詢等操作的控制,其包含的業(yè)務(wù)方法有:
        1. add():進(jìn)入添加用戶頁(yè)面。
        2. cancel():當(dāng)用戶在表單中點(diǎn)擊“取消”按鈕時(shí),執(zhí)行該方法。如果用戶是通過用戶列表進(jìn)入該表單,即當(dāng)前用于擁有管理其它用戶的權(quán)限,返回到用戶列表,否則返回到主頁(yè)面。
        3. delete():根據(jù)請(qǐng)求的用戶ID調(diào)用業(yè)務(wù)層的removeUser ()方法刪除相應(yīng)的記錄,返回到用戶列表。
        4. edit():首先校驗(yàn)用戶請(qǐng)求的URL是否為editProfile.html,若是,表示當(dāng)前登錄用戶要查看自己的信息,此時(shí)請(qǐng)求路徑中不應(yīng)該 含有用戶ID(用戶ID從Session中取得)或用于標(biāo)識(shí)請(qǐng)求是通過用戶列表的from參數(shù),如果含有這兩個(gè)參數(shù),發(fā)出“無權(quán)限”的錯(cuò)誤信息。若不是, 表示當(dāng)前用戶是通過用戶列表進(jìn)行請(qǐng)求。根據(jù)請(qǐng)求的用戶ID調(diào)用業(yè)務(wù)層的getUser ()方法取得相應(yīng)的記錄。更新相應(yīng)的FormBean。
        5. save():當(dāng)需要要添加或修改用戶信息時(shí),執(zhí)行該方法。首先校驗(yàn)請(qǐng)求參數(shù)中是否有“encryptPass”并值為“true”,若是,表示密 碼需要加密,隨即將密碼加密。然后調(diào)用業(yè)務(wù)層的getRole ()方法將提交的用戶權(quán)限持久化。調(diào)用業(yè)務(wù)層的saveUser ()方法,保存用戶信息。如果用戶編輯的是自己的信息,更新Session中的當(dāng)前登錄用戶信息。如果用戶在登錄時(shí)選擇了“記住我”,更新保存的 Cookie。如果用戶編輯的是其它用戶的信息,根據(jù)version判斷是新添數(shù)據(jù)還是修改數(shù)據(jù),在ActionMessages中存儲(chǔ)不同的消息,返回 到添加/修改用戶信息頁(yè)面。若是新添數(shù)據(jù),調(diào)用sendNewUserEmail()給新用戶發(fā)送一封Email。
        6. search():具有管理權(quán)限的用戶進(jìn)入用戶列表時(shí)執(zhí)行該方法。調(diào)用業(yè)務(wù)層的getUsers ()方法,取得包含所有用戶信息的List。返回到用戶列表頁(yè)面。
        7. unspecified():如果請(qǐng)求的url沒有包含method參數(shù),通過BaseAction的execute()方法也找不到指定的方法時(shí),執(zhí)行該方法。在該方法中轉(zhuǎn)到search()方法。
        以上是很多Action需要用到的基本的方法。
        8. sendNewUserEmail():根據(jù)FormBean中的內(nèi)容給用戶發(fā)送一封Email。
        9. checkForCookieLogin():如果用戶是通過Cookie登錄(用戶在登錄時(shí)選擇了“記住我”),發(fā)出一個(gè)消息警告用戶不能修改密碼。

    posted on 2007-06-18 18:11 chenguo 閱讀(221) 評(píng)論(0)  編輯  收藏 所屬分類: J2ee Dev

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    留言簿

    隨筆分類(1)

    文章分類(52)

    好友 小山的博客

    最新隨筆

    最新評(píng)論

    主站蜘蛛池模板: 亚洲欧洲自拍拍偷午夜色无码| 国产精品偷伦视频免费观看了| 久久亚洲精品中文字幕无码| 国产精品免费_区二区三区观看| 麻花传媒剧在线mv免费观看| 国产精品成人69XXX免费视频| 亚洲性无码AV中文字幕| 亚洲高清日韩精品第一区| 中文字幕精品亚洲无线码二区 | 亚洲国产精品尤物yw在线| 99久久免费精品国产72精品九九| 1000部拍拍拍18勿入免费视频下载 | 成人精品综合免费视频| 亚洲一区二区观看播放| 亚洲国产日韩综合久久精品| 久久精品国产亚洲av麻豆色欲| 亚洲三区在线观看无套内射| 国产亚洲情侣一区二区无| 免费播放特黄特色毛片| 国产极品粉嫩泬免费观看| 午夜寂寞在线一级观看免费| 皇色在线视频免费网站| 国产精品色拉拉免费看| 亚洲一级毛片免费观看| 51在线视频免费观看视频| 91精品国产免费入口| 三年片在线观看免费观看大全一 | 亚洲老妈激情一区二区三区| 亚洲男人在线无码视频| 亚洲欧洲一区二区三区| 亚洲国产精品激情在线观看| 亚洲成AⅤ人影院在线观看| 亚洲国产人成中文幕一级二级| 亚洲AV无码一区二三区 | 一级毛片免费不卡| 人碰人碰人成人免费视频| 一区二区三区免费精品视频| 二级毛片免费观看全程| 99视频免费在线观看| 免费国产99久久久香蕉| 中文字幕在线免费观看|