Struts2流程機制

2021-06-23 05:38:39 字數 3924 閱讀 8539

ssh框架的學習已經有一段時間了,從一開始的略略牴觸,到現在的樂意主動去研究,經歷了很有趣的過程。從開始的先去接受,到逐漸的、一點點的開始理解機制,過程很享受。

對struts2的機制的研究已略略有了小的成果,分享給大家。

我們只負責

action

和jsp

頁面的編寫,資料的準備及其他工作都是由

struts

2內部給我們做好了處理。

頁面乙個請求傳送過來,依次經過

一系列***

(處理公共部分

,如:往資料中心(值棧

)填充資料,所處理工作與業務無關),

介紹其中的兩個***:

modeldriven

、params;

——乙個請求過來,首先

建立乙個值棧物件

,初始化,然後

在map

和物件棧中放入一些資料

中:request=…,

session=…,,

attr=…,

parameters=…;

物件棧中:action

物件,…

初始化完之後,還會經過很多***,其中乙個***

modeldriven

(封裝

model

,把model放入物件棧的棧頂)

,乙個***

params

(

引數封裝,放入引數

);action

中實現modeldriven<>

,並實現它的方法:

public class roleactionextends actionsupport implements modeldriven

}modeldriven的作用:

model

物件放入物件棧棧頂

(原來棧頂是

action,

現在棧頂是

model了)

params***的作用:封裝引數。

如何封裝?——做了兩件事:第一,先到物件棧中封裝;第二,再到

map中封裝;

例子:假如,現在物件棧中有

model

物件在(

含有id

、name屬性)

在棧頂,

action物件(

含有id

、age屬性)

xx.action?id=3&name=ab&age=20&xx=00;

經過params

***時,它如何將引數封裝?

——先從棧頂開始找,依次找到id

、name

、age

屬性,通過各自的

set方法依次設值

id=3,name=ab,age=20(

注:雖然物件棧中有兩個

id屬性,但是由於

model

物件的id

屬性在棧頂,所以找到此

id屬性就設值,不會繼續往下找

),但是物件棧中沒有

xx屬性,於是戰中就沒有這個引數了,通過物件棧就無法得到

xx引數,但是

map中有

parameters

,可以把所有引數放入

parameters

中,無論在物件棧中有沒有寫屬性,在

parameters

中都能得到;

——經過一系列***之後,此時資料中心就有了資料,那我們就可以從中獲取資料

(action

、jsp

中均可從中獲取並使用);

——乙個請求。因為每傳送乙個請求過來,都要經過這樣一系列過程:***

(往值棧中壓入資料)——

>action

——>request ——

actioncontext

.getcontext()

.put(k,v);//map中放入資料

.get(k);//map中獲取資料

或:actioncontext.getcontext.getvaluestack()

.put(k,v);//map中放入資料

.get(k);//map中獲取資料

——actioncontext

.getcontext().getvaluestack()

.push(obj);//物件棧中放入資料

.pop();map中獲取資料

——通過

actioncontext

()操作

map,操作物件棧

——通過

ognl

表示式獲取

表示式的格式和語法:

格式:(1)

在struts

.xml

中的格式為:$;

(2)在

jsp中的格式為:%;

(注:只能寫在

struts2

的自定義標籤的屬性中)

語法:user

=findvalue("user");//

從棧中獲取

user屬性

#user = map.get("user"); //

從map

中獲取user物件

#user.name=map.get("user").getname();//

從map

中獲取user

物件的name屬性

(findvalue(expr))

的查詢順序:

(1),從物件棧中查詢指定名稱的屬性,從棧頂開始向下找,找到後就返回;

(2)如果從物件棧中沒有找到屬性,則從

map中查詢對應的

key值,找到後就返回。

例子:

通過此篇部落格,我們需要了解什麼?

(1)頁面乙個請求過來,struts2中依次經過了哪幾個過程?

—— 一系列***——>action——>request;

——modeldriven和params***分別的主要作用;

(2)值棧的概念?

——值棧的結構:物件棧、map;

——物件棧、map分別存放什麼資料;

(3)(1)和(2)是如何結合在一起的?

——請求過來,一開始經過***,初始化並建立物件棧,經過modeldriven和params***時,分別往值棧中封裝物件和封裝引數,分別封裝到相應的地方;此時資料中心中有就有了資料。

以上均是***為我們做的工作,我們只需寫action(通過

actioncontext

()操作

map,操作物件棧)和jsp(通過

ognl

表示式獲取棧中資料)即可。

struts2執行流程

struts 2框架本身大致可以分為3個部分 核心控制器 filterdispatcher 業務控制器 action和使用者實現的企業業務邏輯元件。核心控制器filterdispatcher是struts 2框架的基礎,包含了框架內部的控制流程和處理機制。業務控制器action和業務邏輯元件是需要使...

struts2 流程分析

在struts2框架中的處理大概分為以下幾個步驟 1 客戶端初始化乙個指向servlet容器 例如tomcat 的請求 2 這個請求經過一系列的過濾器 filter 這些過濾器中有乙個叫做actioncontextcleanup的可選過濾器,這個過濾器對於struts2和其他框架的整合很有幫助,例如...

Struts2請求流程

1 客戶端傳送請求 2 請求先通過actioncontextcleanup filterdispatcher 6 actionproxy建立乙個actioninvocation的例項 7 actioninvocation呼叫真正的action,當然這涉及到相關 的呼叫 8 action執行完畢,ac...