pafa3應(yīng)用開發(fā)入門教程_第1頁(yè)
pafa3應(yīng)用開發(fā)入門教程_第2頁(yè)
pafa3應(yīng)用開發(fā)入門教程_第3頁(yè)
pafa3應(yīng)用開發(fā)入門教程_第4頁(yè)
pafa3應(yīng)用開發(fā)入門教程_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文內(nèi)容涉及中國(guó)平安保險(xiǎn)(集團(tuán))股份有限公司商業(yè)秘密,未經(jīng)書面許可,不得以任何形式披露、傳播或擴(kuò)散。?中國(guó)平安保險(xiǎn)(集團(tuán))股份有限公司,版權(quán)所有,不得侵犯 第5頁(yè)共42頁(yè)模版發(fā)布:SQA 版權(quán)所有,不得復(fù)制中國(guó)平安保險(xiǎn)(集團(tuán))股份有限公司中國(guó)平安保險(xiǎn)(集團(tuán))股份有限公司信息管理中心名稱編號(hào)擬制馬駿、RichardJinPingAnPAFA3版本號(hào)審核密級(jí)秘密共42頁(yè)批準(zhǔn)更改信息更改日期版本部門及更改人版本說(shuō)明2005-04-11v0.1RichardJin初版2005-04-13v0.5RichardJin,馬駿,劉申嶺重構(gòu)2005-04-19v1.0RicharJinReview&FormattingPAFA3應(yīng)用開發(fā)入門教程創(chuàng)建日期:2005-4-8 定版日期:2004-4-20

在后續(xù)章節(jié)中將給出功能的分析和設(shè)計(jì)模型。頁(yè)面預(yù)覽為了對(duì)功能設(shè)定有直觀的理解,在下面的圖形中展示了開發(fā)完成之后所得到的顯示界面:輸入新用戶信息成功錄入輸入檢索條件檢索結(jié)果

開發(fā)環(huán)境配置安裝Eclipse在安裝Eclipse之前,需要獲得兩個(gè)相關(guān)的安裝包,如下圖所示:上圖所示Eclipse的版本號(hào)為“3.0.2”以及相對(duì)應(yīng)的語(yǔ)言包。這兩個(gè)安裝文件均為ZIP格式,解壓縮到指定目錄即可,注意應(yīng)該先解壓縮Eclipse的安裝文件包“eclipse-SDK-3.0.2-win32.zip”,再解壓縮相應(yīng)的語(yǔ)言包到Eclipse的安裝目錄,下圖即為解壓縮后的情況,Eclipse和語(yǔ)言包安裝目錄為“E:\eclipse”:此時(shí)基本的Eclipse安裝就完成了,如果需要其它Eclipse插件,可以以后再安裝。安裝完成后點(diǎn)擊“eclipse.exe”即可啟動(dòng)Eclipse,Eclipse會(huì)自動(dòng)尋找本機(jī)所安裝的JDK;還可以在桌面上創(chuàng)建一個(gè)鏈接到“eclipse.exe”的快捷方式。Eclipse啟動(dòng)時(shí)會(huì)提示選擇工作空間的存儲(chǔ)位置,使用默認(rèn)即可,啟動(dòng)后的界面如下圖所示:在上圖界面的鏈接中包括關(guān)于Eclipse的簡(jiǎn)介和教程,此外,通過Eclipse幫助也可以學(xué)習(xí)Eclipse的使用。關(guān)閉“歡迎使用”窗口后,顯示界面如下圖所示,從下圖開始,我們將利用Eclipse進(jìn)行一個(gè)簡(jiǎn)單應(yīng)用的開發(fā)。下載PAFA3類庫(kù)和項(xiàng)目模板在進(jìn)行PAFA3應(yīng)用項(xiàng)目的開發(fā)前,首先應(yīng)該獲取相應(yīng)的資源,包括:項(xiàng)目模板:一個(gè)已經(jīng)格式化的目錄ZIP壓縮包,專門用于使用Eclipse進(jìn)行PAFA3應(yīng)用開發(fā)。Pafa類庫(kù):PAFA3應(yīng)用的基本支持庫(kù),包括PAFA3類庫(kù)和第三方類庫(kù)。訪問其它系統(tǒng)的所需的類庫(kù):如訪問UM、CIF2等所需的類庫(kù)。資源的下載位置為“IT工作站/Pafa新架構(gòu)”下相關(guān)位置。在獲取了相關(guān)資源后,按照下圖的方式解壓縮并進(jìn)行組織,其中用紅色框出的是應(yīng)該按照項(xiàng)目要求進(jìn)行重命名的部分: 在上圖中,以“D:\MyProject\pafa3Template”為項(xiàng)目根目錄,Pafa庫(kù)和外部系統(tǒng)庫(kù)均放置在“D:\MyProject\lib”目錄下。關(guān)于PAFA3應(yīng)用模板下目錄的結(jié)構(gòu)定義和每個(gè)目錄的作用部分會(huì)在本文的后續(xù)部分提及,完成參考請(qǐng)查閱“PAFA3文檔庫(kù)”中的相關(guān)說(shuō)明。 在接下來(lái)的應(yīng)用開發(fā)中,上圖中標(biāo)識(shí)出的目錄名稱變化為:pafa3TemplateuserProj:項(xiàng)目名稱,應(yīng)符合項(xiàng)目命名規(guī)范appnameuserapp:應(yīng)用名稱,應(yīng)符合應(yīng)用命名規(guī)范modulenamemanagement:Java模塊名稱,應(yīng)符合模塊命名規(guī)范module1management:Web模塊名稱,應(yīng)符合模塊命名規(guī)范從此處開始,除特別說(shuō)明外,所給出的文件路徑均相對(duì)于“D:\MyProj\userProj”。數(shù)據(jù)庫(kù)表的設(shè)計(jì)從之前給出的預(yù)覽可以看出,在這個(gè)例子中所需的表結(jié)構(gòu)比較簡(jiǎn)單,下面即為相對(duì)應(yīng)的OracleSQL腳本的內(nèi)容:CREATETABLEUSERS(IDVARCHAR2(10)NOTNULL,NAMEVARCHAR2(20)NOTNULL,DESCRIPTIONVARCHAR2(200)NOTNULL); 將上述腳本存入文件“src\schema\user.sql”,然后通過OracleSqlplus客戶端創(chuàng)建此表,如下圖所示:配置Weblogic數(shù)據(jù)源在這個(gè)示例應(yīng)用中,將使用數(shù)據(jù)源(DataSource)獲得到數(shù)據(jù)庫(kù)的連接,因此需要在Weblogic中進(jìn)行數(shù)據(jù)源的配置,配置數(shù)據(jù)源之前則應(yīng)該首先配置“連接緩沖池”。緩沖池配置需要確認(rèn)的參數(shù)和范例如下所示:URLjdbc:oracle:thin:@:1521:orakingDriverClassnameoracle.jdbc.driver.OracleDriverUserNamepafaPasswordpassword緩沖池配置完成之后,就可以配置數(shù)據(jù)源了,如下圖中所示,其中“PoolName”就是指之前配置的緩沖池的名稱:記住數(shù)據(jù)源的JNDI名稱“jdbc/pafademoDS”,這個(gè)名稱將會(huì)在后續(xù)開發(fā)設(shè)置數(shù)據(jù)源時(shí)用到。

使用項(xiàng)目模板在Eclipse中導(dǎo)入項(xiàng)目模板使用項(xiàng)目模板可以提高PAFA3應(yīng)用項(xiàng)目的可管理性、提高開發(fā)效率。在之前所準(zhǔn)備的開發(fā)目錄中,用文本編輯器打開項(xiàng)目模板根目錄下的“.project”和“perties”兩個(gè)文件,如下圖所示,修改屬性值或確認(rèn)屬性設(shè)置是否與本機(jī)環(huán)境相符,需要檢查的包括下面幾項(xiàng):項(xiàng)目名稱:.project中的“<name>”域以目錄形式部署時(shí)的目錄:deploy.single.dir屬性存放EAR的目錄:deploy.ear.dir屬性PAFA3類庫(kù)的位置:pafa.lib屬性其它項(xiàng)目類庫(kù)的位置:project.lib屬性Weblogic.jar的位置:weblogic.jar屬性保存修改后的文件并保存,打開Eclipse,在Eclipse的菜單中選擇“文件導(dǎo)入…”,將出現(xiàn)下圖中所示的導(dǎo)航界面: 選擇“現(xiàn)有項(xiàng)目到工作空間中”后,點(diǎn)擊“下一步”,在如下圖界面中選擇重命名過的項(xiàng)目根目錄,“確定”后點(diǎn)擊“完成”:操作完成后,重命名過的模板項(xiàng)目即被導(dǎo)入到Eclipse環(huán)境之中。Ant視圖的配置與使用通過Eclipse菜單,選擇“窗口”“顯示視圖”“Ant”,就可以在Eclipse界面中顯示出Ant視圖,在Ant視圖中點(diǎn)擊第一個(gè)有加號(hào)的圖標(biāo)以增加構(gòu)建文件,如下圖所示: 在將項(xiàng)目的構(gòu)建文件加入Ant視圖后,就可以看到構(gòu)建文件“build.xml”所提供的所有“Task”,在“usage”任務(wù)上雙擊(執(zhí)行),則可獲得關(guān)于用法的提示,如下圖所示:Buildfile:D:\MyProject\userProj\build.xmlusage:[echo]PafaApplicationBuildFile[echo]用法:ant-[target][echo][echo][target][echo]clean-->清空所有輸出文件包括build和部署目錄[echo]compile-->編譯Java文件[echo]ear-->創(chuàng)建用于發(fā)布的EAR包文件[echo]exploded-ear-->創(chuàng)建展開目錄形式的EAR應(yīng)用(開發(fā)模式)[echo]BUILDSUCCESSFULTotaltime:580milliseconds執(zhí)行某個(gè)目標(biāo)時(shí)只需要雙擊或在【target】上點(diǎn)擊鼠標(biāo)右鍵并選擇“Run”即可?!咀⒁?,項(xiàng)目下的“dist”部署目錄需要執(zhí)行“刷新”后才看得到,在項(xiàng)目根節(jié)點(diǎn)“userapp”的右鍵彈出菜單中選擇“刷新”即可?!縀clipse自動(dòng)編譯設(shè)置Eclipse具有自動(dòng)編譯Java源文件的功能,這在編寫代碼階段對(duì)于編譯錯(cuò)誤的發(fā)現(xiàn)是很有用的。為了利用Eclipse的這項(xiàng)功能,需要“設(shè)置對(duì)類庫(kù)的引用”。導(dǎo)入完成之后,在下圖中選擇項(xiàng)目名稱“userapp”,點(diǎn)擊鼠標(biāo)右鍵,在彈出菜單中選擇“屬性”,將彈出項(xiàng)目屬性框:為了利用Eclipse的自動(dòng)編譯功能,需要設(shè)置對(duì)類庫(kù)的引用,如上圖中“JavaBuildPath”的“Libraries”中就定義了對(duì)項(xiàng)目外部類庫(kù)的引用,圖標(biāo)上有感嘆號(hào)“!”意思是路徑配置有誤;選擇有誤的類包,通過“Edit”修正類包路徑,如下圖所示,直至所有類包圖標(biāo)正常顯示;在后續(xù)的開發(fā)中,如果用到類庫(kù)中的其它類包,為使用Eclipse的自動(dòng)編譯,仍需要通過這個(gè)界面中的“AddExternalJARs”進(jìn)行外部類包的引入。配置文件的分類、目的與作用PAFA3本身是一種各層松散耦合的框架結(jié)構(gòu),這種形式大大提高了應(yīng)用的靈活性和適應(yīng)性。各層次和功能的聯(lián)系通過配置文件聯(lián)系在一起,下表列出了項(xiàng)目模板提供的示例配置文件及其功用,這些配置文件的路徑起點(diǎn)均為“config”:文件名作用app/application.xmlJ2EE應(yīng)用配置文件,定義EJB和WAR模塊等biz/appnameBizContext.xmlPafa3應(yīng)用Biz層配置,定義Biz層、集成層等的組件biz/bizMpertiesBiz層MessageResourceBundle,定義在Biz層使用的Messagebiz/sqlmap-config.xmlIbatisSqlmap配置文件,定義Ibatis的基礎(chǔ)屬性以及Mapping文件biz/sqlmap-mapping.xmlIbatisSqlmapMapping文件,定義具體的SQL語(yǔ)句core/appCommonContext.xmlPafa3應(yīng)用公共配置,定義JNDI模板等core/coreContext.xmlPafa3應(yīng)用核心配置,定義Log等基礎(chǔ)組件core/devLperties開發(fā)調(diào)試工具的配置文件,由DevLog使用core/pertiesPafa3本身的Log配置ejb/ejb-jar.xml標(biāo)準(zhǔn)EJB部署描述符ejb/weblogic-ejb-jar.xmlWeblogicEJB部署描述符web/appnameWebContext.xmlPafa3應(yīng)用Web層配置,定義Web層的組件web/tiles-defs.xml頁(yè)面布局定義web/web.xml標(biāo)準(zhǔn)Web應(yīng)用部署描述符web/weblogic.xmlWeblogicWeb部署描述符web/webMpertiesWeb層MessageResourceBundle,供fmt標(biāo)簽等使用

頁(yè)面布局設(shè)計(jì)與實(shí)現(xiàn).do和.screen在用戶沒有執(zhí)行任何功能之前,訪問我們的應(yīng)用就應(yīng)該有一個(gè)起始頁(yè)面,如下圖所示:.do和.screen是PAFA3應(yīng)用規(guī)范中的定義的兩種請(qǐng)求類型,.screen請(qǐng)求意味著純粹的頁(yè)面顯示請(qǐng)求,不包含后臺(tái)Biz層的業(yè)務(wù)處理;而.do則意味著需要后臺(tái)的Biz層進(jìn)行業(yè)務(wù)處理,數(shù)據(jù)將會(huì)在不同邏輯層中傳遞。布局分析與設(shè)計(jì)如前所示,為簡(jiǎn)單起見,頁(yè)面布局設(shè)定為左右結(jié)構(gòu),左邊顯示功能鏈接,右邊為功能頁(yè)面。為構(gòu)建這個(gè)布局,需要編寫下列文件:文件名位置作用mainLayout.jspsrc/webroot定義頁(yè)面的布局結(jié)構(gòu)include.jspsrc/webroot導(dǎo)入標(biāo)簽庫(kù),用于其它頁(yè)面的導(dǎo)入menu.jspsrc/webroot顯示功能菜單,位于布局左側(cè)welcome.jspsrc/webroot歡迎頁(yè)面,位于布局右側(cè)error.jspsrc/webroot錯(cuò)誤頁(yè)面,用于顯示錯(cuò)誤信息 以下給出各文件的具體內(nèi)容,其中代碼的含義請(qǐng)參考相應(yīng)的注釋?!緈ainLayout.jsp】<%@pagecontentType="text/html;charset=GBK"%><!--使用struts的tiles技術(shù),聲明使用tiles標(biāo)簽--><%@taglibprefix="tiles"uri="/struts/tags-tiles"%><html><head><!--title信息在“tiles-defs.xml”中定義--><title>PAFA3UserApp-<tiles:getAsStringname="title"/></title><metahttp-equiv="Content-Type"content="text/html;charset=GBK"></head><body><tablewidth="100%"height="100%"border="1"><tr><tdwidth="30%"valign="top"nowrap> <!--布局的左邊,用于顯示菜單--> <tiles:insertname="menu"/></td><tdvalign="top"> <!--布局的右邊,用于內(nèi)容窗口,是主要變化的部分--> <!--在顯示不同頁(yè)面時(shí)指定“content”所對(duì)應(yīng)的JSP--> <!--在“tiles-defs.xml”中定義--> <tiles:insertname="content"/></td></tr></table></body></html>【include.jsp】:供其它頁(yè)面包含,以減少代碼量并有利于統(tǒng)一管理<!--定義頁(yè)面編碼--><%@pagecontentType="text/html;charset=GBK"%><!--定義JSTL核心庫(kù)引用,包括out、if、foreach等標(biāo)簽--><%@taglibprefix="c"uri="/jstl/core"%><!--定義JSTL格式庫(kù)引用,主要使用fmt標(biāo)簽--><%@taglibprefix="fmt"uri="/jstl/fmt"%><!--定義PAFA3標(biāo)簽庫(kù)引用,主要使用bind標(biāo)簽--><%@taglibprefix="lwc"uri="/tags-lwc"%>【menu.jsp】:給出功能點(diǎn)的鏈接<%@includefile="include.jsp"%><!--c:url標(biāo)簽用于url的轉(zhuǎn)化,以webroot為根目錄起點(diǎn)--><p> <!--由于要用到綁定等功能,是功能性的請(qǐng)求,所以是.do--> <ahref="<c:urlvalue="/addUser.do"/>">增加用戶</a></p><p> <!--顯示一個(gè)純界面讓用戶輸入檢索條件,所以是.screen--> <ahref="<c:urlvalue="/searchUser.screen"/>">檢索用戶</a></p>【welcome.jsp】:歡迎信息<%@includefile="include.jsp"%><!--顯示歡迎信息--><p>歡迎!</p>【error.jsp】:用于顯示錯(cuò)誤信息<%@pageisErrorPage="true"%><%@includefile="include.jsp"%>錯(cuò)誤信息<textareastyle="font-size:12px;font-family:couriernew;width:95%;"rows="25"><c:outvalue="${errorMessage}"/></textarea>布局的配置PAFA3項(xiàng)目模板本身已經(jīng)定義好了和頁(yè)面布局相關(guān)的基本配置,到目前為止,還不需要增加或修改布局方面的配置。以下幾個(gè)配置取自相關(guān)的配置文件。【appnameWebContext.xml】(注意:這個(gè)文件在beta4中對(duì)應(yīng)XX-servlet.xml文件)定義了視圖的解析類以及布局的配置文件“tiles-defs.xml”,如下所示:<beanid="viewResolver"class="com.paic.pafa.app.web.servlet.view.InternalResourceViewResolver"><propertyname="viewClass"><value>com.paic.pafa.app.web.servlet.view.tiles.TilesJstlView</value></property></bean><beanid="tilesConfigurer"class="com.paic.pafa.app.web.servlet.view.tiles.TilesConfigurer"><propertyname="definitions"><list><value>/WEB-INF/tiles-defs.xml</value></list></property></bean>【tiles-defs.xml】定義與頁(yè)面布局相關(guān)的屬性,如title信息等;最主要的部分是定義視圖名稱和JSP頁(yè)面之間的映射關(guān)系,如下所示,其中“welcomeView”對(duì)應(yīng)的“welcome.jsp”即為歡迎頁(yè)面:<definitionname="mainLayout"page="/mainLayout.jsp"><putname="menu"value="/menu.jsp"type="page"/><putname="title"value="用戶管理應(yīng)用"/></definition><definitionname="errorPage"extends="mainLayout"><putname="content"value="/error.jsp"type="page"/></definition><definitionname="welcomeView"extends="mainLayout"><putname="content"value="/welcome.jsp"type="page"/></definition>【web.xml】定義Web應(yīng)用的缺省頁(yè)面,相關(guān)內(nèi)容如下:<welcome-file-list><welcome-file>index.screen</welcome-file></welcome-file-list>由以上定義可以知道“index.screen”設(shè)為缺省頁(yè)面,而缺省頁(yè)面與“welcomeView”的映射關(guān)系需要在“appnameWebContext.xml”中定義,并且所有.screen定義所對(duì)應(yīng)class都是相同的,即“com.paic.pafa.app.web.servlet.mvc.ParameterizableViewController”:<beanname="/index.screen"class="com.paic.pafa.app.web.servlet.mvc.ParameterizableViewController"><propertyname="viewName"><value>welcomeView</value></property></bean>利用Ant構(gòu)建部署目錄在完成了歡迎頁(yè)面的開發(fā)和配置之后,應(yīng)該可以實(shí)際看到運(yùn)行效果了,在部署之前,修改“src/config/app/application.xml”,和部署目錄的內(nèi)容相比較,確認(rèn)WAR模塊和EJB模塊的名稱是否正確,如果按照之前所說(shuō)的修改了模板的項(xiàng)目名稱,則修改后的內(nèi)容應(yīng)該如下所示:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEapplicationPUBLIC"-//SunMicrosystems,Inc.//DTDJ2EEApplication1.3//EN""/dtd/application_1_3.dtd"><application> <display-name>Pafa3Application</display-name> <module> <ejb>userapp-ejb.jar</ejb> </module> <module> <web> <web-uri>userapp.war</web-uri> <context-root>/userapp</context-root> </web> </module></application>在Eclipse的Ant視圖中的“exploded-ear”節(jié)點(diǎn)上雙擊執(zhí)行Ant任務(wù),就可以生成部署目錄,如下圖所示:Weblogic部署測(cè)試 啟動(dòng)Weblogic并進(jìn)入應(yīng)用部署頁(yè)面,選擇Ant生成的部署目錄,如下圖所示,點(diǎn)擊“TargetApplication”,然后按照Weblogic的提示和自己的部署目標(biāo)進(jìn)行部署: 部署完成之后,打開IE瀏覽器按照設(shè)定的URL訪問,如果出現(xiàn)下圖中的頁(yè)面,則證明之前的工作沒有錯(cuò)誤,否則請(qǐng)重新檢查之前的每一步驟直到完成下圖目標(biāo)。

“增加用戶”功能的設(shè)計(jì)與實(shí)現(xiàn)功能分析根據(jù)之前“增加用戶”功能的流程設(shè)計(jì)和通過預(yù)覽看到的樣子,細(xì)化的內(nèi)部流程如下圖中所示:公用層設(shè)計(jì)與實(shí)現(xiàn)公共層的含義是指Web層和Biz層共用的部分,包括在兩層之間用于數(shù)據(jù)傳遞的DTO和用于定義ServiceRequestID名稱的共用Util等,在部署時(shí)這些內(nèi)容將被放置到EAR的“APP-INF”之中,而不是EJB或者WAR;除此之外,在Web層和Biz層都還有用于定義名稱常量的Util類,這些名稱源于配置文件,以避免在業(yè)務(wù)代碼中“HardCode”字符常量。以下將會(huì)給出在這個(gè)用例中所涉及到的公用層組件及其代碼。【com.paic.userapp.management.util.ServiceRequestID】packagecom.paic.userapp.management.util;publicclassServiceRequestID{publicstaticfinalStringADD_USER="addUser";}【com.paic.userapp.management.web.util.ModelNames】packagecom.paic.userapp.management.web.util;publicclassModelNames{publicstaticfinalStringMODEL_ERROR_MSG="errorMsg";}【com.paic.userapp.management.web.util.ViewNames】packagecom.paic.userapp.management.web.util;publicclassViewNames{publicstaticfinalStringERROR_VIEW="errorPage";publicstaticfinalStringSUCCESS_VIEW="success";}【com.paic.userapp.management.web.util.WebContextNames】packagecom.paic.userapp.management.web.util;publicclassWebContextNames{publicstaticfinalStringPAFA_AC="pafaAC";}【.util.BizContextNames】package.util;publicclassBizContextNames{publicstaticfinalStringUSER_SERVICE="userService";publicstaticfinalStringUSER_DAO="userDAO";}除了以上給出的名稱常量定義,在應(yīng)用開發(fā)中比較重要的一項(xiàng)內(nèi)容就是定義在Web層和Biz層之間傳遞的DTO,在本例中用于傳遞用戶的信息,定義如下:【com.paic.userapp.management.dto.UserDTO】packagecom.paic.userapp.management.dto;importcom.paic.pafa.app.dto.PafaDTO;publicclassUserDTOextendsPafaDTO{privateStringid;privateStringname;privateStringdescription;publicStringgetDescription(){returndescription;}publicvoidsetDescription(Stringdescription){this.description=description;}publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}}Web層開發(fā)與實(shí)現(xiàn)通過之前的功能分析,我們知道在Web層需要開發(fā)的內(nèi)容包括:“addUser.jsp”,用于顯示輸入用戶信息的窗體;“success.jsp”,顯示操作成功信息;“com.paic.userapp.management.web.controller.AddUserController”,Web層的功能控制器。相關(guān)代碼如下,注意其中的注釋信息:【webroot\management\addUser.jsp】<%@includefile="../include.jsp"%><formname="userForm"method="post"action="<c:urlvalue="/addUser.do"/>"><table> <tr> <td>用戶ID:</td> <td><!--數(shù)據(jù)對(duì)象綁定--> <lwc:bindpath="user.id"> <inputtype="text" value="<c:outvalue="${status.value}"/>" name="<c:outvalue="${status.expression}"/>"> </lwc:bind> </td> </tr> <tr> <td> 姓名:</td> <td> <lwc:bindpath=""> <inputtype="text" value="<c:outvalue="${status.value}"/>" name="<c:outvalue="${status.expression}"/>"> </lwc:bind> </td> </tr> <tr> <td>說(shuō)明:</td> <td> <lwc:bindpath="user.description"> <inputtype="text" value="<c:outvalue="${status.value}"/>" name="<c:outvalue="${status.expression}"/>"> </lwc:bind> </td> </tr> </table><p> <inputtype="submit"value="確定"name="B1"> <inputtype="reset"value="重置"name="B2"></p></form>【webroot\management\success.jsp】<%@includefile="../include.jsp"%>操作成功!【com.paic.userapp.management.web.controller.AddUserController】packagecom.paic.userapp.management.web.controller;importcom.paic.pafa.app.dto.ServiceRequest;importcom.paic.pafa.app.dto.ServiceResponse;importcom.paic.pafa.app.lwc.core.util.DevLog;importcom.paic.pafa.app.lwc.service.databinding.BindException;importcom.paic.pafa.app.web.exception.PafaWebException;importcom.paic.pafa.app.web.servlet.ModelAndView;importcom.paic.pafa.app.web.servlet.mvc.SimpleFormController;importcom.paic.userapp.management.dto.UserDTO;importcom.paic.userapp.management.util.ServiceRequestID;importcom.paic.userapp.management.web.util.WebContextNames;publicclassAddUserControllerextendsSimpleFormController{protectedModelAndViewonSubmit(Objectcmd,BindExceptionex)throwsException{UserDTOuser=(UserDTO)cmd;//用于開發(fā)階段的調(diào)試DevLog.debug("NewUser-->"+user.getId()+","+user.getName());//準(zhǔn)備ServiceRequestServiceRequestserviceRequest=newServiceRequest();serviceRequest.setRequestedServiceID(ServiceRequestID.ADD_USER);serviceRequest.setCurrentRequestObject(user);//發(fā)送ServiceRequest以獲得ServiceResponseServiceResponseserviceResponse=dispatchService(serviceRequest,WebContextNames.PAFA_AC);//準(zhǔn)備Web視圖returnnewModelAndView(this.getSuccessView());}}配置IbatisSqlMapping通過之前的功能分析可以發(fā)現(xiàn),最終的數(shù)據(jù)庫(kù)操作是由Ibatis完成的,在本例中有兩個(gè)相關(guān)的、位于“src\config\biz”的配置文件“sqlmap-config.xml”和“sqlmap-mapping.xml”;在這個(gè)例子中我們只需要在“sql-mapping.xml”中增加SQL語(yǔ)句,如下所示:【src\config\biz\sql-mapping.xml】:在INSERT語(yǔ)句中定義了參數(shù)對(duì)象為UserDTO<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsqlMapPUBLIC"-//iBATIS.com//DTDSQLMap2.0//EN""/dtd/sql-map-2.dtd"><sqlMapnamespace="userapp"><insertid="addUser"parameterClass="com.paic.userapp.management.dto.UserDTO"><![CDATA[INSERTINTOUSERS(ID,NAME,DESCRIPTION)VALUES(#id#,#name#,#description#)]]></insert></sqlMap>Biz層開發(fā)與實(shí)現(xiàn)實(shí)際上這里包括Biz層和集成層,通過之前的分析,我們需要在Biz層編寫的Java類包括“AddUserAction”、“UserService”接口、接口的實(shí)現(xiàn)類“UserPojoService”以及集成層的“UserDAO”接口和接口的實(shí)現(xiàn)類“UserIbatisDAO”,代碼則如下所示:【egration.UserDAO】packageegration;importjava.util.List;importegration.dao.PafaDAOException;importegration.dao.PafaDAO;importcom.paic.userapp.management.dto.UserDTO;publicinterfaceUserDAOextendsPafaDAO{publicvoidcreateUser(UserDTOuser)throwsPafaDAOException;}【egration.impl.UserIbatisDAO】packageegration.impl;importjava.util.List;importegration.dao.PafaDAOException;importcom.paic.pafa.app.lwc.service.persistence.dao.ibatis.support.SqlMapClientDaoSupport;importcom.paic.userapp.management.dto.UserDTO;importegration.UserDAO;importcom.paic.pafa.app.lwc.core.context.support.PafaCoreContexton;importcom.paic.pafa.app.lwc.service.persistence.dao.DataAccessException;publicclassUserIbatisDAOextendsSqlMapClientDaoSupportimplementsUserDAO{publicvoidcreateUser(UserDTOuser)throwsPafaDAOException{//獲得當(dāng)前事務(wù)的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//通過Ibatis執(zhí)行名稱為“addUser”的SQL語(yǔ)句getSqlMapClientTemplate().insert("addUser",user);}catch(DataAccessExceptione){//將數(shù)據(jù)庫(kù)例外包裝為pafa的例外類型thrownewPafaDAOException(txnId,"UserIbatisDAO","userapp.error.db.insert.001","userapp.error.db.insert.001",e);}}publicvoidsetBeanName(Stringarg0){//TODOAuto-generatedmethodstub} }【.service.UserService】package.service;importjava.util.List;import.service.BusinessServiceException;importcom.paic.userapp.management.dto.UserDTO;publicinterfaceUserService{publicvoidaddUser(UserDTOuser)throwsBusinessServiceException;}【.service.impl.UserPojoService】package.service.impl;importjava.util.List;import.service.BaseService;import.service.BusinessServiceException;importegration.dao.PafaDAOException;import.service.UserService;import.util.BizContextNames;importcom.paic.userapp.management.dto.UserDTO;importegration.UserDAO;importcom.paic.pafa.app.lwc.core.util.DevLog;publicclassUserPojoServiceextendsBaseServiceimplementsUserService{publicvoidaddUser(UserDTOuser)throwsBusinessServiceException{try{//通過Context獲得DAO實(shí)例UserDAOuserDAO=(UserDAO)context.getBean(BizContextNames.USER_DAO);DevLog.debug("addUser()beginintoDAO");userDAO.createUser(user);DevLog.debug("addUser()endfromDAO");}catch(PafaDAOExceptione){DevLog.debug("ErrorMsg:-->"+e.getInitialCause().getMessage());thrownewBusinessServiceException(e);}}}【.action.AddUserAction】package.action;import.action.AbstractAction;import.service.BusinessServiceException;importcom.paic.pafa.app.dto.ServiceRequest;importcom.paic.pafa.app.dto.ServiceResponse;import.service.UserService;import.util.BizContextNames;importcom.paic.userapp.management.dto.UserDTO;importcom.paic.pafa.app.lwc.core.context.support.PafaCoreContexton;importcom.paic.pafa.core.exceptions.PafaRuntimeException;publicclassAddUserActionextendsAbstractAction{publicServiceResponseperform(ServiceRequestrequest)throwsBusinessServiceException{//獲得當(dāng)前事務(wù)的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//從請(qǐng)求中獲取DTO參數(shù)UserDTOuser=(UserDTO)request.getCurrentRequestObject();//調(diào)用服務(wù)以完成功能UserServiceuserSrv=(UserService)context.getBean(BizContextNames.USER_SERVICE);userSrv.addUser(user);//返回響應(yīng)ServiceResponseresponse=newServiceResponse();returnresponse;}catch(BusinessServiceExceptionbe){throwbe;}catch(PafaRuntimeExceptionpe){throwpe;}catch(Exceptione){thrownewPafaRuntimeException(txnId,"userapp.error.runtime.001","userapp.error.runtime.001",e);}}}編輯配置文件至此“增加用戶”功能的開發(fā)就完成了,但還需要通過編輯配置文件將這些功能組件串在一起。需要修改的配置文件如下所述:【tiles-defs.xml】:定義視圖名稱所對(duì)應(yīng)的JSP頁(yè)面,增加以下定義<definitionname="addUser"extends="mainLayout"><putname="content"value="/management/addUser.jsp"type="page"/></definition><definitionname="success"extends="mainLayout"><putname="content"value="/management/success.jsp"type="page"/></definition>【appnameWebContext.xml】:定義AddUserController的配置<beanname="/addUser.do"class="com.paic.userapp.management.web.controller.AddUserController"><propertyname="commandName"><value>user</value></property><propertyname="commandClass"><value>com.paic.userapp.management.dto.UserDTO</value></property><propertyname="formView"><value>addUser</value></property><propertyname="successView"><value>success</value></property></bean>到目前位置,在Biz層的配置中除了Service、DAO、Action等組件的定義外,最重要的是要為DAO配置數(shù)據(jù)源,我們?cè)谇懊嬉呀?jīng)在Weblogic中配置好了數(shù)據(jù)源,并且定義了JNDI名稱“jdbc/pafademoDS”;項(xiàng)目模板已經(jīng)提供了數(shù)據(jù)源配置的模板,唯一需要確認(rèn)的就是這個(gè)數(shù)據(jù)源的名稱必須與服務(wù)器中的名稱定義一致?!綼ppnameBizContext.xml】:修改并確認(rèn)包含下列定義<!--================================================================--><!--Definitionsofdatasource--><!--=================================================================--><beanid="dsFactory"class="com.paic.pafa.app.lwc.service.persistence.datasource.DataSourceFactoryBean"><propertyname="defaultDSKey"><value>00</value></property><propertyname="dataSources"><map><entrykey="00"><reflocal="pafademoDS"/></entry></map></property></bean><beanid="pafademoDS"class="com.paic.pafa.app.lwc.core.naming.JndiObjectFactoryBean"><propertyname="jndiName"><value>jdbc/pafademoDS</value></property><propertyname="jndiTemplate"><reflocal="jndiTemplate"/></property></bean><!--================================================================--><!--DefinitionsofiBATISsqlmapping--><!--================================================================--><beanid="sqlMapClient"class="com.paic.pafa.app.lwc.service.persistence.dao.ibatis.SqlMapClientFactoryBean"><propertyname="configLocation"><description>NOTE,youneedmodifytheconfigfilename</description><value>sqlmap-config.xml</value></property></bean> <!--===========APPLICATIONSERVICEOBJECTDEFINITIONS=============--><beanid="userService"class=".service.impl.UserPojoService"/> <beanid="addUser"class=".action.AddUserAction"/> <beanid="userDAO"class="egration.impl.UserIbatisDAO"><propertyname="dataSource"><reflocal="dsFactory"/></property><propertyname="sqlMapClient"><reflocal="sqlMapClient"/></property></bean> 此外,還需要確定Ibatis的映射配置文件,請(qǐng)參考前一小節(jié)。Weblogic部署測(cè)試至此,“新增用戶”功能的開發(fā)就完成了,在Ant視圖中雙擊“exploded-ear”以更新部署目錄(Ant使用增量構(gòu)建,可以大大減少構(gòu)建時(shí)間);啟動(dòng)Weblogic并進(jìn)入應(yīng)用部署頁(yè)面就可以進(jìn)行部署;如果之前部署的應(yīng)用還在,也可以選擇“RedeployApplication”進(jìn)行更新即可。點(diǎn)擊鏈接進(jìn)行用戶增加,如果順利出現(xiàn)之前的預(yù)覽頁(yè)面“b”則意味著成功,否則請(qǐng)重復(fù)之前的步驟并確保每一步的正確。

“檢索用戶”功能的設(shè)計(jì)與實(shí)現(xiàn)功能分析根據(jù)之前“檢索用戶”功能的流程設(shè)計(jì)和通過預(yù)覽看到的樣子,細(xì)化的內(nèi)部流程如下圖中所示:公用層設(shè)計(jì)與實(shí)現(xiàn)通過“新增用戶”功能的開發(fā),我們已經(jīng)搭建好了公用層的基本組件結(jié)構(gòu),現(xiàn)在只需要在原有的基礎(chǔ)上添加一些內(nèi)容即可,注意以下代碼中突出的部分:【com.paic.userapp.management.util.ServiceRequestID】packagecom.paic.userapp.management.util;publicclassServiceRequestID{publicstaticfinalStringADD_USER="addUser";publicstaticfinalStringSEARCH_USER="searchUser";}【com.paic.userapp.management.web.util.ModelNames】packagecom.paic.userapp.management.web.util;publicclassModelNames{publicstaticfinalStringMODEL_ERROR_MSG="errorMsg";//檢索結(jié)果列表的名稱publicstaticfinalStringMODEL_USER_LIST="userList";}【com.paic.userapp.management.web.util.ViewNames】packagecom.paic.userapp.management.web.util;publicclassViewNames{publicstaticfinalStringERROR_VIEW="errorPage";publicstaticfinalStringSUCCESS_VIEW="success";//顯示檢索結(jié)果的視圖的名稱publicstaticfinalStringUSER_LIST_VIEW="userList";}【com.paic.userapp.management.web.util.WebContextNames】:沒有變化【.util.BizContextNames】:沒有變化【com.paic.userapp.management.dto.UserDTO】:沒有變化Web層開發(fā)與實(shí)現(xiàn)通過之前的功能分析,在“檢索用戶”功能的Web層有兩種動(dòng)作:一是“searchUser.screen”,這個(gè)動(dòng)作將輸入檢索條件的頁(yè)面顯示出來(lái),細(xì)節(jié)參考接下來(lái)的配置部分;二是“searchUser.do”,這個(gè)動(dòng)作完成實(shí)際的檢索功能。需要開發(fā)的內(nèi)容包括:“searchUser.jsp”,用于輸入檢索條件;“userList.jsp”,用于顯示檢索到的用戶列表,使用JSTL的“c”標(biāo)簽進(jìn)行顯示處理;檢索的Web層功能控制器為“com.paic.userapp.management.web.controller.SearchUserController”。相關(guān)代碼如下,注意其中的注釋信息:【webroot\management\searchUser.jsp】<%@includefile="../include.jsp"%><formname="searchUserForm"method="post"action="<c:urlvalue="/searchUser.do"/>">輸入用戶ID中包含的字符:<inputtype="text"name="idPiece"value=""><inputtype="submit"name="submit"value="submit"></form>【webroot\management\userList.jsp】<%@includefile="../include.jsp"%><tablewidth="100%"border="1"><tr> <td>ID</td> <td>Name</td> <td>Description</td> </tr><c:forEachvar="user"items="${userList}"><tr> <td><c:outvalue="${user.id}"/></td> <td><c:outvalue="${}"/></td> <td><c:outvalue="${user.description}"/></td> </tr></c:forEach></table>【com.paic.userapp.management.web.controller.SearchUserController】packagecom.paic.userapp.management.web.controller;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.paic.pafa.app.dto.ServiceRequest;importcom.paic.pafa.app.dto.ServiceResponse;importcom.paic.pafa.app.web.exception.PafaWebException;importcom.paic.pafa.app.web.servlet.ModelAndView;importcom.paic.pafa.app.web.servlet.mvc.AbstractController;importcom.paic.userapp.management.util.ServiceRequestID;importcom.paic.userapp.management.web.util.ModelNames;importcom.paic.userapp.management.web.util.ViewNames;importcom.paic.userapp.management.web.util.WebContextNames;publicclassSearchUserControllerextendsAbstractController{protectedModelAndViewhandleRequestInternal(HttpServletRequestrequest,HttpServletResponsehttpResponse)throwsException{//準(zhǔn)備ServiceRequestStringname=request.getParameter("idPiece");ServiceRequestserviceRequest=newServiceRequest();serviceRequest.setRequestedServiceID(ServiceRequestID.SEARCH_USER);serviceRequest.setParameter("idPiece",name);//發(fā)送ServiceRequest以獲得ServiceResponseServiceResponseserviceResponse=dispatchService(serviceRequest,WebContextNames.PAFA_AC);//準(zhǔn)備Web視圖Mapmodel=serviceResponse.getModel();returnnewModelAndView(ViewNames.USER_LIST_VIEW,ModelNames.MODEL_USER_LIST,model.get(ServiceResponse.SERVICE_RESPONSE_RESULT));}}配置IbatisSqlMapping為進(jìn)行數(shù)據(jù)檢索,還需要在“sqlmap-mapping.xml”中增加SQL查詢語(yǔ)句,如下表中突出的部分:【src\config\biz\sql-mapping.xml】:新增Search語(yǔ)句<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsqlMapPUBLIC"-//iBATIS.com//DTDSQLMap2.0//EN""/dtd/sql-map-2.dtd"><sqlMapnamespace="userapp"><selectid="searchUserByIdPiece"parameterClass="java.lang.String"resultClass="com.paic.userapp.management.dto.UserDTO"><![CDATA[SELECTID,NAME,DESCRIPTIONFROMUSERSWHEREidlike#value#]]></select><insertid="addUser"parameterClass="com.paic.userapp.management.dto.UserDTO"><![CDATA[INSERTINTOUSERS(ID,NAME,DESCRIPTION)VALUES(#id#,#name#,#description#)]]></insert></sqlMap>Biz層開發(fā)與實(shí)現(xiàn)Biz層的框架也通過之前“新增用戶”功能建立了起來(lái),只需在Service和DAO中增加新的檢索方法即可,但是我們還需要一個(gè)獨(dú)立的Action處理用于檢索的ServiceRequest,如下面的代碼所示,注意其中突出的部分:【egration.UserDAO】packageegration;importjava.util.List;importegration.dao.PafaDAOException;importegration.dao.PafaDAO;importcom.paic.userapp.management.dto.UserDTO;publicinterfaceUserDAOextendsPafaDAO{publicvoidcreateUser(UserDTOuser)throwsPafaDAOException;publicListsearchUserByIdPiece(StringidPiece)throwsPafaDAOException;}【egration.impl.UserIbatisDAO】packageegration.impl;importjava.util.List;importegration.dao.PafaDAOException;importcom.paic.pafa.app.lwc.service.persistence.dao.ibatis.support.SqlMapClientDaoSupport;importcom.paic.userapp.management.dto.UserDTO;importegration.UserDAO;importcom.paic.pafa.app.lwc.core.context.support.PafaCoreContexton;importcom.paic.pafa.app.lwc.service.persistence.dao.DataAccessException;publicclassUserIbatisDAOextendsSqlMapClientDaoSupportimplementsUserDAO{publicvoidcreateUser(UserDTOuser)throwsPafaDAOException{//獲得當(dāng)前事務(wù)的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//通過Ibatis執(zhí)行名稱為“addUser”的SQL語(yǔ)句getSqlMapClientTemplate().insert("addUser",user);}catch(DataAccessExceptione){//將數(shù)據(jù)庫(kù)例外包裝為pafa的例外類型thrownewPafaDAOException(txnId,"UserIbatisDAO","error.sql.insert.001","error.sql.insert.001",e); }}publicListsearchUserByIdPiece(StringidPiece)throwsPafaDAOException{//獲得當(dāng)前事務(wù)的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//通過Ibatis執(zhí)行名稱為“searchUserByIdPiece”的SQL語(yǔ)句returngetSqlMapClientTemplate().queryForList("searchUserByIdPiece","%"+idPiece+"%");}catch(DataAccessExceptione){//將數(shù)據(jù)庫(kù)例外包裝為pafa的例外類型thrownewPafaDAOException(txnId,"UserIbatisDAO","userapp.error.db.search.001","userapp.error.db.search.001",e);}}publicvoidsetBeanName(Stringarg0){//TODOAuto-generatedmethodstub} }【.service.UserService】:定義新的search方法package.service;importjava.util.List;import.service.BusinessServiceException;importcom.paic.userapp.management.dto.UserDTO;publicinterfaceUserService{publicvoidaddUser(UserDTOuser)throwsBusinessServiceException;publicList

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論