不借助任何web框架結(jié)構(gòu),構(gòu)建自己的MVC應(yīng)用程序(3)
Posted on 2006-11-02 10:07 城市劣人 閱讀(1060) 評(píng)論(2) 編輯 收藏已經(jīng)轉(zhuǎn)移到 好·色之徒--我的博客、我的生活
在上一篇文章中談?wù)摿擞嘘P(guān)MVC中C的部分,這里開(kāi)始說(shuō)明如何搭建M的部分,這里的M,不當(dāng)當(dāng)是簡(jiǎn)單的數(shù)據(jù)模型,更多的涉及到了業(yè)務(wù)邏輯的成分。
上一篇中的UctServlet類(lèi)實(shí)現(xiàn)了控制,提到了用于控制流程的數(shù)據(jù)庫(kù)中有一個(gè)字段alink(值為HAAap),里面的內(nèi)容就是現(xiàn)在要講解的部分。 從UctServlet,到交由具體某個(gè)類(lèi)來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯,HAAap就是這樣一個(gè)類(lèi),不需要繼承特殊的框架體系,完全有自己開(kāi)發(fā)。這里需要明確一點(diǎn),為了整個(gè)應(yīng)用體系的相對(duì)完整性,可以設(shè)計(jì)一個(gè)共通M類(lèi)(比如這里的UctApSuper),主要負(fù)責(zé)一些共通的業(yè)務(wù)和資源。HAAap繼承于它。
結(jié)合UctServlet類(lèi)的核心邏輯(可參考不借助任何web框架結(jié)構(gòu),構(gòu)建自己的MVC應(yīng)用程序(1)部分),會(huì)通過(guò)反射機(jī)制首先調(diào)用某M類(lèi)(HAAap)的apexec方法。所以對(duì)共通M類(lèi)(UctApSuper)有這樣的設(shè)計(jì):
public UctApSuper() {
DBA = new uct.UctDBIO(); //數(shù)據(jù)源設(shè)定
sUser = new uct.UctUser(); //UctUser
psApName = UctUser.getApName();
}
public void apexec(HttpServletRequest preq, HttpServletResponse pres,
HttpSession phtss) throws IOException, ServletException {
try {
this.req = preq;
this.res = pres;
this.uses = phtss;
uhData = this.getPVal(); // Window畫(huà)面所有的key-value值對(duì),uhData是Hashtable
res.setContentType("text/html");
} catch (Throwable e) {
System.out.println("ApSuper.apexec Throwable = " + e);
this.errPage(req, res, psApName, "ApSuper.apexec :ERROR=" + e);
}
}
設(shè)置了一些共通需要的資源
除了上面的以外,在UctApSuper類(lèi)中還有比如:apfCallJsp(成功后調(diào)用jsp資源)、errPage(失敗后調(diào)用錯(cuò)誤資源)等等共通的處理,具體的實(shí)現(xiàn)方式以后源碼下載中會(huì)提供。
下面描述一下具體的M類(lèi)(HAAap),它繼承于UctApSuper類(lèi),給出一些代碼片斷:
public class HAAap extends UctApSuper {
//定義一些畫(huà)面(通常一個(gè)M類(lèi)會(huì)管理從List-input-confirm畫(huà)面的過(guò)程)
private String psListJSP = "HAA/H01010";
private String psInputJSP = "HAA/H01020";
private String psConfirmJSP = "HAA/H01030";
public HAAap() {
}
這里我再列出上一篇文章中提到的控制流程的數(shù)據(jù)表
alink atype window_id action_id
HAAap BEAN WIN_HGA HAA ----年度計(jì)劃畫(huà)面 初始的一種狀態(tài)
HAAap BEAN WIN_HGA SRDT ----SRDT表示年度計(jì)劃畫(huà)面上的檢索功能
HAAap BEAN WIN_HGA DTIL ----DTIL表示年度計(jì)劃畫(huà)面上的詳細(xì)畫(huà)面功能
/**
* 按照畫(huà)面url上的 ?Window=WINHGA&Action=HAA,來(lái)判斷應(yīng)該進(jìn)入那一邏輯部分
*/
public void apexec(HttpServletRequest preq, HttpServletResponse pres, HttpSession phtss) {
try {
//UctApSuper類(lèi)的apexec方法,設(shè)置共通資源
super.apexec(preq, pres, phtss);
//取得參數(shù)Action值,以確認(rèn)進(jìn)入那一邏輯部分
sEventType = getPVal("Action");
apinit(); // 該M的一般初始化處理
//判斷進(jìn)入那一邏輯部分
if (sEventType.equalsIgnoreCase("HAA")) {
apmInit(); // 初始畫(huà)面
} else if (sEventType.equalsIgnoreCase("RINS")) {
apmNew(); // 新增加畫(huà)面
} else if (sEventType.equalsIgnoreCase("DTIL")) {
apmDetails(); // 詳細(xì)畫(huà)面
} else {
this.apfFwkErr(sEventType);
}
//共通結(jié)束處理
apexit();
} catch (Exception e) {
errPage(req, res, "apexec", e); // ERROR
} finally {
}
}
下面依次是apinit();apmInit();apmNew(); ......等的具體處理內(nèi)容,舉一例:
private void apmDetails() {
try {
...業(yè)務(wù)邏輯
apfCallJsp(psInputJSP); // 調(diào)用JSP資源
} catch (Exception e) {
errPage(req, res, "apmDetails", e); // ERROR
} finally {
}
}
}
這些就是M類(lèi)的處理過(guò)程,代碼作了相應(yīng)修改
不借助任何web框架結(jié)構(gòu),構(gòu)建自己的MVC應(yīng)用程序(3)?? 有個(gè)論壇
在上一篇文章中談?wù)摿擞嘘P(guān)MVC中C的部分,這里開(kāi)始說(shuō)明如何搭建M的部分,這里的M,不當(dāng)當(dāng)是簡(jiǎn)單的數(shù)據(jù)模型,更多的涉及到了業(yè)務(wù)邏輯的成分。
上一篇中的UctServlet類(lèi)實(shí)現(xiàn)了控制,提到了用于控制流程的數(shù)據(jù)庫(kù)中有一個(gè)字段alink(值為HAAap),里面的內(nèi)容就是現(xiàn)在要講解的部分。 從UctServlet,到交由具體某個(gè)類(lèi)來(lái)實(shí)現(xiàn)業(yè)務(wù)邏輯,HAAap就是這樣一個(gè)類(lèi),不需要繼承特殊的框架體系,完全有自己開(kāi)發(fā)。這里需要明確一點(diǎn),為了整個(gè)應(yīng)用體系的相對(duì)完整性,可以設(shè)計(jì)一個(gè)共通M類(lèi)(比如這里的UctApSuper),主要負(fù)責(zé)一些共通的業(yè)務(wù)和資源。HAAap繼承于它。
結(jié)合UctServlet類(lèi)的核心邏輯(可參考不借助任何web框架結(jié)構(gòu),構(gòu)建自己的MVC應(yīng)用程序(1)部分),會(huì)通過(guò)反射機(jī)制首先調(diào)用某M類(lèi)(HAAap)的apexec方法。所以對(duì)共通M類(lèi)(UctApSuper)有這樣的設(shè)計(jì):
public UctApSuper() {
DBA = new uct.UctDBIO(); //數(shù)據(jù)源設(shè)定
sUser = new uct.UctUser(); //UctUser
psApName = UctUser.getApName();
}
public void apexec(HttpServletRequest preq, HttpServletResponse pres,
HttpSession phtss) throws IOException, ServletException {
try {
this.req = preq;
this.res = pres;
this.uses = phtss;
uhData = this.getPVal(); // Window畫(huà)面所有的key-value值對(duì),uhData是Hashtable
res.setContentType("text/html");
} catch (Throwable e) {
System.out.println("ApSuper.apexec Throwable = " + e);
this.errPage(req, res, psApName, "ApSuper.apexec :ERROR=" + e);
}
}
設(shè)置了一些共通需要的資源
除了上面的以外,在UctApSuper類(lèi)中還有比如:apfCallJsp(成功后調(diào)用jsp資源)、errPage(失敗后調(diào)用錯(cuò)誤資源)等等共通的處理,具體的實(shí)現(xiàn)方式以后源碼下載中會(huì)提供。
下面描述一下具體的M類(lèi)(HAAap),它繼承于UctApSuper類(lèi),給出一些代碼片斷:
public class HAAap extends UctApSuper {
//定義一些畫(huà)面(通常一個(gè)M類(lèi)會(huì)管理從List-input-confirm畫(huà)面的過(guò)程)
private String psListJSP = "HAA/H01010";
private String psInputJSP = "HAA/H01020";
private String psConfirmJSP = "HAA/H01030";
public HAAap() {
}
這里我再列出上一篇文章中提到的控制流程的數(shù)據(jù)表
alink atype window_id action_id
HAAap BEAN WIN_HGA HAA ----年度計(jì)劃畫(huà)面 初始的一種狀態(tài)
HAAap BEAN WIN_HGA SRDT ----SRDT表示年度計(jì)劃畫(huà)面上的檢索功能
HAAap BEAN WIN_HGA DTIL ----DTIL表示年度計(jì)劃畫(huà)面上的詳細(xì)畫(huà)面功能
/**
* 按照畫(huà)面url上的 ?Window=WINHGA&Action=HAA,來(lái)判斷應(yīng)該進(jìn)入那一邏輯部分
*/
public void apexec(HttpServletRequest preq, HttpServletResponse pres, HttpSession phtss) {
try {
//UctApSuper類(lèi)的apexec方法,設(shè)置共通資源
super.apexec(preq, pres, phtss);
//取得參數(shù)Action值,以確認(rèn)進(jìn)入那一邏輯部分
sEventType = getPVal("Action");
apinit(); // 該M的一般初始化處理
//判斷進(jìn)入那一邏輯部分
if (sEventType.equalsIgnoreCase("HAA")) {
apmInit(); // 初始畫(huà)面
} else if (sEventType.equalsIgnoreCase("RINS")) {
apmNew(); // 新增加畫(huà)面
} else if (sEventType.equalsIgnoreCase("DTIL")) {
apmDetails(); // 詳細(xì)畫(huà)面
} else {
this.apfFwkErr(sEventType);
}
//共通結(jié)束處理
apexit();
} catch (Exception e) {
errPage(req, res, "apexec", e); // ERROR
} finally {
}
}
下面依次是apinit();apmInit();apmNew(); ......等的具體處理內(nèi)容,舉一例:
private void apmDetails() {
try {
...業(yè)務(wù)邏輯
apfCallJsp(psInputJSP); // 調(diào)用JSP資源
} catch (Exception e) {
errPage(req, res, "apmDetails", e); // ERROR
} finally {
}
}
}
這些就是M類(lèi)的處理過(guò)程,代碼作了相應(yīng)修改
不借助任何web框架結(jié)構(gòu),構(gòu)建自己的MVC應(yīng)用程序(3)?? 有個(gè)論壇