程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> STRUTS 入門教學(2)

STRUTS 入門教學(2)

編輯:JAVA編程入門知識
  STRUTS 入門教學(2)
  
   2. 創建Model組件
   2.1 概述
   你用到的應用程序的需求文檔很可能集中於創建用戶界面。然而你應該保證每個提交的請求所需要的處理也要被清楚的定義。通常說來,Model 組件的開發者集中於創建支持所有功能需求的JavaBeans類。一個非凡應用要求的beans的精確特性依靠於具體需求變化會非常的大,但是它們通常可以分成下面討論的幾種類型。然而,首先對“范圍”概念做一個簡短的回顧是有用的,因為它與beans有關。
   2.2 JavaBeans和范圍
   在一個基於web的應用程序中,JavaBeans可以被保存在(並從中訪問)一些不同“屬性”的集合中。每一個集合都有集合生存期和所保存的beans可見度的不同的規則。總的說來,定義生存期和可見度的這些規則被叫做這些beans的 范圍 。jsp規范中使用以下術語定義可選的范圍(在圓括號中定義servlet API中的等價物):
   page - 在一個單獨的JSP頁面中可見的Beans,生存期限於當前請求。(service()方法中的局部變量) request - 在一個單獨的JSP頁面中可見的Beans,也包括所有包含於這個頁面或從這個頁面重定向到的頁面或servlet。(Request屬性)
   session - 參與一個特定的用戶session的所有的JSP和servlet都可見的Beans,跨越一個或多個請求。(Session屬性)
   application - 一個web應用程序的所有JSP頁面和servlet都可見的Beans。(Servlet context屬性)
   記住同一個web應用程序的JSP頁面和servlets共享同樣一組bean集合是很重要的。例如,一個bean作為一個request屬性保存在一個servlet中,就象這樣:
   代碼:
  
   MyCart mycart = new MyCart(...);
   request.setAttribute("cart", mycart);
  
  
   將立即被這個servlet重定向到的一個JSP頁面使用一個標准的行為標記看到,就象這樣:
   代碼:
  
   <jsp:useBean id="cart" scope="request"
   class="com.mycompany.MyApp.MyCart"/>
  
  
   2.3 ActionForm Beans
   Struts框架通常假定你已經為每一個你的應用程序中請求的輸入創建了一個 ActionForm bean(即一個實現了 ActionForm 接口的類)。假如你在你的 ActionMapping 配置文件中定義了這樣的beans(見“創建Controller組件”),Struts的controller servlet在調用適當的 Action 方法前將自動為你執行如下的服務:
   用適當的要害字檢查用戶的session中是否有適當的類的bean的一個實例。
   假如沒有這樣的session范圍的bean,自動建立一個新的bean並添加到用戶的session中。
   對每個名字對應於bean中的一個屬性的請求參數,調用相應的set方法。這個操作類似於當你以通配符“*”選擇所有屬性使用標准的JSP行為標記 代碼:
   <jsp:setProperty>
  
   更新的ActionForm bean在被調用時將被傳遞給Acton類的perform()方法,以使這些值能夠立即生效。
   當你在寫你的ActionForm beans時,記住以下的原則:
   ActionForm 接口本身不需要非凡的實現方法。它是用來標識這些特定的beans在整個體系結構中的作用。典型情況下,一個ActionForm bean只包括屬性的get方法和set方法,沒有商業邏輯。
   通常在一個ActionForm bean中只有很少的輸入驗證邏輯。這樣的beans存在的主要理由是保存用戶為相關的表單所輸入的大部分近期值 -- 甚至在錯誤被檢測到時 -- 這樣同樣的頁面可以被重建,伴隨有一組出錯信息,這樣用戶僅僅需要糾正錯誤的字段。用戶輸入的驗證應該在 Action 類中執行(假如是很簡單的話),或者在適當的商業邏輯beans中執行。
   為每個表單中出現的字段定義一個屬性(用相關的getXxx()和setXxx()方法)。字段名和屬性名必須按照JavaBeans的約定相匹配。例如,一個名為 username 的輸入字段將引起 setUsername() 方法被調用。
   你應該注重一個“表單”在這裡討論時的意義並不必須對應於用戶界面中的一個單獨的JSP頁面。在很多應用程序中一個“表單”(從用戶的觀點)延伸至多個頁面也是很平常的。想想看,例如,通常在安裝新的應用程序時使用的導航安裝程序的用戶界面。Struts鼓勵你定義一個包含所有字段屬性的單獨的ActionForm bean。不管字段實際上是顯示在哪個頁面上。同樣的,同一表單的不同的頁面應該提交到相同的Action類。假如你遵照這個建議,在大多數情況下,頁面設計者可以重新組織不同頁面中的字段而不需要改變處理邏輯。
   2.4 系統狀態Beans
   系統的實際狀態通常表示為一組一個或多個的JavaBeans類,其屬性定義當前狀態。例如,一個購物車系統包括一個表示購物車的bean,這個bean為每個單獨的購物者維護,這個bean中包括(在其它事物之中)一組購物者當前選擇購買的項目。分別地,系統也包括保存用戶信息(包括他們的信用卡和送貨地址)、可獲得項目的目錄和它們當前庫存水平的不同的beans。
   對於小規模的系統,或者對於不需要長時間保存的狀態信息,一組系統狀態beans可以包含所有系統曾經經歷的特定細節的信息。或者經常是,系統狀態beans表示永久保存在一些外部數據庫中的信息(例如CustomerBean對象對應於表 CUSTOMERS 中的特定的一行),在需要時從服務器的內存中創建或清除。在大規模應用程序中,Entity EJBs也用於這種用途。
  
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved