publicinte***ceaction
比如,我們要實現乙個登陸系統(demo的例子),loginaction驗證使用者名稱和密碼,如果正確,返回success頁面,如果登陸失敗,返回fail頁面:
publicclassloginactionimplementsactionelse
returnactionforward.fail; //否則,返回fail
} 2.還是先來看下兩個模型:actionforward和actionmodel,沒什麼東西,屬性以及相應的getter,setter方法:
/**
* 類說明:轉向模型
* @author dennis
*
* */
publicclassactionforward
publicactionforward(string
name,string
viewurl)
//...name和viewurl的getter和setter方法
}
我們看到actionforward預先封裝了success和fail物件。
publicclassactionmodel
publicactionmodel(string
path,string
classname,
map<string
, actionforward> forwards)
//...相應的getter和setter方法
}
3。知道了兩個模型是什麼樣,也應該可以猜到我們的配置檔案大概是什麼樣的了,與struts的配置檔案格式類似:
<?xml version="1.0" encoding="utf-8"?>
"/login"
class="com.strutslet.demo.loginaction">
"success" url="hello.jsp"/>
"fail" url="fail.jsp"/>
path是在應用中將被呼叫的路徑,class指定了呼叫的哪個action,forward元素指定了轉向,比如我們這裡如果是success就轉向hello.jsp,失敗的話轉向fail.jsp,這裡配置了demo用到的loginaction。
4。dispacher介面,主要是getnextpage方法,此方法負責獲得下乙個頁面將導向**,提供給前端控制器**。
publicinte***cedispatcher
5。5。原先書中實現了乙個workflow的dispatcher,按照順序呼叫action,實現工作流呼叫。而我們所需要的是根據請求的path呼叫相應的action,執行action的execute方法返回乙個actionforward,然後得到actionforward的viewurl,將此viewurl提供給前端控制器**,看看它的getnextpage方法:
returnactionforward.getviewurl(); //返回actionforward的viewurl
}
6。前端控制器(frontcontroller),它的任務我們已經很清楚,初始化配置檔案;儲存所有action到servletcontext供整個框架使用;得到發起請求的path,提供給dispachter查詢相應的action;呼叫dispatcher,執行getnextpage方法得到下乙個頁面的url並**:
publicvoidinit()throwsservletexceptioncatch(exception
e) //例項化dispacher
trycatch(exception
e) .....
doget()和dopost方法我們都讓它呼叫process方法:
7。最後,web.xml的配置就非常簡單了,配置前端控制器,提供啟動引數(配置檔案所在位置,為空就查詢/web-inf/下面的strutslet-config.xml檔案),我們把所有以action結尾的請求都交給frontcontroller處理:
strutsletcontroller
class>com.strutslet.core.frontcontrollerclass>
0
strutsletcontroller
*.action
最後,讓我們看看整個框架圖:
設計自己的MVC框架
事實是最近讀 j2ee設計模式 講述表達層模式的那幾章,書中有乙個前端控制器 command模式的workflow例子,就琢磨著可以很簡單地擴充套件成乙個mvc框架。花了乙個下午改寫了下,對書中所述的理解更為深入。我想這也許對於學習和理解設計模式,以及初次接觸struts等mvc框架的人可能有點幫助...
打造自己的MVC框架
打造自己mvc框架 1 mvc概念 model view controller 控制器 2 psr規範 psr1 基礎程式設計規範 psr2 編碼風格規範 psr3 日誌介面規範 psr4 自動載入規範 3 命名規範 檔名和類名相同 大駝峰原則 indexcontroller 命名空間名和資料夾名相...
自己構思的MVC框架
我除了是乙個很懶惰的人,更是乙個很吝嗇的人,更加是乙個不願被約束的人。在挑選開源表示層框架時,因為懶惰,我要求 1.好學,我不希望花乙個月的時間去學習如何配置 2.好用,要真的能夠提高開發的效率,而不是把自己繞進去 因為吝嗇,我要求 3.不要過於龐大,過多的依賴其他專案,占用過多的記憶體 4.執行效...