專利名稱:一種在Struts 2下自動(dòng)生成配置文件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及web程序開發(fā)領(lǐng)域,更為具體地,涉及一種在MrutS 2下自動(dòng)生成配置文件的方法。
背景技術(shù):
Struts2 是基于 WEB 的 MVC (Model-View-Controller)框架,在 Mruts 2 中,模型 (Model),視圖(View)和控制器(Controller)分別由 Action,Result 和 FilterDispatcher 實(shí)現(xiàn),更為具體的,Model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,通??梢杂肑avaBean或EJB來實(shí)現(xiàn), View層用于與用戶的交互,通常用JSP來實(shí)現(xiàn),Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示,同時(shí)它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。換言之,控制器(Controller)的作用是映射用戶的請求到合適的Action,這里,F(xiàn)ilterDispatcher就做控制器的工作。模型(Model)包括數(shù)據(jù)和業(yè)務(wù)邏輯,在Mruts 2中,模型由Action組件實(shí)現(xiàn)。Mruts 2中有配置文件主要負(fù)責(zé)管理Mruts 2框架的業(yè)務(wù)控制器Action,負(fù)責(zé)把不同的url響應(yīng)分發(fā)到不同的Action, 因此每一個(gè)Action都需要在配置文件中對應(yīng)一條配置記錄。目前,對于在Mruts 2框架下生成配置文件的方式有兩種1、手動(dòng)方式手動(dòng)為每一個(gè)Action在配置文件中寫一條配置。2、圖形化方式在MyEclipse中有應(yīng)用,通過圖形化編輯環(huán)境,用戶只需雙擊并填寫相應(yīng)參數(shù)既可自動(dòng)生成配置對應(yīng)的一條配置。但是上述的這兩種方式,都需要單獨(dú)為每條Action進(jìn)行配置,這無疑會增加編程人員的工作量,并且也極其使得在配置過程中出錯(cuò),從而造成編程人員的工作效率降低。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種在Mruts 2下自動(dòng)生成配置文件的方法,其能夠動(dòng)態(tài)的自動(dòng)生成Mruts 2配置文件,例如在增加一個(gè)Action后,無需手動(dòng)地在配置文件中增加一條配置記錄,Web應(yīng)用程序會自動(dòng)在配置文件中增加相應(yīng)的配置,這樣,一定程度上減輕了編程人員的工作量,除此之外,還可以避免一些由編程人員在手動(dòng)修改配置的過程中出現(xiàn)的不必要的錯(cuò)誤?;谝陨?,本發(fā)明實(shí)施例的目的是通過以下技術(shù)方案實(shí)現(xiàn)的一種在Mruts 2下自動(dòng)生成配置文件的方法,包括Ajf Mruts 2部署在Web服務(wù)器上;B、在Web應(yīng)用程序每次部署時(shí),調(diào)用配置文件生成類,用以自動(dòng)生成配置文件。優(yōu)選地,在所述步驟B中,所述配置文件生成類包括Bi、確定自動(dòng)生成的配置文件的路徑,以及需要遍歷的業(yè)務(wù)邏輯方法文件的根路徑;B2、遍歷所有業(yè)務(wù)邏輯類以及業(yè)務(wù)邏輯類內(nèi)的業(yè)務(wù)邏輯方法,并根據(jù)不同的業(yè)務(wù)邏輯類及方法生成與之對應(yīng)的從配置文件;B3、將所述從配置文件寫入配置文件。更為優(yōu)選地,在所述步驟B2中,包括B21、生成package節(jié)點(diǎn),其中,對步驟Bl中的業(yè)務(wù)邏輯方法文件的根路徑進(jìn)行遍歷,根路徑以及根路徑下的每一個(gè)Java包對應(yīng)一個(gè)package節(jié)點(diǎn);B22、生成Action節(jié)點(diǎn),其中,每個(gè)package節(jié)點(diǎn)內(nèi)的Action節(jié)點(diǎn)都是根據(jù)其對應(yīng) Java包內(nèi)的類以及類內(nèi)的所有方法生成的。更為優(yōu)選地,在所述步驟B22中,對于不同的Struts2返回值類型生成不同的 Action 節(jié)點(diǎn) ο更為優(yōu)選地,所述返回值類型為plainText、dispatcher。更為優(yōu)選地,所述Action節(jié)點(diǎn)的name屬性和method屬性為對應(yīng)的業(yè)務(wù)邏輯方法的名稱,其class屬性為對應(yīng)的業(yè)務(wù)邏輯方法所在類的全路徑名。優(yōu)選地,所述Action節(jié)點(diǎn)的name屬性是所述Java包內(nèi)的相應(yīng)類的名稱,所述 class屬性是Java包內(nèi)的相應(yīng)類的全路徑名。優(yōu)選地,在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫過濾器的初始化方法 init,并在過濾器的初始化方法init中,調(diào)用配置文件生成類。優(yōu)選地,在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫krvlet的初始化方法init,并在krvlet的初始化方法init中,調(diào)用配置文件生成類。優(yōu)選地,在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫監(jiān)聽器Listener的 contex nitialized方法,并在監(jiān)聽器Listener的contex nitialized方法中,調(diào)用配置文件生成類。由上述本發(fā)明實(shí)施例的技術(shù)方案可以看出,采用本發(fā)明實(shí)施例提供的在Mruts 2 下自動(dòng)生成配置文件的方法,當(dāng)編程人員每增加一個(gè)Action即業(yè)務(wù)邏輯方法后或web應(yīng)用程序在每次Action有改動(dòng)后,程序都能夠自動(dòng)遍歷檢測出該新增加的或修改的Action,并自動(dòng)添加與此Action相對應(yīng)的配置語句到配置文件中,因此,一定程度上可以減輕編程人員的工作量,除此之外,還可以避免一些由編程人員在手動(dòng)修改配置的過程中出現(xiàn)的不必要的錯(cuò)誤。
圖1是URL、配置文件以及Action三者之間的的相互關(guān)系圖;圖2是本發(fā)明實(shí)施例提供的在Mruts 2下自動(dòng)生成配置文件的方法的流程圖;圖3是本發(fā)明實(shí)施例提供的配置文件生成類的處理方法流程圖;圖4是本發(fā)明實(shí)施例提供的生成從配置文件的方法流程圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)異效果,下面將結(jié)合具體實(shí)施例以及附圖做進(jìn)一步的說明。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明所述技術(shù)方案作進(jìn)一步的詳細(xì)描述,以使本領(lǐng)域的技術(shù)人員可以更好的理解本發(fā)明并能予以實(shí)施,但所舉實(shí)施例不作為對本發(fā)明的限定。參考圖2,依照本發(fā)明一實(shí)施例提供的在Mruts 2下自動(dòng)生成配置文件的方法, 其技術(shù)方案為一種在Mruts 2下自動(dòng)生成配置文件的方法,其包括Ajf Mruts 2部署在Web服務(wù)器上;B、在Web應(yīng)用程序每次部署時(shí),調(diào)用配置文件生成類,用以自動(dòng)生成配置文件。采用上述技術(shù)方案,編程人員每增加一個(gè)Action即業(yè)務(wù)邏輯方法后或web應(yīng)用程序在每次Action有改動(dòng)后,程序都可以自動(dòng)調(diào)用配置文件生成類,從而自動(dòng)的配置Mruts 2的配置文件。更為具體的,如圖3所示,在所述步驟B中,所述配置文件生成類包括Bi、確定自動(dòng)生成的配置文件的路徑,以及需要遍歷的業(yè)務(wù)邏輯方法文件的根路徑;B2、遍歷所有業(yè)務(wù)邏輯方法,并根據(jù)不同的業(yè)務(wù)邏輯方法生成與之對應(yīng)的從配置文件;B3、將所述從配置文件寫入配置文件。其中,所述業(yè)務(wù)邏輯方法是指具體處理URL請求的Action,其中,URL、配置文件以及Action三者之間的關(guān)系如圖1所示,界面發(fā)送的URL請求,先由配置文件攔截處理,根據(jù)配置文件中的相關(guān)配置,不同的URL請求被分發(fā)給不同的Action進(jìn)行處理,Action處理完畢后將處理結(jié)果response返回給界面。由于Mruts 2的配置文件內(nèi)定義了 Mruts 2的系列Action,定義Action時(shí),指定該Action的實(shí)現(xiàn)類實(shí)現(xiàn)方法,并定義該Action處理結(jié)果與視圖資源之間的映射關(guān)系。具體的,Action處理結(jié)果有幾種返回類型,不同的返回類型需要進(jìn)行不同的配置。且對于配置文件其有package節(jié)點(diǎn),一個(gè)package節(jié)點(diǎn)表示一個(gè)包配置,包用來管理Action和攔截器等,每個(gè)包就是多個(gè)Action以及多個(gè)攔截器的集合。package節(jié)點(diǎn)可以把一些Action節(jié)點(diǎn)組成一個(gè)邏輯單元,name屬性是package節(jié)點(diǎn)的必要元素。同一個(gè)W^eb 應(yīng)用有可能需要出現(xiàn)同名的Action,所以Mruts 2中以命名空間的方式來管理Action,同一個(gè)命名空間里不能有同名的Action,不同的命名空間里可以有同名的Action。Struts 2 不支持給單獨(dú)的Action設(shè)置命名空間,而是通過包指定namespace屬性來為包下面的所有 Action指定共同的命名空間,據(jù)此,依照圖4所示,在所述步驟B2中,其主要包括如下處理步驟B21、生成package節(jié)點(diǎn),其中,對步驟Bl中的業(yè)務(wù)邏輯方法文件的根路徑進(jìn)行遍歷,根路徑以及根路徑下的每一個(gè)Java包對應(yīng)一個(gè)package節(jié)點(diǎn),注意,這里根路徑本身也對應(yīng)一個(gè)package節(jié)點(diǎn);作為業(yè)務(wù)邏輯方法以處理相應(yīng)URL請求的Action,在代碼上實(shí)際表現(xiàn)為一個(gè)普通 Java類,Java語言中也有包package的概念,本文中對于每個(gè)Java包都生成一個(gè)package 節(jié)點(diǎn),而這個(gè)Java包下的所有Java類所生成的Action配置,都成為這個(gè)package節(jié)點(diǎn)的子節(jié)點(diǎn),即同一個(gè)Java包下的類,在配置文件中都會對應(yīng)到相同的package節(jié)點(diǎn)內(nèi)。不同的package節(jié)點(diǎn)要對應(yīng)不同的name屬性以及namespace屬性,namespace屬性值需要有一定的規(guī)律,以方便對Action的調(diào)用,因?yàn)檎{(diào)用一個(gè)Action,除了需要知道Action的name屬性,還需要知道其所在package節(jié)點(diǎn)的namespace屬性值。對步驟Bl中的業(yè)務(wù)邏輯方法文件的根路徑進(jìn)行遍歷,根路徑下的每一個(gè)Java包對應(yīng)一個(gè)package節(jié)點(diǎn)。例如Java包的全路徑為“E: \pl\p2\p3\p4”;步驟Bl中的Action 文件即業(yè)務(wù)邏輯方法文件的根路徑為“E:\pl\p2”,那么生成的package節(jié)點(diǎn)的namespace 屬性為“/p3/p4”,生成的package節(jié)點(diǎn)的name屬性為一個(gè)⑶ID和任意字符串的組合。根路徑本身也對應(yīng)一個(gè)package節(jié)點(diǎn),其namespace屬性為“/”,其name屬性為一個(gè)⑶ID和任意字符串的組合。B22、生成Action節(jié)點(diǎn),其中,每個(gè)package節(jié)點(diǎn)內(nèi)的Action節(jié)點(diǎn)都是根據(jù)其對應(yīng) Java包內(nèi)的類以及類內(nèi)的所有方法生成的。在具體操作過程中,在所述步驟B22中,針對根據(jù)與package節(jié)點(diǎn)相對應(yīng)的Java 包內(nèi)的類內(nèi)的所有方法生成Action節(jié)點(diǎn)的方式,對于不同的返回值類型生成不同的 Action節(jié)點(diǎn)。其中,所述返回值類型可以為plainTexldispatcher這兩種類型,除此之外, 還包括其他返回值類型,這里不作一一贅述。對于返回值類型為PlainText的Action方法,根據(jù)此方法具體返回的文本的格式也可以加以區(qū)分,例如json格式、xml格式。更為優(yōu)選地,所述Action節(jié)點(diǎn)的name屬性和method屬性為對應(yīng)的業(yè)務(wù)邏輯方法的名稱,其class 屬性為對應(yīng)的業(yè)務(wù)邏輯方法所在類的全路徑名。下面將以上述兩種返回值類型分別舉一實(shí)施例予以介紹(1)對于返回值類型是plainText的方法,都以‘txt’開頭,當(dāng)然也可以是任意別的標(biāo)識,這個(gè)可以根據(jù)需要自行定義。遍歷所有以‘txt’開頭的方法生成返回值類型是plainText的Action節(jié)點(diǎn),其中,所述Action節(jié)點(diǎn)的name屬性為對應(yīng)的返回值類型是 PlainText的方法的名稱,method屬性也為該方法的名稱,class屬性是該方法所在類的全路徑名。其子節(jié)點(diǎn)result的type屬性為‘plainText’,name屬性根據(jù)實(shí)際情況設(shè)置。如
下所示
〈Action name="txt\ersion" method="txtVersion" class="com.zn.test.Actions. SecureAction ">
〈result name="success" type="plainText"></result> 〈/Action〉_(2)對于返回值類型是plainText的方法,如果返回的文本格式是json格式,都以‘json’開頭,同樣也可以是任意別的標(biāo)識。遍歷所有以‘json’開頭的方法生成返回值類型是‘plainText,的Action節(jié)點(diǎn),其中,所述Action節(jié)點(diǎn)的name屬性為對應(yīng)的業(yè)務(wù)邏輯方法的名稱,method屬性也為該方法的名稱,class屬性是該方法所在類的全路徑名。其子節(jié)點(diǎn)result的type屬性為‘plainText’,其name屬性根據(jù)實(shí)際情況設(shè)置。如下所示
〈Action name="jsonlogin" method="jsonLogin" class="com.zn.test.Actions.SecureAction">
<result name="success" type="plainText"></result> </Action>_(3)對于返回值類型是plainText的方法,如果返回的文本格式是xml格式,都以 ‘ml’開頭,也可以是任意別的標(biāo)識,遍歷所有以‘xml’開頭的方法生成返回值類型是xml 的Action節(jié)點(diǎn)。其中,所述Action節(jié)點(diǎn)的name屬性為對應(yīng)方法的名稱,method屬性也為對應(yīng)方法的名稱,class屬性是方法所在類的全路徑名。其子節(jié)點(diǎn)result的type屬性為 iPlainText', name屬性根據(jù)實(shí)際情況決定。如下所示
〈Action name="xmllogin" method="xmlLogin" class=""com.zn.test.Actions.SecvireAction ">
<result name="success" type="plainText"></result> </Action>_(4)對于返回值類型是dispatcher的方法,都以‘page’結(jié)尾,當(dāng)然也可以是任意別的標(biāo)識,遍歷所有以‘page’結(jié)尾的方法生成返回值類型是dispatcher的Action節(jié)點(diǎn)。 其中,所述Action節(jié)點(diǎn)的name屬性為對應(yīng)方法的名稱,method屬性也為方法的名稱,class 屬性是方法所在類的全路徑名,其子節(jié)點(diǎn)result的name屬性根據(jù)實(shí)際情況決定。如下所示
<Action name="loginpage" method="loginPage" class="com.zn test. Actions.SecureAction">
<result>/main/loginpage.jsp</result> </Action>_同理,可以其他返回值類型的方法,也可以采用上述方式進(jìn)行處理。以上是針對方法,生成一個(gè)Action節(jié)點(diǎn),除此之外,針對與package節(jié)點(diǎn)相對應(yīng)的 Java包內(nèi)的類也可以生成Action節(jié)點(diǎn)。優(yōu)選地,所述Action節(jié)點(diǎn)的name屬性是所述Java 包內(nèi)的相應(yīng)類的名稱,所述class屬性是Java包內(nèi)的相應(yīng)類的全路徑名。這樣就可以用 ‘Action名稱!方法名’的形式,調(diào)用類內(nèi)的每個(gè)方法。但是用這種方式調(diào)用的方法只能有同一種返回值類型,根據(jù)規(guī)定的返回值類型而定,也就是依據(jù)Action節(jié)點(diǎn)的子節(jié)點(diǎn)result 的type屬性而定,例如,依照本文給出的一實(shí)施例,其返回值類型是plainText。如下所示
〈Action name="secureAction" class=" com.zn.test.Actions.SecureAction ">
〈result name="success" type="plainText"></result> 〈/Action〉_繼續(xù)參照圖1,在Web應(yīng)用程序每次部署時(shí),調(diào)用所述配置文件生成類,從而用以自動(dòng)生成配置文件的具體實(shí)施方式
有以下三種(1)在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫過濾器的初始化方法 init,并在過濾器的初始化方法init中,調(diào)用配置文件生成類。(2)在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫krvlet的初始化方法 init,并在krvlet的初始化方法init中,調(diào)用配置文件生成類。(3)在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫監(jiān)聽器Listener的 contex nitialized方法,并在監(jiān)聽器Listener的contex nitialized方法中,調(diào)用配置文件生成類。由上述本發(fā)明實(shí)施例的技術(shù)方案可以看出,采用本發(fā)明實(shí)施例提供的在Mruts 2 下自動(dòng)生成配置文件的方法,當(dāng)編程人員每增加一個(gè)Action即業(yè)務(wù)邏輯方法后或web應(yīng)用程序在每次Action有改動(dòng)后,程序都能夠自動(dòng)遍歷檢測出該新增加的或修改的Action,并自動(dòng)添加與此Action相對應(yīng)的配置語句到配置文件中,因此,一定程度上可以減輕編程人員的工作量,除此之外,還可以避免一些由編程人員在手動(dòng)修改配置的過程中出現(xiàn)的不必要的錯(cuò)誤。 以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種在Mruts 2下自動(dòng)生成配置文件的方法,其特征在于,包括A、將Mruts2部署在Web服務(wù)器上;B、在Web應(yīng)用程序每次部署時(shí),調(diào)用配置文件生成類,用以自動(dòng)生成配置文件。
2.如權(quán)利要求1所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,在所述步驟B中,所述配置文件生成類包括Bi、確定自動(dòng)生成的配置文件的路徑,以及需要遍歷的業(yè)務(wù)邏輯方法文件的根路徑;B2、遍歷所有業(yè)務(wù)邏輯類以及業(yè)務(wù)邏輯類內(nèi)的業(yè)務(wù)邏輯方法,并根據(jù)不同的業(yè)務(wù)邏輯類及方法生成與之對應(yīng)的從配置文件;B3、將所述從配置文件寫入配置文件。
3.如權(quán)利要求2所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,在所述步驟B2中,包括B21、生成package節(jié)點(diǎn),其中,對步驟B1中的業(yè)務(wù)邏輯方法文件的根路徑進(jìn)行遍歷,根路徑以及根路徑下的每一個(gè)Java包對應(yīng)一個(gè)package節(jié)點(diǎn);B22、生成Action節(jié)點(diǎn),其中,每個(gè)package節(jié)點(diǎn)內(nèi)的Action節(jié)點(diǎn)都是根據(jù)其對應(yīng)Java 包內(nèi)的類以及類內(nèi)的所有方法生成的。
4.如權(quán)利要求3所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,在所述步驟B22中,對于不同的Mruts2返回值類型生成不同的Action節(jié)點(diǎn)。
5.如權(quán)利要求4所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,所述返回值類型為plaiMext、dispatcher。
6.如權(quán)利要求5所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,所述Action節(jié)點(diǎn)的name屬性和method屬性為對應(yīng)的業(yè)務(wù)邏輯方法的名稱,其class屬性為對應(yīng)的業(yè)務(wù)邏輯方法所在類的全路徑名。
7.如權(quán)利要求3所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,所述Action節(jié)點(diǎn)的name屬性是所述Java包內(nèi)的相應(yīng)類的名稱,所述class屬性是Java包內(nèi)的相應(yīng)類的全路徑名。
8.如權(quán)利要求1所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫過濾器的初始化方法init,并在過濾器的初始化方法init中,調(diào)用配置文件生成類。
9.如權(quán)利要求1所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫Servlet的初始化方法init,并在Servlet 的初始化方法init中,調(diào)用配置文件生成類。
10.如權(quán)利要求1所述的在Mruts2框架下自動(dòng)生成配置文件的方法,其特征在于,在所述步驟B中,在Web應(yīng)用程序每次部署時(shí),重寫監(jiān)聽器Listener WcontextInitialized 方法,并在監(jiān)聽器Listener的contextlnitialized方法中,調(diào)用配置文件生成類。
全文摘要
本發(fā)明公開了一種在Struts 2下自動(dòng)生成配置文件的方法,其包括將Struts 2部署在Web服務(wù)器上的步驟;以及在Web應(yīng)用程序每次部署時(shí),調(diào)用配置文件生成類,用以自動(dòng)生成配置文件的步驟。采用本發(fā)明實(shí)施例提供的在Struts 2下自動(dòng)生成配置文件的方法,當(dāng)編程人員每增加一個(gè)Action即業(yè)務(wù)邏輯方法后或web應(yīng)用程序在每次Action有改動(dòng)后,程序都能夠自動(dòng)遍歷檢測出該新增加的或修改的Action,并自動(dòng)添加與此Action相對應(yīng)的配置語句到配置文件中,因此,一定程度上可以減輕編程人員的工作量,除此之外,還可以避免一些由編程人員在手動(dòng)修改配置的過程中出現(xiàn)的不必要的錯(cuò)誤。
文檔編號G06F9/44GK102253830SQ20111015708
公開日2011年11月23日 申請日期2011年6月10日 優(yōu)先權(quán)日2011年6月10日
發(fā)明者汪云飛, 黃旭輝 申請人:南京中興力維軟件有限公司