隨筆 - 71  文章 - 15  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          因?yàn)榭诳剩系蹌?chuàng)造了水;
          因?yàn)楹诎担系蹌?chuàng)造了火;
          因?yàn)槲倚枰笥眩陨系圩屇銇淼轿疑磉?br> Click for Shaanxi xi'an, Shaanxi Forecast
          ╱◥█◣
            |田|田|
          ╬╬╬╬╬╬╬╬╬╬╬
          If only I have such a house!
          〖總在爬山 所以艱辛〗
          Email:myesjoy@yahoo.com.cn
          NickName:yesjoy
          MSN:myesjoy@hotmail.com
          QQ:150230516

          〖總在尋夢(mèng) 所以苦痛〗

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Hibernate在線

          Java友情

          Java認(rèn)證

          linux經(jīng)典

          OA系統(tǒng)

          Spring在線

          Structs在線

          專家專欄

          企業(yè)信息化

          大型設(shè)備共享系統(tǒng)

          工作流

          工作流產(chǎn)品

          網(wǎng)上購(gòu)書

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Struts是一個(gè)Web Frameworkstruts開始于2000年3月,1.020017月發(fā)布。采用Struts能開發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。MVC設(shè)計(jì)模式把一個(gè)系統(tǒng)分成3個(gè)相互協(xié)調(diào)的部分。struts frameworkMVC 模式的體現(xiàn),下面我們就從分別從模型、視圖、控制來看看struts的體系結(jié)構(gòu)(Architecture)。
          在基于JSP/Servlet的Web應(yīng)用中要使用MVC模式,需要解決一個(gè)問題。我們知道,HTTP的底層是TCP/IP協(xié)議,而TCP/IP是一種無狀態(tài)連接的協(xié)議,那么如果我們的模型發(fā)生了變化,就無從通知視圖。Struts采用了在“JSP規(guī)范 v0.92”中提到的MVC Model 2,這是對(duì)MVC在Web上應(yīng)用的修訂版。圖示如下:



          圖表 1:MVC Model 2(From Malcolm Davis)

          Model(模型)
          模型用于封裝系統(tǒng)的狀態(tài)。
          Struts中,系統(tǒng)模型的狀態(tài)主要由ActiomForm Bean和值對(duì)象體現(xiàn)。

          View(視圖)
          是模型的表示,提供用戶交互界面。當(dāng)模型狀態(tài)發(fā)生變化時(shí),視圖應(yīng)該得到通知,以便更新視圖。
          首先,Struts提供了Javaorg. apache.struts.action.ActionFormJava開發(fā)者將該類細(xì)分來創(chuàng)建表單bean。在運(yùn)行時(shí),該bean有兩種用法:
                   ―  當(dāng)JSP準(zhǔn)備相關(guān)的HTML表單以進(jìn)行顯示時(shí),JSP將訪問該bean(它保存要放入表單中的值)。那些值是從業(yè)務(wù)邏輯或者是從先前的用戶輸入來提供的。
                   ―  當(dāng)從Web瀏覽器中返回用戶輸入時(shí),該bean將驗(yàn)證并保存該輸入以供業(yè)務(wù)邏輯或(如果驗(yàn)證失敗的話)后續(xù)重新顯示使用。
          其次,Struts提供了許多定制JSP標(biāo)記,它們的使用簡(jiǎn)單,但是它們?cè)陔[藏信息方面功能強(qiáng)大。例如,除了bean名稱和給定bean中每個(gè)段的名稱之外,頁(yè)面設(shè)計(jì)者不需要知道有關(guān)表單bean的更多信息。

          Controller(控制器)
          接受來自視圖的請(qǐng)求,修改模型的狀態(tài)。Struts framework中, Controller主要是ActionServlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由ActionActionMappingActionForward這幾個(gè)組件協(xié)調(diào)完成(也許這幾個(gè)組件,應(yīng)該劃分到模型中的業(yè)務(wù)邏輯一塊)。其中,Action扮演了真正的控制邏輯的實(shí)現(xiàn)者,而ActionMappingActionForward則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。

          下面從系統(tǒng)的角度簡(jiǎn)單介紹一下Struts的工作原理:
          Struts應(yīng)用有3個(gè)主要部件:一個(gè)Servlet Controller(由Struts提供,org.apache.action.ActionServlet,以下簡(jiǎn)稱controller)及負(fù)責(zé)具體業(yè)務(wù)處理的Action類(org.apache.action.Action的基類);Jsp頁(yè)面(viewer);應(yīng)用的業(yè)務(wù)邏輯封裝(model)。Struts 的中心控制器(ActionServlet)接受所有來自客戶端的請(qǐng)求,并根據(jù)系統(tǒng)的配置(Struts-config.xml)路由HTTP請(qǐng)求到其他Action對(duì)象(開發(fā)者實(shí)現(xiàn)的org.apache.struts.action.Action的子類),在這些Action對(duì)象中會(huì)進(jìn)行所有的業(yè)務(wù)操作,比如插入一條訂單,修改一條記錄。處理完畢,由Struts的ActionServlet轉(zhuǎn)向到JSP頁(yè)面,將處理結(jié)果返回給客戶端。從這兒可以看出在Struts中ActionServlet擔(dān)任了重要的角色,由它控制所有的程序流轉(zhuǎn),是MVC三個(gè)相對(duì)獨(dú)立的部分協(xié)調(diào)工作,提供系統(tǒng)的完善功能。從下圖可見Struts是MVC Model 2的一個(gè)典型應(yīng)用。


          圖表 2:Struts工作機(jī)理(From Malcolm Davis)

          Struts啟動(dòng)時(shí),controller會(huì)讀入一個(gè)配置文件struts-config.xml,其中定義了前端請(qǐng)求的url與相應(yīng)的Action類及使用的Form類的映射關(guān)系,下面是一個(gè)struts-config.xml中的片斷:

             <action    path="/logon" 
                         type
          ="org.apache.struts.webapp.example.LogonAction" 
                         name
          ="logonForm" 
                        scope
          ="request" 
                        input
          ="/logon.jsp"> 
              
          </action> 
           

          從中可以看出,這個(gè)action會(huì)響應(yīng)url類似于/logon的請(qǐng)求(在后面我們會(huì)看到,這兒的實(shí)際的url要根據(jù)在web.xml中配置,比如可能為/logon.do/logon.other之類的帶后綴的url),負(fù)責(zé)處理這個(gè)請(qǐng)求的action類是org.apache.struts.webapp.example.LogonAction,使用的FormBeanlogonFormscope界定了這個(gè)FormBean存在的范圍是只在當(dāng)前request中存在。
          struts
          會(huì)讀入這些設(shè)置,生成相應(yīng)的org.apache.action.ActionMapping對(duì)象。controller正是使用這些mapping來把HTTP請(qǐng)求轉(zhuǎn)發(fā)到應(yīng)用的actions。一個(gè)ActionMapping指定了

          • 一個(gè)請(qǐng)求URI
          • 對(duì)應(yīng)的類(Action的子類)
          • 需要的屬性


          對(duì)于一個(gè)DB應(yīng)用,

          • 一個(gè)商業(yè)邏輯Bean用于連接、查詢數(shù)據(jù)庫(kù)
          • 這個(gè)Bean返回結(jié)果到Action
          • Action將這些結(jié)果存儲(chǔ)到requestform bean
          • Jsp顯示

           轉(zhuǎn)自:http://www.javaresearch.org/article/showarticle.jsp?column=23&thread=256

          posted on 2006-03-05 11:52 ★yesjoy★ 閱讀(264) 評(píng)論(0)  編輯  收藏 所屬分類: Structs學(xué)習(xí)
          主站蜘蛛池模板: 太湖县| 大安市| 霍州市| 高要市| 会理县| 常熟市| 左权县| 江北区| 铅山县| 礼泉县| 尉犁县| 丹阳市| 屯昌县| 察雅县| 仁寿县| 榕江县| 连州市| 那坡县| 尼木县| 榆林市| 三原县| 湖南省| 裕民县| 六枝特区| 临高县| 惠安县| 华亭县| 香格里拉县| 巴南区| 烟台市| 蒙自县| 新乡市| 黄骅市| 宜都市| 沿河| 宜春市| 宁乡县| 南充市| 华坪县| 吉木萨尔县| 茶陵县|