小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用WorkShop頁(yè)面流來(lái)保存用戶數(shù)據(jù)

 smoking_boy 2005-09-17
文章摘要:傳統(tǒng)的JSP編程中用戶數(shù)據(jù)的存放一般都放在與用戶交互的session對(duì)象中,session對(duì)象的管理是通過(guò)編程者來(lái)進(jìn)行手工控制,或者是通過(guò)session的失效來(lái)進(jìn)行數(shù)據(jù)的清除。本文介紹了Workshop頁(yè)面流給予開(kāi)發(fā)人員管理用戶數(shù)據(jù)對(duì)象的方法,用戶無(wú)需進(jìn)行手工管理,頁(yè)面流會(huì)對(duì)你的數(shù)據(jù)進(jìn)行自動(dòng)管理。

一.頁(yè)面流介紹
WorkShop頁(yè)面流(Page Flow)是架構(gòu)在struts基礎(chǔ)上的,對(duì)action和controller的一層封裝,頁(yè)面流將表單驗(yàn)證和表單數(shù)據(jù),以及action處理集中到一個(gè)jpf(Java Page Flow)文件中,可以很方便的進(jìn)行維護(hù)和使用,同時(shí)pageflow對(duì)頁(yè)面之間的跳轉(zhuǎn)等頁(yè)面邏輯也是一種圖形化的開(kāi)發(fā),頁(yè)面之間關(guān)系一目了然,也省去了我們手工編輯struts-config.xml文件帶來(lái)的錯(cuò)誤和麻煩.頁(yè)面流中的錯(cuò)誤提示功能能很大程度的方便開(kāi)發(fā)者對(duì)錯(cuò)誤頁(yè)面進(jìn)行修改,避免了部署到服務(wù)器才發(fā)現(xiàn)錯(cuò)誤的周折. 頁(yè)面流還提供許多向?qū)б宰詣?dòng)執(zhí)行常見(jiàn)任務(wù)和圖形化顯示標(biāo)記庫(kù)。


二.頁(yè)面流管理數(shù)據(jù)
頁(yè)面流有個(gè)顯著的特性就是:當(dāng)用戶在頁(yè)面流的作用域內(nèi)導(dǎo)航時(shí),為每個(gè)用戶會(huì)話保留一個(gè)處于活動(dòng)狀態(tài)的頁(yè)面流控制類的實(shí)例。當(dāng)用戶退出頁(yè)面流時(shí),此實(shí)例結(jié)束??梢允褂庙?yè)面流類中的實(shí)例成員變量保存用戶會(huì)話狀態(tài)。

借助頁(yè)面流這個(gè)顯著的特性,我們可以最大程度的實(shí)現(xiàn)我們的顯示邏輯而又不增加對(duì)server的負(fù)擔(dān).。

對(duì)于比較復(fù)雜的系統(tǒng),往往一些地方需要使用session來(lái)保存數(shù)據(jù),作為數(shù)據(jù)的載體.而放在session中的這些東西如果沒(méi)有使用完及時(shí)清除,那么一但我們過(guò)分依賴于這種方式,session中的數(shù)據(jù)將會(huì)是很多,而session中保存大量的數(shù)據(jù)會(huì)減慢jsp的執(zhí)行速度和增加服務(wù)器的負(fù)擔(dān)。雖然用戶的session會(huì)隨著用戶退出系統(tǒng)或者session的timeout來(lái)進(jìn)行處理, 但是這種情況也會(huì)增加垃圾收集時(shí)間的消耗和服務(wù)器的負(fù)擔(dān),而且這種處理也不具有即使性。

而頁(yè)面流能夠較大程度上分解這種大量數(shù)據(jù)的保存.對(duì)于一個(gè)系統(tǒng)我們可以分成多個(gè)頁(yè)面流來(lái)進(jìn)行處理.每個(gè)頁(yè)面流負(fù)責(zé)他所控制頁(yè)面的變量生命周期.子系統(tǒng)內(nèi)通過(guò)頁(yè)面流來(lái)作為數(shù)據(jù)傳遞的載體.而一旦用戶退出這個(gè)頁(yè)面流,那么當(dāng)前頁(yè)面流也會(huì)被立即清除掉,而不會(huì)給系統(tǒng)帶來(lái)很大的負(fù)擔(dān)。
例如我們要在頁(yè)面間共享自定義的地址對(duì)象Addr(不考慮reqest對(duì)象傳值的情況)

傳統(tǒng)的方式把Addr放在session中,對(duì)象生命周期和session一樣,除非你顯示的remove掉
session.setAttribute("Addr",Addr);

頁(yè)面流的方式把Addr放在頁(yè)面流中,該對(duì)象生命周期和這個(gè)頁(yè)面流一樣.

public class TestController extends PageFlowController
{
Addr addr;

public void setAddr(Addr addr){
this.addr = addr;
}

public Addr getAddr(){
return this.addr;
}
............
............
}

從上面我們可以看出,對(duì)于第一種方式我們?cè)谡{(diào)用時(shí)需要從session中取值, 而頁(yè)面流在Action(當(dāng)前頁(yè)面流的Action)中調(diào)用時(shí),直接使用addr就可以了.對(duì)于屬于該頁(yè)面流管轄的jsp中調(diào)用Addr變量也非常簡(jiǎn)單.如下

TestController testCtrl =(TestController)PageFlowUtils.getCurrentPageFlow(request) //request對(duì)象為jsp內(nèi)置的request對(duì)象.
Addr addr = testCtrl.getAddr(); //也可以進(jìn)行set操作.

有了頁(yè)面流我們?cè)陧?yè)面共享變量的存放上也不用太擔(dān)心了,頁(yè)面流會(huì)管理我們對(duì)象的生命周期.頁(yè)面流中的對(duì)象也不需要像session中顯式的刪除掉了.

頁(yè)面流的銷毀是通過(guò)用戶退出當(dāng)前頁(yè)面流的操作時(shí)而銷毀的.比如當(dāng)用戶由一個(gè)頁(yè)面流直接轉(zhuǎn)向另一個(gè)頁(yè)面流或是轉(zhuǎn)向不屬于本頁(yè)面流管轄的頁(yè)面,但這種情況并不包含嵌套頁(yè)面流的情況,因?yàn)榍短醉?yè)面流在調(diào)用前會(huì)將當(dāng)前頁(yè)面流壓棧,當(dāng)嵌套頁(yè)面流調(diào)用完畢后,當(dāng)前頁(yè)面流再出棧進(jìn)行操作。

我們可以把頁(yè)面流看作是一個(gè)函數(shù),而其中的局部變量就是我們頁(yè)面中要進(jìn)行局部共享的對(duì)象。

三.頁(yè)面流中全局變量的管理
頁(yè)面流中全局變量的管理是放在Global.app(位于WEB-INF/src/global下)對(duì)象中進(jìn)行的。該對(duì)象控制頁(yè)面流間的跳轉(zhuǎn),處理頁(yè)面流中沒(méi)有定義的Action或者異常,這里也就是我們處理全局方法(如error,exception)的一個(gè)地方。只要任何一個(gè)頁(yè)面流被創(chuàng)建前就會(huì)產(chǎn)生這個(gè)全局的對(duì)象并存放在session中,除了顯示的刪除該對(duì)象外,該對(duì)象一直存在,直到session無(wú)效。

對(duì)這個(gè)全局變量的訪問(wèn)也和頁(yè)面流中一樣.例如我們要存儲(chǔ)和讀取一個(gè)登陸后的用戶對(duì)象User.
public class Global extends GlobalApp{
User user;

public void setUser(User user){
this.user = user;
}

public user getUser(){
return this.user;
}
............
............

}

那么我們?cè)诘顷懞笳{(diào)用這個(gè)全局變量進(jìn)行用戶對(duì)象的存儲(chǔ).
jsp中調(diào)用如下:
User usr = new User(.......);
Global global =(Global)PageFlowUtils.getGlobalApp(request);
global.setUser(user);

頁(yè)面流中的調(diào)用和jsp中的有所不同.默認(rèn)在頁(yè)面流類中會(huì)看到下面的聲明

// Uncomment this declaration to access Global.app.
//
// protected global.Global globalApp;
//

默認(rèn)是將該全局對(duì)象聲明注釋掉,如果我們?cè)陧?yè)面流對(duì)象中要使用全局變量,反注釋掉聲明就可以使用了,此全局對(duì)象是在頁(yè)面流創(chuàng)建時(shí)初始化的.我們要調(diào)用全局變量如下就行了.

globalApp.getUser();

在頁(yè)面流中我們可以也可以訪問(wèn)request,response,session等對(duì)象,頁(yè)面流提供getRequest(),getResponse(),getSession()方法訪問(wèn)這些對(duì)象。值的注意的是利用TestBrowser進(jìn)行調(diào)試時(shí),如果有彈出式窗口,彈出的將是IE的一個(gè)窗口,session等對(duì)象的值不會(huì)傳給該彈出式窗口,這是TestBrowser的一個(gè)Bug,在IE中運(yùn)行是沒(méi)有問(wèn)題的,所以在調(diào)試彈出式窗口時(shí)一定要注意。


四.文章總結(jié)
以上對(duì)workshop的頁(yè)面流的生命周期以及使用方法進(jìn)行了大體的介紹.在具體使用頁(yè)面流時(shí),可以充分利用頁(yè)面流的優(yōu)點(diǎn),使用頁(yè)面流對(duì)用戶數(shù)據(jù)進(jìn)行管理,減輕session負(fù)擔(dān),使我們的程序更加健壯,更易維護(hù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多