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

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

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

    VIRGIN FOREST OF JAVA
    不要埋頭苦干,要學習,學習,再學習。。。。。
    powered by R.Zeus
    1. 簡介
    1.0 先決條件

    這份用戶指南是為那些活躍的Web開發者編寫的,假設讀者已經了解java Web application是如何工作的。在開始之前,您應該已經掌握下列基本核心技術。

    如果您在其他平臺上開發過web applications,您也許可以繼續。在需要的時候參考以上的資料。他們幾乎是所有Java web開發項目需要用到的核心技術。

    1.1 前言 :回到從前?。ㄒ彩荢truts的簡史)

    當java servlets被發明出來的時候,很多程序員迅速意識到這是一個好東西。它比標準CGI快速強大,可以移植,并且幾乎可以無限擴展。

    但是無窮無盡的編寫 println()語句來吧HTML送到瀏覽器是浪費時間并且容易造成問題。答案就是JavaServer Pages,它把編寫servlet的任務倒了個個兒。現在開發者可以很容易的把HTML和Java代碼混合起來,并且仍然擁有servlet的所有好處。只有天空才會限制(我們)!

    Java web程序很快變成了以JSP為中心的。關于(JSP)本身并不是一件壞事,但是它并沒有解決流程控制和web application的其他一些問題

    顯然,我們需要另一個模型...

    很多聰明的程序員認識到JSP和servlets可以被一起使用來構造web程序。Servlets可以用來輔助流程控制,JSP主要關注于實現那些凌亂的HTML.在這樣的過程中,一起使用JSP和servlet開始被稱為Model 2.(同時只使用JSP被稱為Model 1)。

    當然,天底下沒有新東西...很快很多人指出JSP的Model 2 遵循SmallTalk的經典的Model-View-controller設計模式?,F在術語Model 2和MVC可以互相替代。

    Struts工程于2000年5月由Craig R. McClanahan開始動工,來為Java社區實現一個標準的MVC框架。2001年6月,Struts 1.0發布了。從此,Model 2開發開始變得不同。

    1.2 Model-View-Controller ('MVC') 設計模式

    在MVC設計模式中,程序流程由一個的Controller(控制器)居中斡旋。Controller委派請求--在我們的情形中,HTTP請求--到合適的handle(處理程序)去。Handle和Model(模型)相聯系,每一個handle的作用就是成為在請求和Model之間的適配器(adaptor有一個意思是電源插頭--譯者注)。Model 代表或者封裝了一個程序的商業邏輯或者狀態。通??刂朴蒀ontroller重新轉移到對應的View去。這個轉移由一系列的映射決定,一般從數據庫或者配置文件中取得。這樣就為View和Model提供了一個松散的聯系,編寫和維護程序變得顯而易見的的容易。

    1.3 Struts 框架縱覽

    忠實的和Model-View-Controller設計模式對應,Struts程序有三個主要的部件:一個Servlet Controller,它由Struts本身提供,JSP 頁面("view"),還有程序的商業邏輯("model").我們來看看他們是怎么組合到一起的。

    Struts的Controller servlet把HTTP 請求打包并傳送到框架中的其他對象,包括JavaServer Pages和由Struts開發者編寫的org.apache.struts.action.Action的子類。當(系統)初始化的時候,Controller 解釋一個配置資源文件。這個文件定義了(和其他配置一起)這個程序的org.apache.struts.action.ActionMapping。Controller用這些映射來把HTTP 請求轉換為程序的actions(動作)。

    一個ActionMapping通常會指出:

    • 一個request請求的路徑 (簡稱 "URI"),
    • 用于處理請求的object type(對象) (Action 的子類),
    • 和其他一些必要的屬性。

    Action 對象可以處理請求并響應客戶端(通常是一個web browser),或者指出流程應該被指向另一個地方。例如,如果登錄成功,一個login Action可能希望把流程轉移到主菜單。

    Action對象可以操作程序的Controller servlet,所以可以操作這個Controller的方法。當轉發控制的時候,一個Action對象可以不直接的轉發一個或多個共享對象,包括JavaBeans,這個過程是通過把它們放到Java servlet共享的某一個標準collection對象里去。

    Action對象可以創建一個購物車Bean,在購物車里面加上一個條目,把這個bean放到session 結構里去,然后把控制轉發到另一個映射。那個映射會使用一個JavaServer Page來顯示用戶的購物車里的內容。因為每個用戶都有他自己的session,他們也會有自己的購物車。在一個Struts程序里,大部分商業邏輯都可以由JavaBeans表示。一個Action可以調用一個JavaBean的屬性,不需要知道她實際上是如何工作的。這封裝了 商業邏輯,所以Action可以專注于錯誤處理和如何轉發控制。

    JavaBeans也可以用來管理輸入的Forms.設計一個web程序的主要問題是得到并檢查用戶在請求中的輸入。通過Struts,你可以 定義你自己的Form Bean 類集合,他們都是org.apache.struts.action.ActionForm的子類,并很容易的把用戶form(這里是指HTTP form--譯者注)輸入的內容放到這些Form bean里去。這個bean被存放到一個標準的共享上下文集合里去,所以另一個對象可以使用它,特別是指一個Action對象。 (我的理解,使用ActionForm是因為這樣可以標準化的檢查Form里的值,也可以標準化的調用Action--譯者注。)

    Form bean可以被一個JSP使用來從用戶收集數據...通過一個Action 對象來檢查用戶輸入的數據...然后再通過JSP來重新顯示form的字段。如果檢查錯誤,Struts由一個公用的機制來提交和顯示錯誤信息。

    Struts 的Form bean在配置文件中聲明,在一個Java文件中被定義,并且通過一個通用的屬性名字來連接到一個ActionMapping去。當一個請求 調用一個需要FormBean 的Action時候,Controller servlet要么從輸入中獲取form bean,要么自己構造一個form bean,把它傳遞到Action對象去。Action 對象可以在顯示之前檢查form bean的內容,也可以為要在form里顯示的內容排隊。準備好之后,Action對象返回控制權并轉移到它的輸入葉面去。controller就可以響應HTTP請求,并重定向到JavaServer Page去。

    Struts 框架包括自定義的Tag來自動從一個formBean填充子段。JavaServer Page唯一需要知道的是確切的字段名和下一步提交form到何處。一些部件例如被Action排隊的消息可以在一個自定義tag就被輸 出。也可以定制其他為程序定制的tag來從jsp中隱藏實現細節。

    在Struts框架中的自定義tag被設計為使用Java平臺內置的國際化特性。所有的字段名和消息都可以從消息資源中獲取,并且Java可以自動為一個客戶端的國家和語言提供想對應的資源。為了提供另一種語言的支持,只需簡單的的增加另一個資源文件。

    除了國際化之外,這個進步的好處還在于在不同的form中保持一樣的標簽名字,也可以全局化的復查所有的標簽和消息。

    對于最簡單的程序來說,有時候一個Action對象可以處理一個請求對應的商業邏輯。但是,在大多數情況下,一個Action對 象應該調用另一個對象,一般是一個JavaBean來處理實際的業務邏輯。這讓Action專注于錯誤處理和流程控制,而非商業邏 輯。為了在其他平臺上重用,商業邏輯JavaBean不應該引用任何web程序的對象。Action對象應該從HTTP請求翻譯必要的細節并 象普通的java變量一樣傳遞到商業邏輯對象去。

    舉個例子,在一個數據庫程序中:

    • 一個商業邏輯bean會連接到數據庫并進行查詢,
    • 商業邏輯bean把結果傳遞到Action,
    • Action把結果保存在一個form bean中,放置到request中去,
    • JavaServer Page把結果顯示到一個HTML Form中去。

    不管是Action還是JSP都不需要知道結果是從哪兒來的。他們只需要知道如何打包和顯示結果。

    用戶指南的其它部分非常詳細的解釋了Struts的不同部件。Struts發布版本也包含了一些開發者手冊包含幾個不同的主題,也包括例子程序,標準的Javadoc API,當然還有全部的源代碼!

    Struts 在Apache軟件基金會協議下發布。代碼擁有版權,但是可以在任何程序中自由的使用。參閱ASF license 得到詳細信息.

    1.4 Model(模型): 系統狀態和商業邏輯JavaBeans

    基于MVC的系統中的Model(模型)部分可以被分為兩個概念,系統的內部狀態和可以用來改變狀態的動作。從語法上來說 ,我們可以把狀態信息看成是名詞,而動作是動詞(用來改變狀態)。

    一般來說,米的程序需要用一套包含一個或多個JavaBeans來表達內部狀態,(這些)JavaBean包含了這個狀態的詳細屬性。根據 你的程序的復雜程度,他們可能是自我包含的(自己知道怎么樣保留持續化信息),或者僅是一個知道必要時如何從外部數據源(如數據庫)獲取信息的對象。Entity Enterprise JavaBeans (Entity EJBs)一般也用于表示內部狀態。

    大型程序經常使用一些bean的方法來表示一組可能的商業邏輯,這些方法維護狀態信息。例如,你可能有一個購物車Bean,保存 在每個用戶的session中,包含用戶當前決定購買的條目。這個bean可能有一個checkOut()方法來取得用戶信用卡 的授權,發送訂單到倉庫去來發送。另一些系統可能把可能的動作單獨包裝,可能是一個Session Enterprise JavaBeans(Session EJBs).

    在一些較小的程序中,相反,可能的動作會內置于Action類中,是Controller角色的一部分。當邏輯非常簡單的 時候,或者當重用商業邏輯不是關注點的時候這是合適的。Struts框架支持任何一種模式,但是強烈建議把商業邏輯 (如何做)從Action類扮演的角色(做什么)中分開。

    1.5 View(視圖): JSP頁面和表示部件

    基于Struts程序的View部分基本上是由JavaServer pages(JSP)技術構成的。JSP頁面可以包含靜態的HTML(或者XML)文本,被稱為“模版文本”,再加上在特殊的標簽運行時(當頁面被調用的時候)插入動態內容的能力。JSP環境包含一套標準的動作標簽,比如<jsp:useBean>他們的 用處在JavaServer Pages Specification描述了。另外,還有一種標準的方法來定義你自己的標簽,他們被組織在“自定義標簽庫”里。

    Struts包含了一個內容廣泛的自定義標簽庫,用以幫助編寫完全國際化的用戶界面。它也和處于Model部分的ActionForm高度互動。關于使用這些標簽的方法在后面會詳細討論。

    除了JSP 頁面和原有的以及自定義的標簽之外,有時候讓商業邏輯對象擁有把他們自己根據當前的狀態渲染成HTML(或者XML)的能力也 是經常需要的。這些被渲染出來的輸出可以很容易的在一個結果JSP文件里面用<jsp:include>標準動作標 簽引用。

    1.6 Controller(控制器): ActionServlet 和 ActionMapping

    程序的Controller(控制器)部分關注于從客戶端接收請求(通常是一個使用瀏覽器的用戶),決定那個商業邏輯方法應該被執行,然后分配任務給到一個合適的view組件來制造下一步的用戶界面。在Struts里面,Controller的主要部分是一個servlet,它是ActionServlet.這個servlet用一組ActionMappings來配置,一個ActionMapping定義了一個path(路徑),它和用戶請求的URI對應,一般會指定一個完整的Action類的類名。所有的Action類都是org.apache.struts.action.Action的子類。Action封裝了商業邏輯,組裝結果,并且最終分配控制權到合適的View部件來創建結果。

    Struts也支持在ActionMapping中使用除了標準的框架所需之外附加的屬性。這樣允許你保存你的程序所特定的附加信息。除此之外,Struts還允許你定義控制轉移的邏輯“名字”,這樣一個Action方法可以要求“主菜單”(舉例)而不需要知道對應的JSP頁面的實際名字。這個功能很大的幫助你把控制邏輯(做什么)和表示邏輯(如何顯示)分開。

    posted on 2005-08-13 03:51 R.Zeus 閱讀(286) 評論(0)  編輯  收藏 所屬分類: STRUTS
    主站蜘蛛池模板: 日本xxwwxxww在线视频免费| 好爽又高潮了毛片免费下载| 亚洲大香人伊一本线| 最近2019中文字幕mv免费看| 色窝窝亚洲av网| 亚洲国产成人高清在线观看| 青青在线久青草免费观看| 免费人成网上在线观看| 亚洲午夜在线电影| 国产中文字幕免费观看| 国产精品免费观看调教网| 亚洲乱码在线观看| 亚洲码国产精品高潮在线| 最近免费中文字幕4| 青青操免费在线观看| 亚洲国产精华液2020| 亚洲AV电影院在线观看| 国产免费观看黄AV片| h视频在线免费看| 久青草视频97国内免费影视| 亚洲av无码电影网| 久久精品国产96精品亚洲| 日本免费一本天堂在线| 免费无码中文字幕A级毛片| 香蕉视频免费在线| 国产亚洲精品bv在线观看| 亚洲va久久久噜噜噜久久男同| 日本免费一本天堂在线| 97性无码区免费| 国产三级在线免费| free哆拍拍免费永久视频| 亚洲av无码专区亚洲av不卡| 亚洲福利电影在线观看| 国产亚洲人成网站在线观看不卡| 麻豆国产VA免费精品高清在线| 91视频免费网址| 免费一级毛片无毒不卡| 国产V片在线播放免费无码| 亚洲欧美在线x视频| 亚洲中文字幕久久精品无码VA| 亚洲国产一区二区a毛片|