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

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

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

    AppFuse學習筆記-控制層

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

        AppFuse實現的最主要的功能是對用戶的管理。下面就以對用戶的管理來說明一下AppFuse控制器的實現。

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

    2. Action
    Action是用戶請求和業務邏輯之間的橋梁,每個Action充當客戶的一項業務代理。主要完成以下任務:
        1. 接收用戶請求。
        2. 根據用戶請求,調用合適的模型組件來執行相應的業務邏輯。
        3. 獲取業務邏輯執行結果
        4. 根據當前狀態以及業務邏輯執行結果,選擇合適的視圖組件返回給用戶。

    3. DispatchAction
        org.apache.struts.actions.DispatchAction是org.apache.struts.action.Action的子類。
        Action的execute()方法是調用模型的業務方法,完成用戶請求的業務邏輯,然后根據執行結果把請求轉發給其它合適的Web組件。通常,在一個Action類中只能完成一種業務操作(通過execute()方法)。
        DispatchAction允許用戶將完成一個業務邏輯所需要的連續動作和相關動作集中于一個Action類中。無須覆蓋execute()方法,而是可以創建一些實現實際業務操作的方法,用戶通過method請求參數指定所需要使用的方法。

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

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

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

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

    導航

    統計

    留言簿

    隨筆分類(1)

    文章分類(52)

    好友 小山的博客

    最新隨筆

    最新評論

    主站蜘蛛池模板: 日本特黄特色免费大片| 国产91免费在线观看| 亚洲AⅤ永久无码精品AA| 亚洲一级特黄特黄的大片| 18女人腿打开无遮掩免费| 亚洲黄色网址大全| 亚洲毛片免费视频| 亚洲欧洲日韩国产| 久久天天躁狠狠躁夜夜免费观看| 亚洲视频一区网站| 日韩毛片免费无码无毒视频观看| 亚洲卡一卡二卡乱码新区| 97在线观免费视频观看 | 亚洲好看的理论片电影| 久久精品私人影院免费看| 亚洲bt加勒比一区二区| 最近中文字幕大全中文字幕免费 | 亚洲1234区乱码| 嫩草影院免费观看| 老妇激情毛片免费| 亚洲色欲色欲www在线丝| 无码精品国产一区二区三区免费| 亚洲一区二区电影| 成熟女人特级毛片www免费| 男人的天堂av亚洲一区2区| 亚洲精品97久久中文字幕无码| 精品国产污污免费网站入口| 亚洲午夜久久影院| 香蕉视频在线观看免费国产婷婷| 激情吃奶吻胸免费视频xxxx| 亚洲av中文无码乱人伦在线r▽| 曰批全过程免费视频播放网站| 亚洲av无码无线在线观看| 亚洲伊人久久精品影院| 18禁男女爽爽爽午夜网站免费| 爱情岛亚洲论坛在线观看| 久久精品亚洲视频| 日韩成人免费在线| 亚洲精品免费视频| 黄床大片30分钟免费看| 日韩精品亚洲人成在线观看 |