亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Struts框架之構建Model組件

2019-11-17 06:19:34
字體:
來源:轉載
供稿:網友

  Model就是在對用戶請求的整個控制過程中,真正處理用戶請求并保存處理結果的對象,在整個過程中,我們一般利用javaBean來把一些信息保存起來以便在各個對象之間傳遞。因為在框架中,Model對象是真處理商業邏輯功能的對象,因此也就是框架中應用需求實現相關性最大的的部分。在Struts的實現里,Model的具體表現形式就是ActionForm對象和與其對應的Action對象了。對用戶提交表單的數據進行校驗,甚至對數據進行預處理都能在ActionForm中完成。通常的應用中,一般是一個Model對象和一個請求頁面對應的關系,但也可以一個Model對象對應多個頁面請求。假如struts-config.xml配置文件沒有指定一個Model對象對應的Action,那么控制器將直接把(通過Model對象完成數據封裝的)請求轉到一個View對象。下圖表示的是Model layer 的層次結構。
  
  在Struts中Model以一個或多個java bean的形式存在。這些bean分為三類:Action Form、Action、JavaBean or EJB。Action Form通常稱之為FormBean,封裝了來自于Client的用戶請求信息,如表單信息。Action通常稱之為ActionBean,獲取從ActionSevlet傳來的FormBean,取出FormBean中的相關信息,并做出相關的處理,一般是調用JavaBean或EJB等。
  
  許多需求文檔將構建Web應用的焦點集中在視圖上。我們必須確保每一個提交的請求都在模型視圖中都已經被定義。通常,開發者在模型組件中關注于開發JavaBean類以實現所有的功能需求。 應用應該準確的使用哪些beans,根據其需求不同而差異巨大,但是,在經過區分后通常都能分被為若干個類別。
  
  創建Model 組件
  1、JavaBeans
  
  在一個Web基礎的應用中,能使用許多不同的"屬性(attributes)"集合來保存(和訪問)JavaBeans。 每個集合都有它自己不同的生命周期和beans存儲在哪里的可見度。 同時,beans通過 作用域 來定義生命周期和可見度規則。 在JavaServer Pages (jsp)規范中定義了作用域選擇使用以下幾項(在括號中是servlet API中的等價概念定義)。
  
  page :Beans只會在一個JSP頁中可見,只在當前的請求周期中存在。 (在 service 方法中的本地變量)
  
  request : Beans只會在一個JSP頁中可見,與page相同或servlet包含本頁,或轉發到本頁。 (Request屬性)
  
  session :Beans能被所有的JSP頁和servlet通過特定的用戶session來使用, 它可以跨越一個或多個請求。 (Session屬性)
  
  application :Beans能被Web應用中的所有JSP頁和servlets來使用。 (Servlet context屬性)
  我們需要記住的是在一個web應用中JSP頁面和servlet會共享bean集合的設置。 例如在一個servlet中將一個bean存儲到attribute中如下:
  
  MyStudy Mystudy = new MyStudy(...);
  request.setAttribute("cart", MyStudy);
  
  在這個servlet將請求轉發給一個JSP頁面后,我們馬上可以使用標準的動作標簽(tag)來看到相應的值:
  
 ?。?jsp:useBean id="cart" scope="request" class="com.mycompany.MyApp.MyStudy"/ >
  
  2、ActionForm Beans
  
  在 actionform beans頻繁地有屬性相當于屬性在我們的model beans的時候,那form beans它們自己應該考慮成為一個控制器組件。 同樣地,他們能在模型和視圖層之間傳遞資料。
  
  Struts框架通常假定我們在我們的應用中已經為輸入定義一個 ActionForm beans(簡而言之,一個擴展自 ActionForm 類的Java類)。 ActionForm beans有時僅僅調用表單beans(form beans)。 這可能會是一個細粒度的對像,它讓每個表單對應一個bean,還有就是一個bean服務于若干個表單甚至全部應用形成粗粒度的情況。
  
  假如在我們的Struts配置文件中定義了bean,Struts的controller servlet在調用適當的 Action 方法前將自動為我們提供如下服務:
  
  使用適當的要害字檢查在用戶適當的作用域(request或session)中是否有適當類的bean的一個實例。
  假如沒有這樣的實例可用,則自動建立一個新的bean實例并將期加入到適當的作用域中(request或session)。
  
  對于每個請求參數通過其名稱來對應到bean的一個屬性(PRoperty)上,并調用相應的setter方法來設置屬性值。 這個方法類似于標準JSP中以以通配符"*"來使用 < jsp:setProperty > 標記。
  更新后的 ActionForm bean被傳遞給 Action 類[ org.apache.struts.Action ] 的 execute 方法, 以使這些值能被我們的系統狀態和業務邏輯bean來使用。
  
  我們應該注重一個"表單(form)"在這里并不是必須對應于用戶界面中一個單獨的JSP頁面。 在很多應用程序中一個"表單"(從用戶的觀點)延伸至多個頁面也是很平常的。 想想看,例如,在新程序的安裝時所使用的導航程序的用戶界面。 Struts鼓勵我們定義一個包含所有字段屬性的單獨的 ActionForm bean, 而不用管這些字段實際顯示于哪個頁面上。同樣的,同一表單的不同頁面應提交到相同的Action類。 假如我們遵照這個建議,在大多數情況下,頁面設計者可以重新組織不同頁面中的字段而不需要改變處理邏輯。
  
  一個小的應用也許只需要一個ActionForm來為所有的輸入表單提供服務。 其它應用可以為每個大的子系統來分別使用一個ActionForm。 還有一些人可能更喜歡為每一個輸入表單或工作流分別使用不同的ActionForm類。 真正如何使用ActionForm完全在于我們,框架自身并不在意的。
  
  ActionForm 接口本身不需要非凡的實現方法。它是用來標識這些特定的beans在整個體系結構中的作用。典型情況下,一個 ActionForm bean只包括屬性的get方法和set方法,沒有商業邏輯。
  
  通常在一個 ActionForm bean中只有很少的輸入驗證邏輯。這樣的beans存在的主要理由是保存用戶為相關的表單所輸入的大部分近期值,這樣同樣的頁面可以被重建,伴隨有一組出錯信息,這樣用戶僅僅需要糾正錯誤的字段。用戶輸入的驗證應該在 Action 類中執行(假如是很簡單的話),或者在適當的商業邏輯beans中執行。
  
  為每個表單中出現的字段定義一個屬性(用相關的getXxx()和setXxx()方法)。字段名和屬性名必須按照JavaBeans的約定相匹配。例如,一個名為 username 的輸入字段將引起 setUsername() 方法被調用。
  
  下面是ActionForm類的具體描述:
  
  ActionForm類
  框架假設用戶在應用程序中為每個表單都創建了一個ActionForm bean,對于每個在struts-config.xml文件中定義的bean,框架在調用Action類的perform()方法之前會進行以下操作:
  
  1、在相關聯的要害字下,它檢查用于適當類的bean實例的用戶會話,假如在會話中沒有可用的bean,它就會自動創建一個新的bean并添加到用戶的會話中。
  
  2、對于請求中每個與bean屬性名稱對應的參數,Action調用相應的設置方法。
  
  3、當Action perform()被調用時,最新的ActionForm bean傳送給它,參數值就可以立即使用了。
  
  ActionForm類擴展org.apache.struts.action.ActionForm類,程序開發人員創建的bean能夠包含額外的屬性,而且ActionServlet可能使用反射(答應從已加載的對象中回收信息)訪問它。
  
  ActionForm類提供了另一種處理錯誤的手段,提供兩個方法:
  
  Public ActionErrors validate(ActionMappin mapping,ServletRequest request)
  Public ActionErrors validate(ActionMappin mapping,HttpServletRequest request)
  
  我們應該在自己的bean里覆蓋validate()方法,并在配置文件里設置<action>元素的validate為true。在ActionServlet調用Action類前,它會調用validate(),假如返回的ActionErrors不是null,則ActinForm會根據錯誤要害字將ActionErrors存儲在請求屬性列表中。
  
  假如返回的不是null,而且長度大于0,則根據錯誤要害字將實例存儲在請求的屬性列表中,然后ActionServlet將響應轉發到配置文件<action>元素的input屬性所指向的目標。
  
  假如需要執行特定的數據有效性檢查,最好在Action類中進行這個操作,而不是在ActionForm類中進行。
  
  方法reset()可將bean的屬性恢復到默認值:
  
  public void reset(ActionMapping mapping,HttpServletRequest request)
  public void reset(ActionMapping mapping,ServletRequest request)
  
  典型的ActionFrom bean只有屬性的設置與讀取方法(getXXX),而沒有實現事務邏輯的方法。只有簡單的輸入檢查邏輯,使用的目的是為了存儲用戶在相關表單中輸入的最新數據,以便可以將同一網頁進行再生,同時提供一組錯誤信息,這樣就可以讓用戶修改不正確的輸入數據。而真正對數據有效性進行檢查的是Action類或適當的事務邏輯bean。
  
  3、系統狀態Beans
  
  系統的實際狀態通常表示為一組一個或多個JavaBean類,其屬性定義了當前的狀態。 例如,在一個購物車系統中,將包括一個表示購物車的bean,這個bean為每個購物者所維護, 它包括了購物者所選擇購買的物品條目。 另外,系統也包括保存用戶信息(包括他們的信用卡和送貨地址)、可獲得的條目和當前庫存水平這些不同的bean。
  
  對于小規模系統,或是對于不需要長時間保存的狀態信息,一組系統狀態bean可以包含 所有系統曾經經歷的特定細節的信息。 或者經常是,系統狀態bean會表示永久保存在一些外部數據庫中的信息(例如 CustomerBean 對象對應于CUSTOMERS表中特定的一行數據), 在需要時從服務器的內存中創建或清除。Entity Enterprise JavaBeans也是用于這種用途的。
  
  4、商業邏輯Beans
  
  我們應該把

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线免费播放| 成人日韩av在线| 91av免费观看91av精品在线| 在线观看精品自拍私拍| 91情侣偷在线精品国产| 国产啪精品视频网站| 国产精品无av码在线观看| 日韩视频亚洲视频| 精品亚洲一区二区三区在线观看| 欧美亚洲午夜视频在线观看| 久久成人精品一区二区三区| 欧美日韩美女视频| 久久久国产一区二区三区| 色先锋久久影院av| 亚洲伊人久久综合| 在线播放亚洲激情| 久久久亚洲影院你懂的| 日本一区二区三区在线播放| 国产午夜精品美女视频明星a级| 96国产粉嫩美女| 精品香蕉在线观看视频一| 韩国三级日本三级少妇99| 欧美精品在线免费播放| 成人欧美一区二区三区在线湿哒哒| 亚洲精品国产福利| 98视频在线噜噜噜国产| 国产在线精品一区免费香蕉| 亚洲 日韩 国产第一| 成人免费观看49www在线观看| 国内久久久精品| 亚洲欧洲偷拍精品| 亚洲激情国产精品| 欧美日韩国产丝袜另类| 中日韩午夜理伦电影免费| 国产一区二区三区视频免费| 久久久久久久久电影| 久久伊人精品一区二区三区| 欧美另类69精品久久久久9999| 精品国偷自产在线视频| 日韩欧美亚洲范冰冰与中字| 亚洲欧美制服综合另类| 91sao在线观看国产| 久久久免费观看| 夜色77av精品影院| 全亚洲最色的网站在线观看| 国产精品一二三在线| 92版电视剧仙鹤神针在线观看| 91久久夜色精品国产网站| 欧美日韩性视频在线| 亚洲美女自拍视频| 国产精品亚洲第一区| 亚洲一区中文字幕| 日韩在线观看网站| 色七七影院综合| 久久999免费视频| 久热99视频在线观看| 国产欧美亚洲视频| 色综合老司机第九色激情| 欧美精品免费在线| 69av视频在线播放| 7777免费精品视频| 久久久久女教师免费一区| 久久久久国产精品www| 国产精品一区二区久久国产| 国产美女主播一区| 欧美人与物videos| 91精品国产91久久久久福利| 日本久久久久久| 精品人伦一区二区三区蜜桃免费| 国产精品视频自在线| 亚洲欧美国产一本综合首页| 日本国产一区二区三区| 日韩精品丝袜在线| 欧美电影《睫毛膏》| 精品欧美激情精品一区| 国产区精品视频| 亚洲一区二区三区成人在线视频精品| 最新国产精品亚洲| 在线精品高清中文字幕| 精品中文字幕视频| 国产成人亚洲精品| 日本亚洲欧美三级| 国产欧美精品xxxx另类| 久久精品国产一区二区三区| 亚洲一区久久久| 欧美韩日一区二区| 日本精品一区二区三区在线播放视频| 77777亚洲午夜久久多人| 亚洲自拍偷拍福利| 国产乱肥老妇国产一区二| 91久久在线视频| 国产91精品高潮白浆喷水| 亚洲一区二区三区视频播放| www日韩欧美| 美日韩精品免费观看视频| 亚洲国产精品久久| 欧美怡红院视频一区二区三区| 日韩成人在线免费观看| 日韩精品在线观| 欧美一二三视频| 中文字幕日韩欧美精品在线观看| 欧美色道久久88综合亚洲精品| 精品国产999| 韩国视频理论视频久久| 久久久久久国产三级电影| 欧美激情视频三区| 亚洲aa中文字幕| 亚洲欧洲自拍偷拍| 久久99精品久久久久久噜噜| 国产精品va在线播放我和闺蜜| 国产国语videosex另类| 97久久精品人搡人人玩| 色综合久久久888| 亚洲色图35p| 国产欧美一区二区| 成人有码视频在线播放| 精品一区二区三区三区| 亚洲国产精品yw在线观看| 国产91ⅴ在线精品免费观看| 韩国视频理论视频久久| 正在播放亚洲1区| 欧美电影院免费观看| 精品高清美女精品国产区| 欧美视频免费在线观看| 中文字幕国内精品| 色午夜这里只有精品| 国产精品视频一区二区高潮| 高清亚洲成在人网站天堂| 国产成+人+综合+亚洲欧美丁香花| 69av在线视频| 欧美激情欧美激情| 中文字幕在线看视频国产欧美| 久久精品国产免费观看| 精品偷拍各种wc美女嘘嘘| 成人免费高清完整版在线观看| 欧美成人精品在线视频| 日韩精品视频在线免费观看| 亚洲人成在线观看| 日韩中文视频免费在线观看| 中文字幕久热精品在线视频| 日韩视频免费观看| 国产日韩精品综合网站| 国产91精品青草社区| 成人国内精品久久久久一区| 91精品国产综合久久久久久久久| 亚洲人成在线电影| 国产suv精品一区二区三区88区| **欧美日韩vr在线| 在线视频欧美日韩| 午夜精品一区二区三区在线视| 亚洲人成自拍网站| 国产69精品99久久久久久宅男| 欧美xxxx做受欧美| 国产精品美女久久| 在线播放国产一区二区三区| 国产主播喷水一区二区| 亚洲国产精品网站| 欧美午夜片欧美片在线观看| 性色av一区二区三区免费| 国产成人精品优优av| 久久精品亚洲国产| 国产精品女人久久久久久| 色妞在线综合亚洲欧美| 91精品久久久久久久久久久|