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

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

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

    yxhxj2006

    常用鏈接

    統計

    最新評論

    struts2原理(轉)

    1.Struts 2的基本流程 
    Struts 2框架由3個部分組成:核心控制器FilterDispatcher、業務控制器和用戶實現的業務邏輯組件。在這3個部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用戶需要實現業務控制器和業務邏輯組件。 
    2.核心控制器:FilterDispatcher 
    FilterDispatcher是Struts 2框架的核心控制器,該控制器作為一個Filter運行在Web應用中,它負責攔截所有的用戶請求,當用戶請求到達時,該Filter會過濾用戶請求。如果用戶請求以action結尾,該請求將被轉入Struts 2框架處理。 

    Struts 2框架獲得了*.action請求后,將根據*.action請求的前面部分決定調用哪個業務邏輯組件,例如,對于login.action請求,Struts 2調用名為login的Action來處理該請求。 

    Struts 2應用中的Action都被定義在struts.xml文件中,在該文件中定義Action時,定義了該Action的name屬性和class屬性,其中name屬性決定了該Action處理哪個用戶請求,而class屬性決定了該Action的實現類。 

    Struts 2用于處理用戶請求的Action實例,并不是用戶實現的業務控制器,而是Action代理——因為用戶實現的業務控制器并沒有與Servlet API耦合,顯然無法處理用戶請求。而Struts 2框架提供了系列攔截器,該系列攔截器負責將HttpServletRequest請求中的請求參數解析出來,傳入到Action中,并回調Action 的execute方法來處理用戶請求。 

    顯然,上面的處理過程是典型的AOP(面向切面編程)處理方式。圖3.19顯示了這種處理模型。 



    圖3.19 Struts 2的攔截器和Action 

    從圖3.19中可以看出,用戶實現的Action類僅僅是Struts 2的Action代理的代理目標。用戶實現的業務控制器(Action)則包含了對用戶請求的處理。用戶的請求數據包含在 HttpServletRequest對象里,而用戶的Action類無需訪問HttpServletRequest對象。攔截器負責將 HttpServletRequest里的請求數據解析出來,并傳給業務邏輯組件Action實例。 
    3.業務控制器 
    正如從圖3.19所看到的,業務控制器組件就是用戶實現Action類的實例,Action類里通常包含了一個execute方法,該方法返回一個字符串——該字符串就是一個邏輯視圖名,當業務控制器處理完用戶請求后,根據處理結果不同,execute方法返回不同字符串 ——每個字符串對應一個視圖名。 

    程序員開發出系統所需要的業務控制器后,還需要配置Struts 2的Action,即需要配置Action的如下三個部分定義: 

    — Action所處理的URL。 

    — Action組件所對應的實現類。 

    — Action里包含的邏輯視圖和物理資源之間的對應關系。 

    每個Action都要處理一個用戶請求,而用戶請求總是包含了指定URL。當Filter Dispatcher攔截到用戶請求后,根據請求的URL和Action處理URL之間的對應關系來處理轉發。 
    4.Struts 2的模型組件 
    實際上,模型組件已經超出了MVC框架的覆蓋范圍。對于Struts 2框架而言,通常沒有為模型組件的實現提供太多的幫助。 

    文本框: 圖3.20 控制器調用模型組件Java EE應用里的模型組件,通常指系統的業務邏輯組件。而隱藏在系統的業務邏輯組件下面的,可能還包含了DAO、領域對象等組件。 

    通常,MVC框架里的業務控制器會調用模型組件的方法來處理用戶請求。也就是說,業務邏輯控制器不會對用戶請求進行任何實際處理,用戶請求最終由模型組件負責處理。業務控制器只是中間負責調度的調度器,這也是稱Action為控制器的原因。 


    圖3.20顯示了這種處理流程。 

    提示 在圖3.20中看到Action調用業務邏輯組件的方法。當控制器需要獲得業務邏輯組件實例時,通常并不會直接獲取業務邏輯組件實例,而是通過工廠模式來獲得業務邏輯組件的實例;或者利用其他IoC容器(如Spring容器)來管理業務邏輯組件的實例。 
    5.Struts 2的視圖組件 
    Struts 2已經改變了Struts 1只能使用JSP作為視圖技術的現狀,Struts 2允許使用其他的模板技術,如FreeMarker、Velocity作為視圖技術。 

    當Struts 2的控制器返回邏輯視圖名時,邏輯視圖并未與任何的視圖技術關聯,僅僅是返回一個字符串,該字符串作為邏輯視圖名。 

    當我們在struts.xml文件中配置 Action時,不僅需要指定Action的name屬性和class屬性,還要為Action元素指定系列result子元素,每個result子元素定義一個邏輯視圖和物理視圖之間的映射。前面所介紹的應用都使用了JSP技術作為視圖,故配置result子元素時沒有指定type屬性,默認使用JSP 作為視圖資源。 

    如果需要在Struts 2中使用其他視圖技術,則可以在配置result子元素時,指定相應的type屬性即可。例如,如果需要使用FreeMarker,則為result指定值為freemarker的type屬性;如果想使用Velocity模板技術作為視圖資源,則為result指定值為velocity的type屬性…… 
    6.Struts 2的運行流程 
    經過上面介紹,我們發現Struts 2框架的運行流程非常類似于WebWork框架的流程。 

    提示 在Struts 2的官方站點,我們可以找到如下說法:Essentially,Struts 2.0 is the technical equivalent of WebWork 2.3。Aside from the package and property renaming,it isn't much different than,say,migrating from WebWork 2.1 to 2.2——意思是說:Struts 2.0技術等同于WebWork 2.3框架,除了包和屬性被改名外。從WebWork 2.2遷移到Struts 2不會比從WebWork 2.1遷移到WebWork 2.2更復雜。 

    這里我們可以看到,Struts 2其實就是WebWork 2.2的升級版,這也就不難理解:為什么WebWork和Struts 2如此相似! 

    因此,Struts 2的運行流程與WebWork的運行流程完全相同,讀者可以參看圖1.8來了解Struts 2的運行流程。 

    posted on 2012-09-20 01:10 奮斗成就男人 閱讀(259) 評論(0)  編輯  收藏 所屬分類: J2EE

    主站蜘蛛池模板: 国产高清不卡免费视频| a级毛片免费全部播放| 在线观看免费人成视频| 久久亚洲私人国产精品vA| 国产一级片免费看| 久久久无码精品亚洲日韩蜜桃| a毛片在线免费观看| 亚洲av永久无码精品古装片| a在线观看免费视频| 日本亚洲成高清一区二区三区 | 亚洲人成网站免费播放| 91麻豆最新在线人成免费观看| 内射少妇36P亚洲区| 精品无码无人网站免费视频 | 日本免费久久久久久久网站| 亚洲精品高清国产一久久| 91免费国产在线观看| 亚洲AV日韩AV一区二区三曲| 免费国产不卡午夜福在线| 人禽伦免费交视频播放| 亚洲国产精品va在线播放| 最近新韩国日本免费观看| 亚洲av午夜精品无码专区| 免费看的黄色大片| 成av免费大片黄在线观看| 婷婷久久久亚洲欧洲日产国码AV| 91免费国产在线观看| 黄页免费视频播放在线播放| 亚洲中文字幕第一页在线| 99精品视频免费在线观看| 亚洲一级特黄特黄的大片| 国产精品va无码免费麻豆 | 1000部拍拍拍18免费网站| 亚洲精品无AMM毛片| 亚洲人成网77777亚洲色| 91香蕉成人免费网站| 一区二区三区视频免费| 久久青青草原亚洲av无码app | 久久亚洲国产成人精品无码区| 国产激情免费视频在线观看 | 亚洲综合图色40p|