用過(guò)struts都清楚,struts的開(kāi)發(fā)一般要寫(xiě)兩個(gè)類(lèi),F(xiàn)ormBean和Action類(lèi),通常情況下Action是這樣的:

public???class?XXXAction??extends?Action?
{
????public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,

?????????????????????????????????HttpServletRequest?request,?HttpServletResponse?response)?throws?Exception?
{
????????XXXXForm?theform?=(XXXXForm)?form;//form的強(qiáng)制轉(zhuǎn)型
????????//這里就是你要處理的業(yè)務(wù)邏輯了?
????????return?mapping.findForward("XXXX");
????}這是一個(gè)Action最少的代碼了,它沒(méi)有處理任何邏輯,只是一個(gè)跳轉(zhuǎn),F(xiàn)ormBean的話(huà),只要繼承ActionForm,代碼到?jīng)]有規(guī)定,到時(shí),我們可能會(huì)想,每個(gè)Action里面都必須寫(xiě)上面那些代碼,煩啊,還有在每個(gè)FormBean里我們一般都會(huì)定義一些常用的屬性,如event,根據(jù)event的值,我們來(lái)決定一些邏輯的處理及頁(yè)面的跳轉(zhuǎn),每次要寫(xiě),也煩啊。
?? 好,煩的話(huà),那我們要開(kāi)始做點(diǎn)事情了,首先,寫(xiě)一個(gè)formBean代碼如下:

public?class?XXXForm?extends??ActionForm
{
????private?String?event;//事件名

????public?String?getEvent()?
{
????????return?event;
????}

????public?void?setEvent(String?event)?
{
????????this.event?=?event;
????}
}我想這誰(shuí)都應(yīng)該清楚,然后我們?cè)賹?xiě)frombean時(shí),就不要extends? ActionForm,而是extends? XXXForm了,這樣,我們省了些代碼,我們?cè)賮?lái)看Action,也這樣試試:

public?abstract?class?XXXAction??extends?Action?
{
????public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,

?????????????????????????????HttpServletRequest?request,?HttpServletResponse?response)?throws?Exception?
{
????????XXXForm?theform?=(XXXForm)?form;
????????return?mapping.findForward(doAction(theform));
????}

?????/**?*//**
??????*?處理一些業(yè)務(wù)
??????*?@param?form
??????*?@return????返回mapping指向的字符串
??????*/
???public?abstract??String?doAction(BaseForm?form);//抽象
}這樣的話(huà),我們?cè)賹?xiě)Action類(lèi)時(shí),就不extends Action而是extends XXXAction,代碼就像:

public?class?***Action?extends?XXXAction?
{

????public?String?doAction(XXXForm?form)?
{
????????***Form?theform?=?(***Form)?form;//強(qiáng)制轉(zhuǎn)成你真正的formbean
?????//這里就是你要處理的業(yè)務(wù)邏輯了???
?????return?"success";
????}
}就是以上一些代碼,簡(jiǎn)單多了吧,return一個(gè)字符串就行了,感覺(jué)還有點(diǎn)像webwork了,到此完了嗎,有沒(méi)
有什么還沒(méi)有做呢,對(duì)了,這樣的話(huà),我們定義的Action都成無(wú)會(huì)話(huà)的bean了,所以request是要得到的
,很多情況下的url是***action.do?id=cctv,而且一般是系統(tǒng)都是把用戶(hù)的信息放入session中的,所以
request是強(qiáng)烈要求要還給我們的,好,那我們來(lái)重構(gòu)下formbean和action吧,以下我們用BaseForm,及
BaseAction來(lái)定義,兩個(gè)類(lèi)都放在同一個(gè)包中

public?class?BaseForm?extends??ActionForm
{
????private?String?event;
????private?HttpServletRequest?request;

????/**?*//**
??????*?注:這個(gè)是得到用戶(hù)信息,這個(gè)只是一個(gè)例子,也可不實(shí)現(xiàn),由request得到session,再得到

user,
??????*?但reguser字符串對(duì)一般開(kāi)發(fā)人員可能是不可見(jiàn)的
??????*/

????public?User?getUser()?
{
????????return???(User)?getRequest().getSession().getAttribute("reguser");
????}

????public?HttpServletRequest?getRequest()?
{
????????return?request;
????}

????/**?*//**
??????*?注:這里用的protected,這樣可以就同一包的類(lèi)可調(diào)用,其它類(lèi)是不可見(jiàn)的
??????*/

????protected?void?setRequest(HttpServletRequest?request)?
{
????????this.request?=?request;
????}

????public?String?getEvent()?
{
????????return?event;
????}

????public?void?setEvent(String?event)?
{
????????this.event?=?event;
????}
}BaseAction代碼:

public?abstract?class?BaseAction??extends?Action?
{
????public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,
?????????????????????????????????HttpServletRequest?request,?HttpServletResponse?response)?


throws?Exception?
{
????????BaseForm?theform?=(BaseForm)?form;
????????theform.setRequest(request);//加了這句
????????return?mapping.findForward(doAction(theform));
????}

?????/**?*//**
??????*?處理一些業(yè)務(wù)
??????*?@param?form
??????*?@return????返回mapping指向的字符串
??????*/
???public?abstract??String?doAction(BaseForm?form);
}到此算為結(jié)束,可能有為會(huì)問(wèn),那還有response呢,response的話(huà),一般出現(xiàn)在內(nèi)部跳轉(zhuǎn)等情況,感覺(jué)用
的比較少,所以在此就不把它給大家了,如覺(jué)得一定要得到的話(huà),那就跟request一樣進(jìn)行設(shè)置吧,不過(guò)
萬(wàn)事都應(yīng)該有個(gè)度,自己衡量。