pafa3应用开发入门教程_第1页
pafa3应用开发入门教程_第2页
pafa3应用开发入门教程_第3页
pafa3应用开发入门教程_第4页
pafa3应用开发入门教程_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文内容涉及中国平安保险(集团)股份有限公司商业秘密,未经书面许可,不得以任何形式披露、传播或扩散。©中国平安保险(集团)股份有限公司,版权所有,不得侵犯 第5页共42页模版发布:SQA 版权所有,不得复制中国平安保险(集团)股份有限公司中国平安保险(集团)股份有限公司信息管理中心名称编号拟制马骏、RichardJinPingAnPAFA3版本号审核密级秘密共42页批准更改信息更改日期版本部门及更改人版本说明2005-04-11v0.1RichardJin初版2005-04-13v0.5RichardJin,马骏,刘申岭重构2005-04-19v1.0RicharJinReview&FormattingPAFA3应用开发入门教程创建日期:2005-4-8 定版日期:2004-4-20

在后续章节中将给出功能的分析和设计模型。页面预览为了对功能设定有直观的理解,在下面的图形中展示了开发完成之后所得到的显示界面:输入新用户信息成功录入输入检索条件检索结果

开发环境配置安装Eclipse在安装Eclipse之前,需要获得两个相关的安装包,如下图所示:上图所示Eclipse的版本号为“3.0.2”以及相对应的语言包。这两个安装文件均为ZIP格式,解压缩到指定目录即可,注意应该先解压缩Eclipse的安装文件包“eclipse-SDK-3.0.2-win32.zip”,再解压缩相应的语言包到Eclipse的安装目录,下图即为解压缩后的情况,Eclipse和语言包安装目录为“E:\eclipse”:此时基本的Eclipse安装就完成了,如果需要其它Eclipse插件,可以以后再安装。安装完成后点击“eclipse.exe”即可启动Eclipse,Eclipse会自动寻找本机所安装的JDK;还可以在桌面上创建一个链接到“eclipse.exe”的快捷方式。Eclipse启动时会提示选择工作空间的存储位置,使用默认即可,启动后的界面如下图所示:在上图界面的链接中包括关于Eclipse的简介和教程,此外,通过Eclipse帮助也可以学习Eclipse的使用。关闭“欢迎使用”窗口后,显示界面如下图所示,从下图开始,我们将利用Eclipse进行一个简单应用的开发。下载PAFA3类库和项目模板在进行PAFA3应用项目的开发前,首先应该获取相应的资源,包括:项目模板:一个已经格式化的目录ZIP压缩包,专门用于使用Eclipse进行PAFA3应用开发。Pafa类库:PAFA3应用的基本支持库,包括PAFA3类库和第三方类库。访问其它系统的所需的类库:如访问UM、CIF2等所需的类库。资源的下载位置为“IT工作站/Pafa新架构”下相关位置。在获取了相关资源后,按照下图的方式解压缩并进行组织,其中用红色框出的是应该按照项目要求进行重命名的部分: 在上图中,以“D:\MyProject\pafa3Template”为项目根目录,Pafa库和外部系统库均放置在“D:\MyProject\lib”目录下。关于PAFA3应用模板下目录的结构定义和每个目录的作用部分会在本文的后续部分提及,完成参考请查阅“PAFA3文档库”中的相关说明。 在接下来的应用开发中,上图中标识出的目录名称变化为:pafa3TemplateuserProj:项目名称,应符合项目命名规范appnameuserapp:应用名称,应符合应用命名规范modulenamemanagement:Java模块名称,应符合模块命名规范module1management:Web模块名称,应符合模块命名规范从此处开始,除特别说明外,所给出的文件路径均相对于“D:\MyProj\userProj”。数据库表的设计从之前给出的预览可以看出,在这个例子中所需的表结构比较简单,下面即为相对应的OracleSQL脚本的内容:CREATETABLEUSERS(IDVARCHAR2(10)NOTNULL,NAMEVARCHAR2(20)NOTNULL,DESCRIPTIONVARCHAR2(200)NOTNULL); 将上述脚本存入文件“src\schema\user.sql”,然后通过OracleSqlplus客户端创建此表,如下图所示:配置Weblogic数据源在这个示例应用中,将使用数据源(DataSource)获得到数据库的连接,因此需要在Weblogic中进行数据源的配置,配置数据源之前则应该首先配置“连接缓冲池”。缓冲池配置需要确认的参数和范例如下所示:URLjdbc:oracle:thin:@:1521:orakingDriverClassnameoracle.jdbc.driver.OracleDriverUserNamepafaPasswordpassword缓冲池配置完成之后,就可以配置数据源了,如下图中所示,其中“PoolName”就是指之前配置的缓冲池的名称:记住数据源的JNDI名称“jdbc/pafademoDS”,这个名称将会在后续开发设置数据源时用到。

使用项目模板在Eclipse中导入项目模板使用项目模板可以提高PAFA3应用项目的可管理性、提高开发效率。在之前所准备的开发目录中,用文本编辑器打开项目模板根目录下的“.project”和“perties”两个文件,如下图所示,修改属性值或确认属性设置是否与本机环境相符,需要检查的包括下面几项:项目名称:.project中的“<name>”域以目录形式部署时的目录:deploy.single.dir属性存放EAR的目录:deploy.ear.dir属性PAFA3类库的位置:pafa.lib属性其它项目类库的位置:project.lib属性Weblogic.jar的位置:weblogic.jar属性保存修改后的文件并保存,打开Eclipse,在Eclipse的菜单中选择“文件导入…”,将出现下图中所示的导航界面: 选择“现有项目到工作空间中”后,点击“下一步”,在如下图界面中选择重命名过的项目根目录,“确定”后点击“完成”:操作完成后,重命名过的模板项目即被导入到Eclipse环境之中。Ant视图的配置与使用通过Eclipse菜单,选择“窗口”“显示视图”“Ant”,就可以在Eclipse界面中显示出Ant视图,在Ant视图中点击第一个有加号的图标以增加构建文件,如下图所示: 在将项目的构建文件加入Ant视图后,就可以看到构建文件“build.xml”所提供的所有“Task”,在“usage”任务上双击(执行),则可获得关于用法的提示,如下图所示:Buildfile:D:\MyProject\userProj\build.xmlusage:[echo]PafaApplicationBuildFile[echo]用法:ant-[target][echo][echo][target][echo]clean-->清空所有输出文件包括build和部署目录[echo]compile-->编译Java文件[echo]ear-->创建用于发布的EAR包文件[echo]exploded-ear-->创建展开目录形式的EAR应用(开发模式)[echo]BUILDSUCCESSFULTotaltime:580milliseconds执行某个目标时只需要双击或在【target】上点击鼠标右键并选择“Run”即可。【注意,项目下的“dist”部署目录需要执行“刷新”后才看得到,在项目根节点“userapp”的右键弹出菜单中选择“刷新”即可。】Eclipse自动编译设置Eclipse具有自动编译Java源文件的功能,这在编写代码阶段对于编译错误的发现是很有用的。为了利用Eclipse的这项功能,需要“设置对类库的引用”。导入完成之后,在下图中选择项目名称“userapp”,点击鼠标右键,在弹出菜单中选择“属性”,将弹出项目属性框:为了利用Eclipse的自动编译功能,需要设置对类库的引用,如上图中“JavaBuildPath”的“Libraries”中就定义了对项目外部类库的引用,图标上有感叹号“!”意思是路径配置有误;选择有误的类包,通过“Edit”修正类包路径,如下图所示,直至所有类包图标正常显示;在后续的开发中,如果用到类库中的其它类包,为使用Eclipse的自动编译,仍需要通过这个界面中的“AddExternalJARs”进行外部类包的引入。配置文件的分类、目的与作用PAFA3本身是一种各层松散耦合的框架结构,这种形式大大提高了应用的灵活性和适应性。各层次和功能的联系通过配置文件联系在一起,下表列出了项目模板提供的示例配置文件及其功用,这些配置文件的路径起点均为“config”:文件名作用app/application.xmlJ2EE应用配置文件,定义EJB和WAR模块等biz/appnameBizContext.xmlPafa3应用Biz层配置,定义Biz层、集成层等的组件biz/bizMpertiesBiz层MessageResourceBundle,定义在Biz层使用的Messagebiz/sqlmap-config.xmlIbatisSqlmap配置文件,定义Ibatis的基础属性以及Mapping文件biz/sqlmap-mapping.xmlIbatisSqlmapMapping文件,定义具体的SQL语句core/appCommonContext.xmlPafa3应用公共配置,定义JNDI模板等core/coreContext.xmlPafa3应用核心配置,定义Log等基础组件core/devLperties开发调试工具的配置文件,由DevLog使用core/pertiesPafa3本身的Log配置ejb/ejb-jar.xml标准EJB部署描述符ejb/weblogic-ejb-jar.xmlWeblogicEJB部署描述符web/appnameWebContext.xmlPafa3应用Web层配置,定义Web层的组件web/tiles-defs.xml页面布局定义web/web.xml标准Web应用部署描述符web/weblogic.xmlWeblogicWeb部署描述符web/webMpertiesWeb层MessageResourceBundle,供fmt标签等使用

页面布局设计与实现.do和.screen在用户没有执行任何功能之前,访问我们的应用就应该有一个起始页面,如下图所示:.do和.screen是PAFA3应用规范中的定义的两种请求类型,.screen请求意味着纯粹的页面显示请求,不包含后台Biz层的业务处理;而.do则意味着需要后台的Biz层进行业务处理,数据将会在不同逻辑层中传递。布局分析与设计如前所示,为简单起见,页面布局设定为左右结构,左边显示功能链接,右边为功能页面。为构建这个布局,需要编写下列文件:文件名位置作用mainLayout.jspsrc/webroot定义页面的布局结构include.jspsrc/webroot导入标签库,用于其它页面的导入menu.jspsrc/webroot显示功能菜单,位于布局左侧welcome.jspsrc/webroot欢迎页面,位于布局右侧error.jspsrc/webroot错误页面,用于显示错误信息 以下给出各文件的具体内容,其中代码的含义请参考相应的注释。【mainLayout.jsp】<%@pagecontentType="text/html;charset=GBK"%><!--使用struts的tiles技术,声明使用tiles标签--><%@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"> <!--布局的右边,用于内容窗口,是主要变化的部分--> <!--在显示不同页面时指定“content”所对应的JSP--> <!--在“tiles-defs.xml”中定义--> <tiles:insertname="content"/></td></tr></table></body></html>【include.jsp】:供其它页面包含,以减少代码量并有利于统一管理<!--定义页面编码--><%@pagecontentType="text/html;charset=GBK"%><!--定义JSTL核心库引用,包括out、if、foreach等标签--><%@taglibprefix="c"uri="/jstl/core"%><!--定义JSTL格式库引用,主要使用fmt标签--><%@taglibprefix="fmt"uri="/jstl/fmt"%><!--定义PAFA3标签库引用,主要使用bind标签--><%@taglibprefix="lwc"uri="/tags-lwc"%>【menu.jsp】:给出功能点的链接<%@includefile="include.jsp"%><!--c:url标签用于url的转化,以webroot为根目录起点--><p> <!--由于要用到绑定等功能,是功能性的请求,所以是.do--> <ahref="<c:urlvalue="/addUser.do"/>">增加用户</a></p><p> <!--显示一个纯界面让用户输入检索条件,所以是.screen--> <ahref="<c:urlvalue="/searchUser.screen"/>">检索用户</a></p>【welcome.jsp】:欢迎信息<%@includefile="include.jsp"%><!--显示欢迎信息--><p>欢迎!</p>【error.jsp】:用于显示错误信息<%@pageisErrorPage="true"%><%@includefile="include.jsp"%>错误信息<textareastyle="font-size:12px;font-family:couriernew;width:95%;"rows="25"><c:outvalue="${errorMessage}"/></textarea>布局的配置PAFA3项目模板本身已经定义好了和页面布局相关的基本配置,到目前为止,还不需要增加或修改布局方面的配置。以下几个配置取自相关的配置文件。【appnameWebContext.xml】(注意:这个文件在beta4中对应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】定义与页面布局相关的属性,如title信息等;最主要的部分是定义视图名称和JSP页面之间的映射关系,如下所示,其中“welcomeView”对应的“welcome.jsp”即为欢迎页面:<definitionname="mainLayout"page="/mainLayout.jsp"><putname="menu"value="/menu.jsp"type="page"/><putname="title"value="用户管理应用"/></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应用的缺省页面,相关内容如下:<welcome-file-list><welcome-file>index.screen</welcome-file></welcome-file-list>由以上定义可以知道“index.screen”设为缺省页面,而缺省页面与“welcomeView”的映射关系需要在“appnameWebContext.xml”中定义,并且所有.screen定义所对应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构建部署目录在完成了欢迎页面的开发和配置之后,应该可以实际看到运行效果了,在部署之前,修改“src/config/app/application.xml”,和部署目录的内容相比较,确认WAR模块和EJB模块的名称是否正确,如果按照之前所说的修改了模板的项目名称,则修改后的内容应该如下所示:<?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”节点上双击执行Ant任务,就可以生成部署目录,如下图所示:Weblogic部署测试 启动Weblogic并进入应用部署页面,选择Ant生成的部署目录,如下图所示,点击“TargetApplication”,然后按照Weblogic的提示和自己的部署目标进行部署: 部署完成之后,打开IE浏览器按照设定的URL访问,如果出现下图中的页面,则证明之前的工作没有错误,否则请重新检查之前的每一步骤直到完成下图目标。

“增加用户”功能的设计与实现功能分析根据之前“增加用户”功能的流程设计和通过预览看到的样子,细化的内部流程如下图中所示:公用层设计与实现公共层的含义是指Web层和Biz层共用的部分,包括在两层之间用于数据传递的DTO和用于定义ServiceRequestID名称的共用Util等,在部署时这些内容将被放置到EAR的“APP-INF”之中,而不是EJB或者WAR;除此之外,在Web层和Biz层都还有用于定义名称常量的Util类,这些名称源于配置文件,以避免在业务代码中“HardCode”字符常量。以下将会给出在这个用例中所涉及到的公用层组件及其代码。【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";}除了以上给出的名称常量定义,在应用开发中比较重要的一项内容就是定义在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层开发与实现通过之前的功能分析,我们知道在Web层需要开发的内容包括:“addUser.jsp”,用于显示输入用户信息的窗体;“success.jsp”,显示操作成功信息;“com.paic.userapp.management.web.controller.AddUserController”,Web层的功能控制器。相关代码如下,注意其中的注释信息:【webroot\management\addUser.jsp】<%@includefile="../include.jsp"%><formname="userForm"method="post"action="<c:urlvalue="/addUser.do"/>"><table> <tr> <td>用户ID:</td> <td><!--数据对象绑定--> <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>说明:</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;//用于开发阶段的调试DevLog.debug("NewUser-->"+user.getId()+","+user.getName());//准备ServiceRequestServiceRequestserviceRequest=newServiceRequest();serviceRequest.setRequestedServiceID(ServiceRequestID.ADD_USER);serviceRequest.setCurrentRequestObject(user);//发送ServiceRequest以获得ServiceResponseServiceResponseserviceResponse=dispatchService(serviceRequest,WebContextNames.PAFA_AC);//准备Web视图returnnewModelAndView(this.getSuccessView());}}配置IbatisSqlMapping通过之前的功能分析可以发现,最终的数据库操作是由Ibatis完成的,在本例中有两个相关的、位于“src\config\biz”的配置文件“sqlmap-config.xml”和“sqlmap-mapping.xml”;在这个例子中我们只需要在“sql-mapping.xml”中增加SQL语句,如下所示:【src\config\biz\sql-mapping.xml】:在INSERT语句中定义了参数对象为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层开发与实现实际上这里包括Biz层和集成层,通过之前的分析,我们需要在Biz层编写的Java类包括“AddUserAction”、“UserService”接口、接口的实现类“UserPojoService”以及集成层的“UserDAO”接口和接口的实现类“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{//获得当前事务的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//通过Ibatis执行名称为“addUser”的SQL语句getSqlMapClientTemplate().insert("addUser",user);}catch(DataAccessExceptione){//将数据库例外包装为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实例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{//获得当前事务的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//从请求中获取DTO参数UserDTOuser=(UserDTO)request.getCurrentRequestObject();//调用服务以完成功能UserServiceuserSrv=(UserService)context.getBean(BizContextNames.USER_SERVICE);userSrv.addUser(user);//返回响应ServiceResponseresponse=newServiceResponse();returnresponse;}catch(BusinessServiceExceptionbe){throwbe;}catch(PafaRuntimeExceptionpe){throwpe;}catch(Exceptione){thrownewPafaRuntimeException(txnId,"userapp.error.runtime.001","userapp.error.runtime.001",e);}}}编辑配置文件至此“增加用户”功能的开发就完成了,但还需要通过编辑配置文件将这些功能组件串在一起。需要修改的配置文件如下所述:【tiles-defs.xml】:定义视图名称所对应的JSP页面,增加以下定义<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配置数据源,我们在前面已经在Weblogic中配置好了数据源,并且定义了JNDI名称“jdbc/pafademoDS”;项目模板已经提供了数据源配置的模板,唯一需要确认的就是这个数据源的名称必须与服务器中的名称定义一致。【appnameBizContext.xml】:修改并确认包含下列定义<!--================================================================--><!--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的映射配置文件,请参考前一小节。Weblogic部署测试至此,“新增用户”功能的开发就完成了,在Ant视图中双击“exploded-ear”以更新部署目录(Ant使用增量构建,可以大大减少构建时间);启动Weblogic并进入应用部署页面就可以进行部署;如果之前部署的应用还在,也可以选择“RedeployApplication”进行更新即可。点击链接进行用户增加,如果顺利出现之前的预览页面“b”则意味着成功,否则请重复之前的步骤并确保每一步的正确。

“检索用户”功能的设计与实现功能分析根据之前“检索用户”功能的流程设计和通过预览看到的样子,细化的内部流程如下图中所示:公用层设计与实现通过“新增用户”功能的开发,我们已经搭建好了公用层的基本组件结构,现在只需要在原有的基础上添加一些内容即可,注意以下代码中突出的部分:【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";//检索结果列表的名称publicstaticfinalStringMODEL_USER_LIST="userList";}【com.paic.userapp.management.web.util.ViewNames】packagecom.paic.userapp.management.web.util;publicclassViewNames{publicstaticfinalStringERROR_VIEW="errorPage";publicstaticfinalStringSUCCESS_VIEW="success";//显示检索结果的视图的名称publicstaticfinalStringUSER_LIST_VIEW="userList";}【com.paic.userapp.management.web.util.WebContextNames】:没有变化【.util.BizContextNames】:没有变化【com.paic.userapp.management.dto.UserDTO】:没有变化Web层开发与实现通过之前的功能分析,在“检索用户”功能的Web层有两种动作:一是“searchUser.screen”,这个动作将输入检索条件的页面显示出来,细节参考接下来的配置部分;二是“searchUser.do”,这个动作完成实际的检索功能。需要开发的内容包括:“searchUser.jsp”,用于输入检索条件;“userList.jsp”,用于显示检索到的用户列表,使用JSTL的“c”标签进行显示处理;检索的Web层功能控制器为“com.paic.userapp.management.web.controller.SearchUserController”。相关代码如下,注意其中的注释信息:【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{//准备ServiceRequestStringname=request.getParameter("idPiece");ServiceRequestserviceRequest=newServiceRequest();serviceRequest.setRequestedServiceID(ServiceRequestID.SEARCH_USER);serviceRequest.setParameter("idPiece",name);//发送ServiceRequest以获得ServiceResponseServiceResponseserviceResponse=dispatchService(serviceRequest,WebContextNames.PAFA_AC);//准备Web视图Mapmodel=serviceResponse.getModel();returnnewModelAndView(ViewNames.USER_LIST_VIEW,ModelNames.MODEL_USER_LIST,model.get(ServiceResponse.SERVICE_RESPONSE_RESULT));}}配置IbatisSqlMapping为进行数据检索,还需要在“sqlmap-mapping.xml”中增加SQL查询语句,如下表中突出的部分:【src\config\biz\sql-mapping.xml】:新增Search语句<?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层开发与实现Biz层的框架也通过之前“新增用户”功能建立了起来,只需在Service和DAO中增加新的检索方法即可,但是我们还需要一个独立的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{//获得当前事务的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//通过Ibatis执行名称为“addUser”的SQL语句getSqlMapClientTemplate().insert("addUser",user);}catch(DataAccessExceptione){//将数据库例外包装为pafa的例外类型thrownewPafaDAOException(txnId,"UserIbatisDAO","error.sql.insert.001","error.sql.insert.001",e); }}publicListsearchUserByIdPiece(StringidPiece)throwsPafaDAOException{//获得当前事务的IDStringtxnId=PafaCoreContexton.getInstance().getThreadContext().getTxnID();try{//通过Ibatis执行名称为“searchUserByIdPiece”的SQL语句returngetSqlMapClientTemplate().queryForList("searchUserByIdPiece","%"+idPiece+"%");}catch(DataAccessExceptione){//将数据库例外包装为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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论