久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

Struts2的體系結(jié)構(gòu)[樣例5]

時(shí)間:2019-05-12 02:51:43下載本文作者:會(huì)員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《Struts2的體系結(jié)構(gòu)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《Struts2的體系結(jié)構(gòu)》。

第一篇:Struts2的體系結(jié)構(gòu)

?Struts2的體系結(jié)構(gòu)

定義常量

常量可以在struts.xml或struts.properties中配置,建議在struts.xml中配置,兩種配置方式如下: struts.xml

struts.properties

struts.action.extension=do

通常,struts2按如下搜索順序加載struts2常量: struts-default.xml struts-plugin.xml struts.xml

struts.properties web.xml

如果在多個(gè)文件中配置了同一個(gè)常量,則后一個(gè)文件中配置的常量值會(huì)覆蓋前面文件中配置的常量值.常用的常量

Struts2的Action(業(yè)務(wù)邏輯控制器)

相對與Struts1而言,struts2采用了低侵入式的設(shè)計(jì),struts不要求Action類繼承任何的Struts2基類,或者實(shí)現(xiàn)任何Struts2接口,在這種設(shè)計(jì)下,Struts2的Action類是一個(gè)普通的POJO,通常只需要包含一個(gè)無參的execute方法,從而有很好的代碼復(fù)用性。

但為了讓用戶開發(fā)Action類更加規(guī)范,Struts2提供了一個(gè)Action接口,這個(gè)接口定義了Struts2的Action處理規(guī)范。下邊是一個(gè)標(biāo)準(zhǔn)Action接口的代碼。

Public interface Action{

Public static final String ERROR=”error”;

Public static final String INPUT=”input”;

Public static final String SUCCESS=”success”;

Public static final String NONE=”none”;

Public static final String LOGIN=”login”;

//定義處理用戶請求的execute方法

Public String execute()throw Exception;}

另外Struts2還提供了一個(gè)實(shí)現(xiàn)類:ActionSupport(Action的實(shí)現(xiàn)類),該類中提供了許多默認(rèn)的方法,這些默認(rèn)的方法包括國際化信息的方法,數(shù)據(jù)校驗(yàn)的方法,默認(rèn)的處理用戶請求的方法。繼承該類能大大的簡化Action的開發(fā)。

三、使用struts2封裝表單元素的值:

1.屬性驅(qū)動(dòng):直接在Action中添加屬性和對應(yīng)的getter和setter方法 2.模型驅(qū)動(dòng):

a)必須實(shí)行ModelDriven接口,并且重新getModel方法 b)初始化屬性 private Userinfo user = new Userinfo();c)在頁面上表單元素的名稱為實(shí)體類的屬性名稱

四、如何獲取servlet API中的對象(request,session,application)等

1. 使用ActionContext獲取對象(Map)

2.使用ServletActionContext對象獲取

3.使用DI注入的方式(IoC方式)

a)實(shí)行相應(yīng)的接口(xxxAware),request對象的接口(ServletRequestAware),response(ServletResponseAware),session(SessionAware)等

b)在Action中添加相應(yīng)的屬性和setter方法(setter注入)

第二篇:體系結(jié)構(gòu)

一、管道與過濾器

在管道與過濾器風(fēng)格的軟件體系結(jié)構(gòu)中,每個(gè)構(gòu)件,都有一組輸入和輸出,構(gòu)件讀輸入的數(shù)據(jù)流,經(jīng)過內(nèi)部處理,然后產(chǎn)生輸出數(shù)據(jù)流。這種風(fēng)格的連接件就像是數(shù)據(jù)流傳輸?shù)墓艿溃瑢⒁粋€(gè)過濾器的輸出傳到另一過濾器的輸入。這種風(fēng)格特別重要的過濾器必須是獨(dú)立的實(shí)體.它不能與其它的過濾器共享數(shù)據(jù),而且一個(gè)過濾器不知道它上游和下游的標(biāo)識(shí)。一個(gè)管道與過濾器網(wǎng)絡(luò)輸出的正確性并不依賴于過濾器進(jìn)行增量計(jì)算過程的順序。

管道與過濾器風(fēng)格的軟件體系結(jié)構(gòu)具有許多很好的特點(diǎn):

(1)具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn);

(2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入,輸出行為看成是多個(gè)過濾器的行為的簡單合成:

(3)支持軟件重用。主要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來;

(4)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡單:

(5)允許對一些如吞吐量、死鎖等屬性的分析:

(6)支持并行執(zhí)行

但是,這樣的系統(tǒng)也存在著一些缺陷:

(1)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu):

(2)不適合處理交互的應(yīng)用:

(3)因?yàn)樵跀?shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣又導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。(pass理由上已經(jīng)訴過)

二、數(shù)據(jù)抽象和面向?qū)ο蟮慕M織

這種風(fēng)格建立在數(shù)據(jù)抽象和面向?qū)ο蟮幕A(chǔ)上,數(shù)據(jù)的表示方法和它們的相應(yīng)操作被封裝在一個(gè)抽象數(shù)據(jù)類型或?qū)ο笾小_@種風(fēng)格的構(gòu)件是一種對象,或者說是抽象數(shù)據(jù)類型的實(shí)例。對象是一種被稱作管理者的構(gòu)件,因?yàn)樗?fù)責(zé)保持資源的完整性。對象是通過函數(shù)和過程的調(diào)用來交互的。

面向?qū)ο蟮南到y(tǒng)在編程時(shí)有兩大優(yōu)點(diǎn):

(1)因?yàn)閷ο髮ζ渌鼘ο箅[藏它的表示,所以可以改變一個(gè)對象的表示,而不影響其它的對象。

(2)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問題分解成一些交互的代理程序的集合。

但是,面向?qū)ο蟮南到y(tǒng)也存在著一些問題

(1)為了使一個(gè)對象和另一個(gè)對象通過過程調(diào)用等方式進(jìn)行交互,必須知道對象的標(biāo)識(shí)。只要一個(gè)對象的標(biāo)識(shí)改變了.就必須修改所有其他明確調(diào)用它的對象。

(2)必須修改所有顯式調(diào)用它的其它對象,并消除由此帶來的一些副作用。例如,如果A使用了對象B.c也使用了對象B,那么,c對B的使用所造成的對A的影響可能是料想不到的。(不適合,2個(gè)缺點(diǎn))

三、基于事件的隱式調(diào)用

基于事件的隱式調(diào)用風(fēng)格的思想:

構(gòu)件不直接調(diào)用一個(gè)過程,而是觸發(fā)或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其它構(gòu)件中的過程在一個(gè)或多個(gè)事件中注冊,當(dāng)一個(gè)事件被觸發(fā),系統(tǒng)自動(dòng)調(diào)用在這個(gè)事件中注冊的所有過程,這樣,一個(gè)事件的觸發(fā)就導(dǎo)致了另一模塊中的過程的調(diào)用。

基于事件的隱式調(diào)用風(fēng)格的主要特點(diǎn):

(1)事件的觸發(fā)者并不知道哪些構(gòu)件會(huì)被這些事件影響。這樣不能假定構(gòu)件的處理順序,甚至不知道哪些過程會(huì)被調(diào)用,因此,許多隱式調(diào)用的系統(tǒng)也包含顯式調(diào)用作為構(gòu)件交互的補(bǔ)充形式。

(2)支持重用。在不改變系統(tǒng)中其他接口的情況之下,構(gòu)件可以非常容易的被其他構(gòu)件取代。

基于事件的隱式調(diào)用風(fēng)格的主要缺點(diǎn):

(1)構(gòu)件放棄了自身對系統(tǒng)計(jì)算的控制。(哪些構(gòu)件響應(yīng)? 響應(yīng)的順序是怎么樣的?)

(2)共享區(qū)域的數(shù)據(jù)交換。(正確性的驗(yàn)證)(可行但不適合)

四、層次系統(tǒng)

層次系統(tǒng)組織成一個(gè)層次結(jié)構(gòu),每一層為上層服務(wù),并作為下層客戶。在一些層次系統(tǒng)中,除了一些精心挑選的輸出函數(shù)外,內(nèi)部的層只對相鄰的層可見。由于每一層最多只影響兩層,同時(shí)只要給相鄰層提供相同的接口,允許每層用不同的方法實(shí)現(xiàn),同樣為軟件重用提供了強(qiáng)大的支持。在這一應(yīng)用領(lǐng)域中.每一層提供一個(gè)抽象的功能,作為上層通信的基礎(chǔ)。較低的層次定義低層的交互,最低層通常只定義硬件物理連接。

層次系統(tǒng)有許多可取的屬性:

(1)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解:

(2)支持功能增強(qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换ィ虼斯δ艿母淖冏疃嘤绊懴噜彽纳舷聦樱?/p>

(3)支持重用。

當(dāng)然,層次系統(tǒng)也有其不足之處:

(1)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級或高級的功能綜合起來:

(2)很難找到一個(gè)通行的、合適的、正確的層次抽象方法。(可行但有難度)

五、倉庫風(fēng)格

1、黑板系統(tǒng)

黑板系統(tǒng)的傳統(tǒng)應(yīng)用是信號(hào)處理領(lǐng)域,如語音和模式識(shí)別。另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取。黑板系統(tǒng)主要由三部分組成:知識(shí)源、黑板數(shù)據(jù)結(jié)構(gòu)、控制。

2、三層c,s軟件體系結(jié)構(gòu)

C/S軟件體系結(jié)構(gòu),即client/server(客戶機(jī)/服務(wù)器)結(jié)構(gòu),是基于資源不對等,且為實(shí)現(xiàn)共享而提出來的,是20世紀(jì)90年代成熟起來的技術(shù),c,s結(jié)構(gòu)將應(yīng)用系統(tǒng)一分二,服務(wù)器(后臺(tái))負(fù)責(zé)數(shù)據(jù)管理,客戶機(jī)(前臺(tái))完成與用戶的交互任務(wù)。c,s體系結(jié)構(gòu)具有強(qiáng)大的數(shù)據(jù)操作和事務(wù)處理能力,模型思想簡單,容易被人們理解和接受。

但隨著企業(yè)規(guī)模和應(yīng)用范圍的日益擴(kuò)大,軟件的復(fù)雜程度不斷提高,傳統(tǒng)的c/s結(jié)構(gòu)存在以下幾個(gè)局限:

(1)c/s只分兩層結(jié)構(gòu)是單一服務(wù)器且以局域網(wǎng)為中心的,所以難以擴(kuò)展至大型企業(yè)廣域網(wǎng)或Internet:

(2)軟、硬件的組合及集成能力有限;

(3)客戶機(jī)的負(fù)荷太重,難以管理大量的客戶機(jī),系統(tǒng)的性能容易變壞:

(4)數(shù)據(jù)安全性不好。

正是因?yàn)槎觕/s有這么多缺點(diǎn),因此,三層c/s結(jié)構(gòu)應(yīng)運(yùn)而生。三層c層結(jié)構(gòu)是將應(yīng)用功能分成表示層、功能層和數(shù)據(jù)層三個(gè)部分。

三層C/S的解決方案是:對這三層進(jìn)行明確分割,并在邏輯上使其獨(dú)立。原來的數(shù)據(jù)層作為數(shù)據(jù)庫管理系統(tǒng)已經(jīng)獨(dú)立出來,所以,關(guān)鍵是要將表示層和功能層分離成各自獨(dú)立的程序,并且還要使這兩層問的接口簡潔明了。與傳統(tǒng)的二層結(jié)構(gòu)相比,三層c/s結(jié)構(gòu)具有以下優(yōu)點(diǎn):

(I)允許合理地劃分三層結(jié)構(gòu)的功能,使之在邏輯上保持相對獨(dú)立性,從而使整個(gè)系統(tǒng)的邏輯結(jié)構(gòu)更為清晰,能提高系統(tǒng)和軟件的可維護(hù)性和可擴(kuò)展性。

(2)允許更靈活有效地選用相應(yīng)的平臺(tái)和硬件系統(tǒng),使之在處理負(fù)荷能力上與處理特性上分別適應(yīng)于結(jié)構(gòu)清晰的三層;并且這些平臺(tái)和各個(gè)組成部分可以具有良好的可升級性和開放性。

(3)三層c/s結(jié)構(gòu)中.應(yīng)用的各層可以并行開發(fā),各層也可以選擇各自最適合的開發(fā)語言。

(4)允許充分利用功能層有效地隔離開表示層與數(shù)據(jù)層,來授權(quán)的用戶難以繞過功能層而利用數(shù)據(jù)庫工具或黑客手段去非法地訪問數(shù)據(jù)層,這就為嚴(yán)格的安全管理奠定堅(jiān)實(shí)的基礎(chǔ);整個(gè)系統(tǒng)的管理層次也更加合理和可控制。

3、B/S軟件體系結(jié)構(gòu)

B/S體系結(jié)構(gòu).即Browser/Server(瀏覽器/服務(wù))結(jié)構(gòu),是隨著如Internet的興起,對c/s體系結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在B/S體系結(jié)構(gòu)下。用戶界面完全通過www瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn).但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn)。

B/s體系結(jié)構(gòu)主要是利用不斷成熟的www瀏覽器技術(shù),結(jié)合瀏覽器的多種腳本語言,用通用瀏覽器就實(shí)現(xiàn)了原來需要復(fù)雜的專用軟件才能實(shí)現(xiàn)的強(qiáng)大功能,并節(jié)

約了開發(fā)成本.是一種全新的軟件體系結(jié)構(gòu)。基于B/S體系結(jié)構(gòu)的軟件,系統(tǒng)安裝、修改和維護(hù)全在服務(wù)器端解決。用戶在使用系統(tǒng)時(shí).僅僅需要1個(gè)瀏覽器就可運(yùn)行全部的模塊,真正達(dá)到了“零客戶端”的功能,很容易在運(yùn)行時(shí)自動(dòng)升級。B/s體系結(jié)構(gòu)還提供了異種機(jī)、異種網(wǎng)、異種應(yīng)用服務(wù)的聯(lián)機(jī)、聯(lián)網(wǎng)、統(tǒng)一服務(wù)的最現(xiàn)實(shí)的開放性基礎(chǔ)。

但是,與c/s體系結(jié)構(gòu)相比,B/s體系結(jié)構(gòu)也有許多不足之處,例如:

(1)早期B,s體系結(jié)構(gòu)缺乏對動(dòng)態(tài)頁面的支持能力,(2)B,s體系結(jié)構(gòu)的系統(tǒng)擴(kuò)展能力差,安全性也難以控制。

(3)采用B/s體系結(jié)構(gòu)的應(yīng)用系統(tǒng),在數(shù)據(jù)查詢等響應(yīng)速度上,要遠(yuǎn)遠(yuǎn)地低于C/S體系結(jié)構(gòu)。

(4)B,s體系結(jié)構(gòu)的數(shù)據(jù)提交一般以頁面為單位,數(shù)據(jù)的動(dòng)態(tài)交互性不強(qiáng),不利于在線事務(wù)處理(OLTP)應(yīng)用。

想法:

考慮到

第三篇:Struts2介紹

Struts2集成指南

關(guān)于Struts2 Struts是Apache軟件基金會(huì)(ASF)贊助的一個(gè)開源項(xiàng)目。它最初是Jakarta項(xiàng)目中的一個(gè)子項(xiàng)目,并在2004年3月成為ASF的頂級項(xiàng)目。它通過采用Java Servlet/JSP技術(shù),實(shí)現(xiàn)了基于Java EE Web應(yīng)用的Model-View-Controller〔MVC〕設(shè)計(jì)模式的應(yīng)用框架〔Web Framework〕,是MVC經(jīng)典設(shè)計(jì)模式中的一個(gè)經(jīng)典產(chǎn)品。

Struts,a history 在Java EE的Web應(yīng)用發(fā)展的初期,除了使用Servlet技術(shù)以外,普遍是在JavaServer Pages(JSP)的源代碼中,采用HTML與Java代碼混合的方式進(jìn)行開發(fā)。因?yàn)檫@兩種方式不可避免的要把表現(xiàn)與業(yè)務(wù)邏輯代碼混合在一起,都給前期開發(fā)與后期維護(hù)帶來巨大的復(fù)雜度。為了擺脫上述的約束與局限,把業(yè)務(wù)邏輯代碼從表現(xiàn)層中清晰的分離出來,2000年,Craig McClanahan采用了MVC的設(shè)計(jì)模式開發(fā)Struts。后來該框架產(chǎn)品一度被認(rèn)為是最廣泛、最流行JAVA的WEB應(yīng)用框架。

Craig McClanahan 2006年,WebWork與Struts這兩個(gè)優(yōu)秀的Java EE Web框架(Web Framework〕的團(tuán)體,決定合作共同開發(fā)一個(gè)新的,整合了WebWork與Struts優(yōu)點(diǎn),并且更加優(yōu)雅、擴(kuò)展性更強(qiáng)的框架,命名為“Struts 2”,原Struts的1.x版本產(chǎn)品稱為“Struts 1”。

至此,Struts項(xiàng)目并行提供與維護(hù)兩個(gè)主要版本的框架產(chǎn)品——Struts 1與Struts 2。Struts1 vs.Struts2 侵入性

Struts 1 在編程方面是面向抽象類編程,而不是面向接口編程。Struts 1要求自定義Action 類繼承一個(gè)特定的抽象基類Action。另一方面,Struts 1的 Action 依賴于 Servlet API,因?yàn)镾truts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。例如 e.g.public class LogonAction extends Action {

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

} }

Struts 2 Action 類可以實(shí)現(xiàn)一個(gè)Action接口,也可以實(shí)現(xiàn)其他接口,甚至不實(shí)現(xiàn)任何接口。這使得可選的和定制的服務(wù)成為可能。e.g.public class ExampleAction {

public String doSomething(){

return “success”;} }

線程模式

Struts 1 Action類 是單例模式并且必須是線程安全的,因?yàn)樵趙eb容器中,僅有Action類 的一個(gè)實(shí)例來處理所有的請求。

Struts2 Web容器為每一個(gè)請求產(chǎn)生一個(gè)Action類實(shí)例,因此沒有線程安全問題。可測試性

Struts1 由于對Servlet API的依賴,使得針對于自定義Action類的測試變得復(fù)雜。

Struts2 由于自定義Action可以為POJO,所以可以向測試一個(gè)POJO一樣來測試Action類。

請求參數(shù)封裝

Struts1 使用ActionForm 對象封裝用戶的請求參數(shù),所有的 ActionForm 必須繼承一個(gè)基類:ActionForm。普通的JavaBean 不能用作ActionForm,并且需要在配置文件中定義ActionForm。e.g.public class LogonForm extends ActionForm {

private String userpassword;

private String username;}

Struts2 直接使用Action屬性來封裝用戶請求屬性,避免了開發(fā)者需要大量開發(fā)ActionForm類的煩瑣,實(shí)際上,這些屬性還可以是包含子屬性的 Rich對象類型。e.g.public class ExampleAction {

private String responseMessage;private String requestMessage;

public String getResponseMessage(){

return responseMessage;}

public void setResponseMessage(String responseMessage){

this.responseMessage = responseMessage;}

public String getRequestMessage(){

return requestMessage;

} } public void setRequestMessage(String requestMessage){ } this.requestMessage = requestMessage;public String doSomething(){

} setMessage(“Hi, ” + getRequestMessage());return “success”;EL Struts1 整合了 JSTL,因此可以使用JSTL 表達(dá)式語言。JSTL有基本對象圖遍歷,但在對集合和索引屬性的支持上則功能不強(qiáng)。在向視圖綁定值時(shí),Struts1 使用標(biāo)準(zhǔn)JSP 機(jī)制把對象綁定到視圖頁面。

Struts2 Struts 2 可以使用JSTL,但它整合了一種更強(qiáng)大和靈活的表達(dá)式語言:OGNL(Object Graph Notation Language),因此,Struts 2 下的表達(dá)式語言功能更加強(qiáng)大。在向視圖綁定值時(shí),Struts2 使用“ValueStack ”技術(shù),使標(biāo)簽庫能夠訪問值,而不需要把對象和視圖頁面綁定在一起。

校驗(yàn)框架

Struts1 Struts1 支持在 ActionForm 重寫validate 方法中手動(dòng)校驗(yàn),或者通過整合 Commons-validator 框架來完成數(shù)據(jù)校驗(yàn)。

Struts2 Struts 2 支持通過重寫validate方法進(jìn)行校驗(yàn),也支持整合XWork 校驗(yàn)框架進(jìn)行校驗(yàn)。Struts2 architacture

名詞約定

凡是代碼、配置文件、IDE中出現(xiàn)的名詞,均采用英文原稱。

Roadmap 本文檔的目標(biāo)是,幫助讀者在Eclipse中將Struts2集成至一個(gè)嶄新的Dynamic Web Project。集成步驟大致如下:配置Struts2的代碼環(huán)境-> 在web.xml中加入Struts2功能-> 測試Struts2。文檔目標(biāo)達(dá)成的標(biāo)志是:頁面請求能夠通過Struts2的Action Mapping成功轉(zhuǎn)發(fā),并且基于Java的Struts2驗(yàn)證框架能夠生效。

集成步驟

引入Struts2相關(guān)的jar文件

Struts2 jars ? ? ? ? ? ? ? ? ? ? commons-fileupload-1.2.2.jar commons-io-2.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar freemarker-2.3.16.jar javassist.jar jstl-1.2.jar ognl-3.0.1.jar struts2-core-2.2.3.jar xwork-core-2.2.3.jar 加入build path 將以上10個(gè)jar文件,拷貝至WebContent/WEB-INF/lib下:

對于Web Dynamic Project,一般情況下,當(dāng)你向lib目錄下copy了jar文件,eclipse會(huì)自動(dòng)將jar文件加入build path下的名為Web App Libraries的Library。請確認(rèn)在工程下出現(xiàn)了名為Web App Libraries的Library。如果有,說明這些jar文件已經(jīng)被添加至build path了:

如果在工程目錄下找不到名為Web App Libraries的Library,說明jar文件沒有被添加至build path,需要進(jìn)行手動(dòng)添加。首先進(jìn)入build path設(shè)置界面,選中Libraries 頁,并點(diǎn)擊Add JARs:

在JAR Selection窗口中,選中l(wèi)ib下所有的jar文件。選中后點(diǎn)擊OK:

你將看到被選中的jar文件已經(jīng)被添加至build path:

在工程中會(huì)出現(xiàn)一個(gè)名為Referenced Libraries的Libraries。這說明jar文件已經(jīng)被添加至build path:

以上兩種方法都可以將jar文件添加至build path,它們的效果是一樣的。

配置web.xml 添加filter 在web.xml中添加一個(gè)filter:

struts2

org.apache.struts2.dispatcher.FilterDispatcher

filter-name表示filter的名字,你可以任意決定這個(gè)名字。filter-class表示使用哪個(gè)類作為filter,從這個(gè)類的全稱來判斷,可以發(fā)現(xiàn)FilterDispatcher是Struts2提供的一個(gè)類。它是Struts2轉(zhuǎn)發(fā)請求的起點(diǎn)。在web.xml中添加一個(gè)filter-mapping:

struts2

/*

filter-mapping用來映射url和filter的映射關(guān)系。filter-name表示filter的名字,這個(gè)名字必須和之前filter聲明中的filter-name一致。url-pattern表示哪些格式的url會(huì)被此filter濾中。/*表示在此web應(yīng)用域名下,所有的地址都會(huì)被filter濾中,換言之,所有的http請求都會(huì)通過Struts2進(jìn)行轉(zhuǎn)發(fā)。

filter的作用

通過以上的配置,F(xiàn)ilterDispatcher和url與filter-name聯(lián)系在了一起。

由于在web容器中注冊了FilterDispatcher這個(gè)filter,Struts2可以收到所有http://localhost:8080/tyland-b2b 的http請求。隨后,F(xiàn)ilterDispatcher會(huì)根據(jù)我們定義的action-mapping規(guī)則,將請求分發(fā)到指定的action類以及它的攔截器棧。最后,Struts2按照action-mapping規(guī)則,將后臺(tái)計(jì)算的結(jié)果返回給指定頁面。籠統(tǒng)地來說,Struts2就是這樣工作的,所以說,F(xiàn)ilterDispatcher是Struts2工作的入口。

編寫代碼,測試Struts2 Struts2的環(huán)境已經(jīng)配置好了,基于action-mapping的轉(zhuǎn)發(fā)機(jī)制已經(jīng)可以運(yùn)行了。為了證明這一點(diǎn),請編寫一些測試jsp頁面和java代碼。

在編寫代碼的過程中,請確保代碼文件的位置如下圖所示:

代碼清單如下:

Java代碼

UserVO.java package com.tyland.b2b.vo;

// 一個(gè)Value Object(Data Model),用來存放用戶名、密碼 public class UserVO {

private String username;private String password;

// 成員變量password的getter方法。

// 在Strtus2中,用來在頁面和服務(wù)器間傳值的Value Object必須有g(shù)etter方法

public String getPassword(){

return password;

} } // 成員變量password的setter方法。

// 在Strtus2中,用來在頁面和服務(wù)器間傳值的Value Object必須有setter方法 public void setPassword(String password){ } this.password = password;// 同password

public String getUsername(){ } return username;// 同password

public void setUsername(String username){ } this.username = username;BaseAction.java package com.tyland.b2b.web.base;

import com.opensymphony.xwork2.ActionSupport;

// 為了代碼的靈活性和可擴(kuò)展性,請聲明一個(gè)BaseAction基類

// BaseAction繼承Struts2的ActionSupport,因?yàn)槲覀兿胧褂肧truts2的一些額外幫助。// 對于ActionSupport的繼承不是必須的

public class BaseAction extends ActionSupport {

private static final long serialVersionUID = ***74952195L;} UserAction.java package com.tyland.b2b.web;

import com.tyland.b2b.vo.UserVO;import com.tyland.b2b.web.base.BaseAction;

// 自定義的Action類,繼承BaseAction // 由于繼承了ActionSupport,我們可以使用Struts2默認(rèn)的action方法execute()// 由于繼承了ActionSupport,我們可以使用Struts2默認(rèn)的校驗(yàn)方法validate()public class UserAction extends BaseAction {

private static final long serialVersionUID =-7***3684190L;

// 用來在頁面和服務(wù)器之間傳遞用戶名、密碼的Value Object。變量名任意。

private UserVO userVO;

執(zhí)行。// 用來在頁面和服務(wù)器之間傳遞message變量。名稱任意。private String message;//用來在頁面和服務(wù)器之間傳遞sayHiTo變量。名稱任意。private String sayHiTo;// 用來傳值的變量必須有g(shù)etter方法 public UserVO getUserVO(){ return userVO;}

//用來傳值的變量必須有setter方法

public void setUserVO(UserVO userVO){ } this.userVO = userVO;public String getMessage(){ } return message;public void setMessage(String message){ } this.message = message;public String getSayHiTo(){ } return sayHiTo;public void setSayHiTo(String sayHiTo){ } this.sayHiTo = sayHiTo;// Override聲明說明這個(gè)方法復(fù)寫或?qū)崿F(xiàn)了父類或接口方法。

// 如action-mapping中不顯示指定別的方法,struts2會(huì)將execute()作為默認(rèn)的action方法// 返回的SUCCESS常量,來自ActionSupport,值為“success”。

// action-mapping會(huì)根據(jù)不同的返回值采取不同的轉(zhuǎn)發(fā)或頁面跳轉(zhuǎn)動(dòng)作。@Override

public String execute()throws Exception {

} System.out.println(“******execute******”);System.out.println(userVO.getUsername()+ “ logins”);return SUCCESS;

// 在Struts2執(zhí)行execute()之前,會(huì)先執(zhí)行validateExecute()進(jìn)行用戶輸入驗(yàn)證 // 這個(gè)方法名必須符合Struts2驗(yàn)證框架所規(guī)定的命名規(guī)范 public void validateExecute(){

}

} System.out.println(“******validateExecute******” + userVO.getUsername());if(null == userVO.getUsername()|| userVO.getUsername().length()< 5){ this.addFieldError(“username”, “USERNAME ERROR”);} if(null == userVO.getPassword()|| userVO.getPassword().length()< 5){ this.addFieldError(“password”, “PASSWORD ERROR”);} // 一個(gè)自定義方法。通過在action-mapping中的設(shè)置,可以實(shí)現(xiàn)使用POJO的自定義服務(wù)配置 public String sayHi()throws Exception {

} System.out.println(“say hi to ” + getSayHiTo());return SUCCESS;// 符合驗(yàn)證框架命名規(guī)范的、真對于sayHi()的驗(yàn)證方法 public void validateSayHi(){

} System.out.println(“******validateSayHi******” + getSayHiTo());if(null == getSayHiTo()|| getSayHiTo().length()< 5){ this.addFieldError(“sayHiTo”, “SAYHITO ERROR”);} ExampleAction.java package com.tyland.b2b.web;

import com.tyland.b2b.web.base.BaseAction;

public class ExampleAction extends BaseAction {

private static final long serialVersionUID =-***7281L;

private String message;private String sayHiTo;

public String getMessage(){

return message;}

public void setMessage(String message){

this.message = message;}

public String getSayHiTo(){

return sayHiTo;}

} public void setSayHiTo(String sayHiTo){ } this.sayHiTo = sayHiTo;public String finish(){

} System.out.println(“example finished”);setMessage(getSayHiTo());return SUCCESS;JSP代碼

index.jsp <%@ page language=“java” contentType=“text/html;charset=UTF-8”

pageEncoding=“UTF-8”%>

<%@ taglib uri = “http://java.sun.com/jsp/jstl/core” prefix = “c” %>

Hello World

第四篇:Struts2試題

Struts2 試題

1.struts2的執(zhí)行流程?

客戶端提交一個(gè)HttpServletRequest請求(action或JSP頁面)

請求被提交到一系列Filter過濾器,如ActionCleanUp和FiterDispatcher等

FilterDispatcher是Struts2控制器的核心,它通常是過濾器鏈中的最后一個(gè)過濾器 詢問ActionMapper是否需要調(diào)用某個(gè)action來處理

如果ActonMapper據(jù)誒的那個(gè)需要調(diào)用某個(gè)A傳統(tǒng),F(xiàn)ilterDispatcher則把請求教到ActionProxy,由其進(jìn)行處理

ActionProxy通過Configuration Manager詢問框架配置文件,找到需要調(diào)用的Action類 ActionProxy創(chuàng)建一個(gè)ActionInvocation實(shí)例,而ActionInvocation通過代理模式調(diào)用action Action執(zhí)行完畢后,返回一個(gè)result字符串,此時(shí)再按相反的順序通過Interceptor攔截器 最后ActionInvocation負(fù)責(zé)根據(jù)struts配置文件中配置的result元素,找到與返回值對應(yīng)的result

2.struts2的web里需要配置什么?

1. 2. 3.struts2 4. 5.org.apache.struts2.dispatcher.FilterDispatcher 6. 7. 8. 9. 10.struts2 11./* 12.

3.struts.xml文件哪個(gè)常量可以實(shí)現(xiàn)不用重新啟動(dòng)服務(wù)就可以得到反饋? ?

4.struts中的package的作用是什么?namespace可以為空嗎?如果namespace為空會(huì)意味著什么呢?

標(biāo)識(shí)

可以、Timmer

如果沒寫,說明該包為默認(rèn)空間 只要敲index沒有精確對應(yīng)的package都交給namespackage 如果還沒有就崩潰

5.Action 的實(shí)現(xiàn)通集成常用那種方法? 一種是直接實(shí)現(xiàn)自己的Action 另一種是實(shí)現(xiàn)Action的接口 繼承ActionSupport

6.路徑設(shè)置用什么路徑,絕對還是相對? 都可以

7.通配符有幾種?要遵循什么原則? {1}

方法名

8.Action的屬性?

path屬性:指定請求訪問Action的路徑

type屬性:指定Action的完整類名

name屬性:指定需要傳遞給Action的ActionForm Bean scope屬性:指定ActionForm Bean的存放范圍

validate屬性:指定是否執(zhí)行表單驗(yàn)證

input屬性:指定當(dāng)表單驗(yàn)證失敗時(shí)的轉(zhuǎn)發(fā)路徑。

元素還包含一個(gè)子元素,它定義了一個(gè)請求轉(zhuǎn)發(fā)路徑。

9.用于讀取資源文件,實(shí)現(xiàn)國際化的Struts2的標(biāo)簽()。

10.一下關(guān)于struts的描述中,不正確的是(D)struts 是一個(gè)基于JAVA EE的MVC struts2的框架配置文件是struts-configxml struts2的控制組建核心包括核心控制和業(yè)務(wù)控制器

在struts中解決中文亂碼可以通過修改struts。I18n。encoding的值為GBK來實(shí)現(xiàn) 11.不屬于Struts2的動(dòng)作類的常量返回值的是(C)

A.success

B.input

C.never

D.login 12.一下不屬于Struts2動(dòng)作執(zhí)行的結(jié)果類型是(A)a.a(chǎn)ction b.redirect c.redirectAction d.dispatcher 13.在struts.xml中。假如在一個(gè)package中沒有配置namespace,那么在其中配置一個(gè)Action名字叫做login,它的result是這樣配置的/login.jsp,已知在此配置文件中還有另一個(gè)name為user的package其中也有一個(gè)Action名字為login,它的result是這樣配置的/loginUser.jsp那么在以下什么情況下將能訪問到login.jsp A A.在根路徑后輸入/login B.在根路徑后輸入/user/login C.在根路徑后輸入/login/user D.在根路徑后輸入/abc/login

14.正規(guī)開發(fā)中,在使用struts2時(shí)定義Action使用哪種方式。B A.直接定義Action類。B.從ActionSupport繼承。C.從Action繼承。D.實(shí)現(xiàn)Action接口。

15.不同的線程在調(diào)用Action時(shí)創(chuàng)建幾個(gè)Action實(shí)例。C A.1個(gè) B.2個(gè)

C.每個(gè)線程創(chuàng)建1個(gè)。D.可以自定義配置。

16.struts2的體系結(jié)構(gòu)主要包括那幾個(gè)部分(A)A.模型層

B.struts控制器組件 C。struts配置文件 D。struts標(biāo)簽庫

17.struts提供了Action接口定義了5個(gè)標(biāo)準(zhǔn)字符串常量,不包括的有(C)A SUCCESS

B NONE C REG D LOGIN 18.struts中數(shù)據(jù)驗(yàn)證失敗時(shí),通過(B)標(biāo)簽顯示錯(cuò)誤信息。A

B

C

D

19.列舉出action執(zhí)行結(jié)果類型,并說明用途。

默認(rèn)結(jié)果類型是dispatcher chain:Action鏈?zhǔn)教幚淼慕Y(jié)果類型,也就是將結(jié)果轉(zhuǎn)發(fā)到這個(gè)action中。dispatcher:用于整合JSP的結(jié)果類型

redirect:實(shí)際上dispatcher和redirect的區(qū)別就是在于轉(zhuǎn)發(fā)和重定向的區(qū)別。redirect-action:重定向action

20.簡述struts2文件上傳的方法。

Commons FileUpload通過將HTTP的數(shù)據(jù)保存到臨時(shí)文件夾,然后Struts使用fileUpload攔截器將文件綁定到Action的實(shí)例中。從而我們就能夠以本地文件方式的操作瀏覽器上傳的文件。

21.在struts2標(biāo)簽內(nèi)部 能否使用el表達(dá)式?

不可

22.struts2中result-type的chain和redirectAction的區(qū)別

chain,它是一個(gè)璉式的,是從一個(gè)Action轉(zhuǎn)發(fā)另外一個(gè)Aciton redirectAction,是從新請求一個(gè)Action

23.能否取到Httpsession的值 不可

24.action的name里邊寫的名字是什么地方用的? From 表單action引用

25.action的class里面寫的是什么? Action相應(yīng)類的詳細(xì)路徑

26.action的extends里面調(diào)用的是什么?

從另外一個(gè)包繼承、相當(dāng)于擁有即承包的所有配置

27.如果不寫action的后面mothod,默認(rèn)的調(diào)用的方法是什么,如果寫的話,寫的時(shí)候有什么需要注意的?

不寫會(huì)默認(rèn)調(diào)用最上面的方法

28.輸出值的strtus標(biāo)簽是什么?

s:property

28.循環(huán)的struts標(biāo)簽是什么?

s:iterator

29.判斷的strtuts標(biāo)簽是什么?

s:if

30.顯示文本的strtuts標(biāo)簽是什么?

31.要調(diào)用struts標(biāo)簽需要導(dǎo)入什么? <%@taglib uri=“/struts-tags” prefix=“s”%>

32.如果需要調(diào)用sc:datetimepicker需要導(dǎo)入什么,sc代表的是什么意思?

33.中的s代表的是什么,這個(gè)標(biāo)簽是干什么用的?

獲取前臺(tái)文本的值

34.請簡述前臺(tái)提交后是如何到達(dá)后臺(tái)action的。

通過from表單action找到struts配置文件相應(yīng)action的類 再去找相應(yīng)action類里的方法

第五篇:struts2課件

—高級軟件人才實(shí)作培訓(xùn)專家!Struts2的啟動(dòng)配置在struts1.x中,struts框架是通過Servlet啟動(dòng)的。在struts2中,struts框架是通過Filter啟動(dòng)的。他在web.xml中的配置如下:struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*在FilterDispatcher的init()方法中將會(huì)讀取類路徑下默認(rèn)的配置文件struts.xml完成初始化操作。注意:struts2讀取到struts.xml的內(nèi)容后,會(huì)將內(nèi)容封裝進(jìn)javabean對象并存放在內(nèi)存中,對于用戶每次請求的處理將使用內(nèi)存中的數(shù)據(jù),而不是每次請求都讀取struts.xml文件

—高級軟件人才實(shí)作培訓(xùn)專家!Struts2的配置文件Struts2默認(rèn)的配置文件為struts.xml,F(xiàn)ilterDispatcher過濾器在初始化時(shí)將會(huì)在WEB-INF/classes下尋找該文件,該文件的配置模版如下:

—高級軟件人才實(shí)作培訓(xùn)專家!第一個(gè)Struts2應(yīng)用Struts2默認(rèn)的配置文件為struts.xml,F(xiàn)ilterDispatcher過濾器在初始化時(shí)將會(huì)在WEB-INF/classes下尋找該文件,該文件的配置模版如下:

/WEB-INF/page/hello.jsp —高級軟件人才實(shí)作培訓(xùn)專家!第一個(gè)Struts2應(yīng)用例子中使用到的cn.itcast.action.HelloWorldAction類如下:package cn.itcast.action;public class HelloWorldAction{private String message;public String getMessage(){return message;}public void setMessage(String message){this.message = message;}public String execute()throws Exception{this.message = “我的第一個(gè)struts2應(yīng)用”;return “success”;}} 2

—高級軟件人才實(shí)作培訓(xùn)專家!第一個(gè)Struts2應(yīng)用例子中使用到的/WEB-INF/page/hello.jsp如下:<%@ page language=“java” pageEncoding=“UTF-8”%>第一個(gè)struts2應(yīng)用${message }

下載Struts2的體系結(jié)構(gòu)[樣例5]word格式文檔
下載Struts2的體系結(jié)構(gòu)[樣例5].doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    Struts2習(xí)題

    Struts2習(xí)題1 1.struts中的package的作用是什么?namespace可以為空嗎?如果namespace為空會(huì)意味著什么呢? 標(biāo)識(shí)、 可以 、如果沒寫,說明該包為默認(rèn)空間 2.Action 的實(shí)現(xiàn)通集成常......

    struts2復(fù)習(xí)題(含答案)

    Struts2復(fù)習(xí)題 1. 以下屬于struts2的控制器組件是: A.ActionB.ActionForm C.ActionServlet D.dispatchAction 2. 以下屬于struts2配置文件中的配置元素是:(多選) A. B. C. D......

    struts2綜合試卷范文合集

    Struts2學(xué)習(xí)增強(qiáng)練習(xí)課程名稱: Struts2學(xué)習(xí)增強(qiáng)練習(xí)考試時(shí)間 xx分鐘(閉卷■) 不定項(xiàng)選擇題 1. 開發(fā)struts2 web項(xiàng)目,需要導(dǎo)入哪些jar包 A 必須導(dǎo)入struts2 解壓lib下所有......

    struts2代碼分析

    1. Struts2架構(gòu)圖和請求處理流程 請求首先通過Filter chain,F(xiàn)ilter主要包括ActionContextCleanUp,它主要清理當(dāng)前線程的ActionContext和Dispatcher;FilterDispatcher主要通過Ac......

    struts2知識(shí)總結(jié)

    struts2知識(shí)總結(jié) 1.全局的邏輯控制器為一個(gè)過濾器,負(fù)責(zé)過濾所有的請求。該過濾器引用的API類為org.apache.struts2.disapatcher.FilterDispatcher 2.MVC:頁面請求(jsp)—......

    局域網(wǎng)的體系結(jié)構(gòu)(合集)

    商丘工學(xué)院畢業(yè)論文(設(shè)計(jì)) 摘要 在這個(gè)“網(wǎng)絡(luò)就是計(jì)算機(jī)”的時(shí)代,伴隨著有線網(wǎng)絡(luò)的廣泛應(yīng)用,以快捷高效,組網(wǎng)靈活為優(yōu)勢的無線網(wǎng)絡(luò)技術(shù)也在飛速發(fā)展。無線局域網(wǎng)是計(jì)算機(jī)網(wǎng)絡(luò)與無......

    體系結(jié)構(gòu)實(shí)驗(yàn)報(bào)告5篇

    中南大學(xué)軟件學(xué)院 學(xué)生姓名:所在學(xué)院:學(xué)生學(xué)號(hào):學(xué)生班級:指導(dǎo)老師:完成日期:軟件體系結(jié)構(gòu) 設(shè)計(jì)模式實(shí)驗(yàn)報(bào)告 宋昂軟件學(xué)院 3901080115 軟件0801 劉偉 2010-12-7 一、實(shí)驗(yàn)?zāi)康?.....

    軟件體系結(jié)構(gòu)期末考試

    軟件體系結(jié)構(gòu)期末考試 一、題目(論述題): 結(jié)合參與開發(fā)的軟件工程項(xiàng)目,①論述采用的軟件體系結(jié)構(gòu)風(fēng)格或應(yīng)用框架,②論述采 用的軟件設(shè)計(jì)基本原則和策略。 二、題目要求: (1)簡要說明......

主站蜘蛛池模板: 日韩a片无码一区二区五区电影| 亚洲a∨天堂男人无码| 中国女人做爰视频| 亚无码乱人伦一区二区| 亚洲av午夜福利精品一区| 亚洲午夜无码久久久久小说| 亚洲精品久久午夜无码一区二区| 国产∨亚洲v天堂无码久久久| 亚洲精品无码成人片久久不卡| 国产超薄肉色丝袜视频| 九九热在线视频观看这里只有精品| 在线日韩av永久免费观看| 免费观看交性大片| 果冻国产精品麻豆成人av电影| 亚洲日韩中文字幕在线不卡最新| 婷婷五月深爱综合开心网| 无码av一区二区三区无码| 亚洲中文字幕在线第六区| 亚洲欧洲精品a片久久99| 国产成人理论无码电影网| 日本三级韩国三级欧美三级| 五月丁香综合激情六月久久| 国产成人综合怡春院精品| 青青草无码国产亚洲| 中文天堂网www新版资源在线| 少妇特黄a片一区二区三区| 波多野结衣av在线无码中文18| 老熟妇高潮一区二区三区| 亚洲国内精品自在线影院| 午夜亚洲理论片在线观看| 狠狠躁夜夜躁人人爽天天天天| 国产尤物精品视频| 亚洲国产日韩制服在线观看| 国产99视频精品免费专区| 国产极品jk白丝喷白浆图片| 成人亚洲欧美一区二区三区| 影音先锋亚洲成aⅴ人在| 又硬又粗进去好爽免费| 麻豆国产AV超爽剧情系列| 欧美肥胖老妇bbw| 丰满人妻熟妇乱又伦精品视|