架構與反射 Struts2開發過程與處理流程解析

2021-06-22 02:06:35 字數 1331 閱讀 3674

架構與反射——struts2開發過程與處理流程解析

一、struts2開發步驟:

(1)定義乙個請求頁面;

(2)開發action類,只要求(區別struts1無需與servlet耦合):

a. 為每個請求引數都提供field,並為之提供相應的setter和getter方法

b. 該action 類必須有無參的建構函式(後面介紹為什麼必須是無參的)

(3)配置action類

元素包含如下屬性

-name:指定該action處理哪個請求

-class:指定該action對應處理類

-method:指定action的哪個方法來處理使用者請求,也必須是無參的方法(後面介紹為什麼必須是無參的)。預設值為execute()

二、struts2處理流程:

(1)瀏覽器傳送請求:abc.action,.action字尾可以省略

(2)瀏覽器傳送的請求被strutsprepareandexecutefilter攔截

——這是因為我們在web.xml中指定strutsprepareandexecutefilter來過濾所有請求

(3)strutsprepareandexecutefilter會去建立action例項

——假如我們請求abc.action,strutsprepareandexecutefilter會搜尋struts.xml檔案中的name為abc的action配置,根據class屬性使用反射來建立action例項

(4)呼叫 mapparammap = request.getparametermap();//返回所有請求引數,這就是為什麼開發struts2的action無需與servlet耦合

使用迴圈for(string paramname: parammap.keyset())

(5)再次通過反射來呼叫method屬性所指定的方法,返回乙個字串

(6)根據struts.xml檔案中的元素的name以及物理檢視資源,跳轉到實際的檢視

三、模擬struts2 底層實現:

public static void main(string args)

method targetmethod = actionclazz.getmethod("regist");//這就是為什麼要求指定action的哪個方法來處理使用者請求也必須是無參的方法

string result = (string)targetmethod.invoke(actioninst);

if(result.equals("某個result的name屬性值"))

}

struts2開發心得!

1 遍歷struts2的 值棧 valuestack 和 actioncontext 及valuestack和ognlvaluestack的區別 可以通過這種方法來好好看看值棧中到底放了些什麼。對理解struts2的引數封裝有很大幫助!但是,這種方式是取不到在action中定義的屬性值的,要取得ac...

Struts2開發小結

學習使用 struts2 已經有一段時間,從 2008年9 月開始,決定使用 struts2 來開發這個新的 web專案以後,自己就一直在學習與使用這項技術。到現在應該有大概 5個月的時間了吧,除去中間找工作的 2個月,大概學習與使用的時間也有 3個月左右吧。下面簡單的把自己開發過程中的一些想法記錄...

Struts2開發步驟

定義乙個能傳送請求的頁面 即可是超連線 也可是表單.開發action類.對業務進行處理 struts2 對action 並沒有過多的要求 只要求 a.推薦實現 action 介面或繼承 actionsupport actionsupport 本身實現了 action.建議繼承actionsuppor...