麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Struts框架之構(gòu)建Controller組件

2019-11-17 06:18:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  一、概述

  在Struts 架構(gòu)中,Controller主要是ActionServlet,但是對(duì)于業(yè)務(wù)邏輯的操作則主要由Action、ActionMapping、ActionForward這幾個(gè)組件協(xié)調(diào)完成。其中,Action扮演了真正的業(yè)務(wù)邏輯的實(shí)現(xiàn)者,而ActionMapping和ActionForward則指定了不同業(yè)務(wù)邏輯或流程的運(yùn)行方向。

  應(yīng)用程序的 Controller 部分集中于從客戶端接收請(qǐng)求(典型情況下是一個(gè)運(yùn)行瀏覽器的用戶),決定執(zhí)行什么商業(yè)邏輯功能,然后將產(chǎn)生下一步用戶界面的責(zé)任委派給一個(gè)適當(dāng)?shù)腣iew組件。在Struts中,controller的基本組件是一個(gè) ActionServlet 類(lèi)的servlet。這個(gè)servlet通過(guò)定義一組映射(由java接口 ActionMapping 描述)來(lái)配置。每個(gè)映射定義一個(gè)與所請(qǐng)求的URI相匹配的路徑和一個(gè) Action 類(lèi)(一個(gè)實(shí)現(xiàn) Action 接口的類(lèi))完整的類(lèi)名,這個(gè)類(lèi)負(fù)責(zé)執(zhí)行預(yù)期的商業(yè)邏輯,然后將控制分派給適當(dāng)?shù)腣iew組件來(lái)創(chuàng)建響應(yīng)。

  Struts也支持使用包含有運(yùn)行框架所必需的標(biāo)準(zhǔn)屬性之外的附加屬性的 ActionMapping 類(lèi)的能力。這答應(yīng)我們保存特定于我們的應(yīng)用程序的附加信息,同時(shí)仍可利用框架其余的特性。另外,Struts答應(yīng)我們定義控制將重定向到的邏輯名,這樣一個(gè)行為方法可以請(qǐng)求"主菜單"頁(yè)面,而不需要知道相應(yīng)的jsp頁(yè)面的實(shí)際名字是什么。這個(gè)功能極大地幫助我們分離控制邏輯(下一步做什么)和顯示邏輯(相應(yīng)的頁(yè)面的名稱(chēng)是什么)。下圖1是Struts的controller組件示意圖:

Struts框架之構(gòu)建Controller組件(圖一)
  二、創(chuàng)建Controller組件

  Struts包括一個(gè)實(shí)現(xiàn)映射一個(gè)請(qǐng)求URI到一個(gè)行為類(lèi)的主要功能的servlet。因此我們的與Controller有關(guān)的主要責(zé)任是:

  為每一個(gè)可能接收的邏輯請(qǐng)求寫(xiě)一個(gè) Action 類(lèi)(也就是,一個(gè) Action 接口的實(shí)現(xiàn));寫(xiě)一個(gè)定義類(lèi)名和與每個(gè)可能的映射相關(guān)的其它信息的 ActionMapping 類(lèi)(也就是,一個(gè) ActionMapping 接口的實(shí)現(xiàn));寫(xiě)行為映射配置文件(用xml)用來(lái)配置controller servlet。

  為應(yīng)用程序更新web應(yīng)用程序展開(kāi)描述符文件(用XML)用來(lái)包括必需的Struts組件,我們給應(yīng)用程序添加適當(dāng)?shù)腟truts組件。

  1、Action 實(shí)現(xiàn)

  Action 接口定義一個(gè)單一的必須由一個(gè) Action 類(lèi)實(shí)現(xiàn)的方法,就象下面這樣:

public ActionForward perform(ActionServlet servlet,
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException;
  一個(gè) Action 類(lèi)的目標(biāo)是處理這個(gè)請(qǐng)求,然后返回一個(gè)標(biāo)識(shí)JSP頁(yè)面的 ActionForward 對(duì)象,控制應(yīng)該重定向這個(gè)JSP頁(yè)面以生成相應(yīng)的響應(yīng)。Struts 架構(gòu)為應(yīng)用系統(tǒng)中的每一個(gè)Action類(lèi)只創(chuàng)建一個(gè)實(shí)例。因?yàn)樗械挠脩舳际褂眠@一個(gè)實(shí)例,所以你必須確定你的Action 類(lèi)運(yùn)行在一個(gè)多線程的環(huán)境中。下圖2顯示了一個(gè)execute()方法如何被訪問(wèn):

Struts框架之構(gòu)建Controller組件(圖二)
圖2 Action實(shí)例的execute()方法

  注重,客戶自己繼續(xù)的Action子類(lèi),必須重寫(xiě)execute()方法,因?yàn)锳ction類(lèi)在默認(rèn)情況下是返回null的。

  在 Model 2 設(shè)計(jì)模式中,一個(gè)典型的 Action 類(lèi)將在它的 perform() 方法中實(shí)現(xiàn)下面的邏輯:

  驗(yàn)證用戶session的當(dāng)前狀態(tài)(例如,檢查用戶已經(jīng)成功地注冊(cè))。假如 Action 類(lèi)發(fā)現(xiàn)沒(méi)有注冊(cè)存在,請(qǐng)求應(yīng)該重定向到顯示用戶名和口令用于注冊(cè)的JSP頁(yè)面。應(yīng)該這樣做是因?yàn)橛脩艨赡茉噲D從"中間"(也就是,從一個(gè)書(shū)簽)進(jìn)入我們的應(yīng)用程序,或者因?yàn)閟ession已經(jīng)超時(shí)并且servlet容器創(chuàng)建了一個(gè)新的session。假如驗(yàn)證還沒(méi)有發(fā)生(由于使用一個(gè)實(shí)現(xiàn) ValidatingActionForm 接口的form bean),驗(yàn)證這個(gè) form bean 的屬性是必須的。假如發(fā)現(xiàn)一個(gè)問(wèn)題,當(dāng)作一個(gè)請(qǐng)求屬性保存合適的出錯(cuò)信息要害字,然后將控制重定向回輸入表單這樣錯(cuò)誤可以被糾正。

  執(zhí)行要求的處理來(lái)處理這個(gè)請(qǐng)求(例如在數(shù)據(jù)庫(kù)里保存一行)。這可以用嵌入 Action 類(lèi)本身的代碼來(lái)完成,但是通常應(yīng)該調(diào)用一個(gè)商業(yè)邏輯bean的一個(gè)合適的方法來(lái)執(zhí)行。更新將用來(lái)創(chuàng)建下一個(gè)用戶界面頁(yè)面的服務(wù)器端對(duì)象(典型情況下是request范圍或session范圍beans,定義我們需要在多長(zhǎng)時(shí)間內(nèi)保持這些項(xiàng)目可獲得)。返回一個(gè)標(biāo)識(shí)生成響應(yīng)的JSP頁(yè)面的適當(dāng)?shù)?ActionForward 對(duì)象,基于新近更新的beans。典型情況下,我們將通過(guò)接收到的 ActionMapping 對(duì)象(假如我們使用一個(gè)局部于與這個(gè)映射上的邏輯名)或者在controller servlet 本身(假如我們使用一個(gè)全局于應(yīng)用程序的邏輯名)上調(diào)用 findForward() 得到一個(gè)對(duì)這樣一個(gè)對(duì)象的引用。

  當(dāng)為 Action 類(lèi)編程時(shí)要記住的設(shè)計(jì)要點(diǎn)包括以下這些:

  controller servlet僅僅創(chuàng)建一個(gè)我們的 Action 類(lèi)的實(shí)例,用于所有的請(qǐng)求。這樣我們需要編寫(xiě)我們的 Action 類(lèi)使其能夠在一個(gè)多線程環(huán)境中正確運(yùn)行,就象我們必須安全地編寫(xiě)一個(gè)servlet的 service() 方法一樣。

  幫助線程安全編程的最重要的原則就是在我們的 Action 類(lèi)中僅僅使用局部變量而不是實(shí)例變量。局部變量創(chuàng)建于一個(gè)分配給每個(gè)請(qǐng)求線程的棧中,所以沒(méi)有必要擔(dān)心會(huì)共享它們。

  盡管不應(yīng)該,代表我們的系統(tǒng)中Model部分的的beans仍有可能拋出違例。我們應(yīng)該在我們的 perform() 方法的邏輯中捕捉所有這樣的違例,并且通過(guò)執(zhí)行以下語(yǔ)句將它們記錄在應(yīng)用程序的日志文件中(包括相應(yīng)的棧跟蹤信息):



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人羞羞视频在线观看 | 成人午夜在线播放 | 免费一级毛片在线播放不收费 | 男女无套免费视频 | www久久综合 | 成人在线免费看 | 欧美成人视 | v天堂在线视频 | 久久精品男人 | 亚洲第一视频 | 亚洲第一男人天堂 | 久久国产精品成人免费网站 | 九九热在线视频观看 | 中文字幕精品在线观看 | 线观看免费完整aaa 欧美在线一级 | 黄色一级视频 | 欧美成人二区 | 狠狠干夜夜操 | 黄色网址免费在线播放 | 欧美性生活视频免费看 | 国产精品免费一区二区三区都可以 | 免费一级欧美大片视频在线 | 欧美精品激情视频 | 日韩999| 91麻豆精品国产91久久久更新资源速度超快 | 久久福利国产 | 中文字幕在线网 | 国产精品片一区二区三区 | 国产成人综合在线观看 | 97综合| 色综合欧美 | 免费观看黄视频 | 欧产日产国产精品99 | 久久精品亚洲欧美日韩精品中文字幕 | 欧美精品v国产精品v日韩精品 | 国产超碰人人做人人爱 | 国产女厕一区二区三区在线视 | 草莓福利视频在线观看 | 免费视频www在线观看 | 国产91av视频| 亚洲码无人客一区二区三区 |