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

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

Struts 用戶指南

2019-11-18 12:56:05
字體:
來源:轉載
供稿:網友

  1. 介紹
  1.1 Model-View-Controller (MVC) 設計模式
  FIXME - 需要一個對該模式一般性的介紹。(譯注:可以參考機械工業出版社的《設計模式》。)
  1.2 將MVC概念映射到Struts組件
  Struts 的體系結構實現了Model-View-Controller設計模式的概念,它將這些概念映射到web應用程序的組件和概念中,如下圖所示: Struts 用戶指南
點擊查看大圖


  這一體系結構中每個主要的組件都將在下面做具體的討論。
  1.3 Model: 系統狀態和商業邏輯javaBeans
  基于MVC的系統中的 Model 部分可以細分為兩個概念 -- 系統的內部狀態, 能夠改變狀態的行為。用語法術語來說,我們可以把狀態信息當作名詞(事物),把行為當作動詞(事物狀態的改變)。
  通常說來,你的應用程序將系統內部的狀態表示為一組一個或多個的JavaBeans,使用屬性(PRoperties)來表示狀態的細節。依靠于你的應用程序的復雜度,這些beans可以是自包含的(以某種方式知道怎樣永久地保存它們的狀態信息),或者可以是正面的(facades),知道當被請求時怎樣從外部數據源(例如數據庫)中取得信息。Entity EJBs通常也用來表示內部狀態。
  大型應用程序經常將系統可能的商業邏輯行為表示為可以被維護狀態信息的beans調用的方法。舉個例子,你有一個為每個當前用戶保存在session中的購物車bean,里面是表示當前用戶決定購買物品的屬性。這個bean有一個checkOut()方法用來驗證用戶的信用卡,將定單發給庫房以選擇貨品和出貨。別的系統分別地表示同樣的行為,或許使用Session EJBs。
  在一些小型應用程序中,同樣的行為又可能嵌入到作為Controller一部分的 Action 類中。這在邏輯非常簡單或者并不想要在其它環境中重用這些商業邏輯時是恰當的。Struts框架支持所有這些方法,但建議將商業邏輯(“做什么”)和 Action 類(“決定做什么”)分離開。
  1.4 View: jsp頁面和表示組件
  基于Struts的應用程序中的 View 部分通常使用JSP技術來構建。JSP頁面包含稱為“模版文本”的靜態Html(或xml)文本,加上插入的基于對非凡行為標記解釋的動態內容。JSP環境包括了其用途由JSP規范來描述的一套標準的行為標記,例如 <jsp:useBean> 。另外,還有一個用來定義你自己標記的標準機制,這些自定義的標記組織在“定制標記庫”中。
  Struts包括了一個廣闊的便于創建用戶界面,并且充分國際化的定制標記庫,與作為系統 Model 部分一部分的ActionForm beans美妙地相互配合。這些標記的使用將在后面做具體討論。
  除了JSP頁面和其包含的行為及定制標記,商業對象經常需要能夠基于它們在被請求時的當前狀態將自己處理成HTML(或XML)。從這些對象處理過的輸出可以很輕易地使用 <jsp:include> 標準行為標記包括在結果的JSP頁面中。
  1.5 Controller: ActionServlet和ActionMapping
  應用程序的 Controller 部分集中于從客戶端接收請求(典型情況下是一個運行瀏覽器的用戶),決定執行什么商業邏輯功能,然后將產生下一步用戶界面的責任委派給一個適當的View組件。在Struts中,controller的基本組件是一個 ActionServlet 類的servlet。這個servlet通過定義一組映射(由Java接口 ActionMapping 描述)來配置。每個映射定義一個與所請求的URI相匹配的路徑和一個 Action 類(一個實現 Action 接口的類)完整的類名,這個類負責執行預期的商業邏輯,然后將控制分派給適當的View組件來創建響應。
  Struts也支持使用包含有運行框架所必需的標準屬性之外的附加屬性的 ActionMapping 類的能力。這答應你保存特定于你的應用程序的附加信息,同時仍可利用框架其余的特性。另外,Struts答應你定義控制將重定向到的邏輯名,這樣一個行為方法可以請求“主菜單”頁面(舉例),而不需要知道相應的JSP頁面的實際名字是什么。這個功能極大地幫助你分離控制邏輯(下一步做什么)和顯示邏輯(相應的頁面的名稱是什么)。
  2. 創建Model組件
  2.1 概述
  你用到的應用程序的需求文檔很可能集中于創建用戶界面。然而你應該保證每個提交的請求所需要的處理也要被清楚的定義。通常說來,Model 組件的開發者集中于創建支持所有功能需求的JavaBeans類。一個非凡應用要求的beans的精確特性依靠于具體需求變化會非常的大,但是它們通常可以分成下面討論的幾種類型。然而,首先對“范圍”概念做一個簡短的回顧是有用的,因為它與beans有關。
  2.2 JavaBeans和范圍
  在一個基于web的應用程序中,JavaBeans可以被保存在(并從中訪問)一些不同“屬性”的集合中。每一個集合都有集合生存期和所保存的beans可見度的不同的規則??偟恼f來,定義生存期和可見度的這些規則被叫做這些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頁面使用一個標準的行為標記看到,就象這樣:
 ?。糺sp: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可以包含所有系統曾經經歷的特定細節的信息?;蛘呓洺J牵到y狀態beans表示永久保存在一些外部數據庫中的信息(例如CustomerBean對象對應于表 CUSTOMERS 中的特定的一行),在需要時從服務器的內存中創建或清除。在大規模應用程序中,Entity EJBs也用于這種用途。
  2.5 商業邏輯Beans
  你應該把你的應用程序中的功能邏輯封裝成對為此目的設計的JavaBeans的方法調用。這些方法可以是用于系統狀態beans的相同的類的一部分,或者可以是在專門執行商業邏輯的獨立的類中。在后一種情況下,你通常需要將系統狀態beans傳遞給這些方法作為參數處理。
  為了代碼最大的可重用性,商業邏輯beans應該被設計和實現為它們不知道自己被執行于web應用環境中。假如你發現在你的bean中你必須import一個 javax.servlet.* 類,你就把這個商業邏輯捆綁在了web應用環境中。考慮重新組織事物使你的 Action 類(Controller任務的一部分,在下面描述)翻譯

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亲爱的老师9免费观看全集电视剧| 91精品久久久久久综合乱菊| 性色av香蕉一区二区| 亚洲午夜小视频| 日韩小视频网址| 久久精品一本久久99精品| 欧美成人免费视频| 欧美巨猛xxxx猛交黑人97人| 久久青草精品视频免费观看| 亚洲成色www8888| 久久久久国产视频| 午夜精品久久久久久久99黑人| 91精品国产免费久久久久久| 精品国产999| 国产精品第七十二页| 欧美孕妇性xx| 国产日韩中文字幕在线| 成人黄色网免费| 日韩女在线观看| 欧美日韩国产在线看| 久久人人爽国产| 精品国模在线视频| 日韩av网站大全| 亚洲电影免费观看高清| 日韩成人在线免费观看| 国产91在线高潮白浆在线观看| 欧美视频精品一区| 九色精品美女在线| 亚洲欧美日本另类| 中文字幕日韩在线视频| 97热精品视频官网| 久久久久久久久国产精品| 国产精品成人av性教育| 亚洲跨种族黑人xxx| 久久久av网站| 少妇高潮久久久久久潘金莲| 欧美电影在线观看完整版| 国产精品久久久久久亚洲影视| 亚洲激情小视频| 久久久久久久久久久网站| 欧美午夜丰满在线18影院| 日本一区二区三区在线播放| 亚洲欧美综合图区| 国产精品91久久久久久| 亚洲精品一区二区三区不| 国产人妖伪娘一区91| 亚洲人午夜色婷婷| 97免费中文视频在线观看| 日本在线精品视频| 中文字幕亚洲欧美一区二区三区| 神马国产精品影院av| 国产成人精品综合久久久| 国模私拍一区二区三区| 2019亚洲日韩新视频| 另类美女黄大片| 国产一区二区日韩精品欧美精品| 亚洲精品中文字幕女同| 亚洲免费高清视频| 91亚洲国产成人久久精品网站| 久久久国产精品x99av| 国产精品一区二区在线| 91精品国产一区| 亚洲天堂网在线观看| 亚洲免费电影在线观看| 亚洲精品视频在线观看视频| 清纯唯美亚洲激情| 黑人精品xxx一区| 国产一区二区三区毛片| 欧美日韩成人在线视频| 91中文在线视频| 97色伦亚洲国产| 亚洲大胆人体av| 日韩综合中文字幕| 欧美视频二区36p| 日韩欧美在线免费观看| 国产精品色婷婷视频| 欧美国产日产韩国视频| 日韩av免费在线看| 欧美放荡办公室videos4k| 中文字幕日韩精品在线| 国语自产精品视频在线看抢先版图片| 国产精品第1页| 成人中心免费视频| 91精品视频在线| 最新的欧美黄色| 欧美老女人在线视频| 久久全球大尺度高清视频| 亚洲久久久久久久久久| 亚洲精品视频在线观看视频| 成人伊人精品色xxxx视频| 国产精品美女www爽爽爽视频| 亚洲男人天堂手机在线| 91在线视频一区| 北条麻妃一区二区三区中文字幕| 亚洲精品国产精品国自产观看浪潮| 国产综合视频在线观看| 国产综合福利在线| 久久久亚洲福利精品午夜| 韩国国内大量揄拍精品视频| 国产一区二区美女视频| 在线播放精品一区二区三区| 成人免费观看49www在线观看| 欧美国产高跟鞋裸体秀xxxhd| 国产一区二区三区视频免费| 欧美激情xxxx性bbbb| 亚洲视频777| 日韩视频免费在线观看| 少妇高潮久久久久久潘金莲| 国产欧美精品一区二区三区介绍| 国产婷婷色综合av蜜臀av| 91精品久久久久久久久不口人| 亚洲美女福利视频网站| 日韩极品精品视频免费观看| 青青草原成人在线视频| 亚洲美腿欧美激情另类| 亚洲精品国产精品国自产在线| 国产免费一区视频观看免费| 欧美尺度大的性做爰视频| 欧美精品在线极品| 国产91在线播放精品91| 中文字幕日韩专区| 欧美激情一二三| 中文字幕在线精品| 国产精品xxxxx| 久久久久99精品久久久久| 久久男人资源视频| 69久久夜色精品国产69乱青草| 国产精品狼人色视频一区| 国产91色在线|免| 中文字幕日韩有码| 全球成人中文在线| 亚洲精品美女在线观看播放| 国产91色在线播放| 国产91精品最新在线播放| 国产日韩中文字幕在线| 性亚洲最疯狂xxxx高清| 最近2019年日本中文免费字幕| 久久精品国产视频| 777午夜精品福利在线观看| 亚洲成人激情在线观看| 欧美亚洲第一区| 亚洲国产三级网| 亚洲精品一区二区三区不| 92版电视剧仙鹤神针在线观看| 91福利视频在线观看| 久久精品国产2020观看福利| 欧美精品在线免费观看| 成人a在线观看| 日韩电影免费在线观看中文字幕| 亚洲欧美日韩图片| 福利微拍一区二区| 午夜精品久久久久久久99热浪潮| 国产91av在线| 97精品国产91久久久久久| 这里只有精品视频| 中文字幕日韩在线播放| 国产在线视频91| 日韩欧美高清在线视频| 中文字幕免费精品一区高清| 欧美日韩国产黄| 国产精品久久久久久久久久小说| 7m精品福利视频导航| 欧美天天综合色影久久精品| 亚洲区中文字幕|