收藏 分销(赏)

Java综合项目开发平台开发标准规范.doc

上传人:精*** 文档编号:2977894 上传时间:2024-06-12 格式:DOC 页数:75 大小:604.54KB
下载 相关 举报
Java综合项目开发平台开发标准规范.doc_第1页
第1页 / 共75页
Java综合项目开发平台开发标准规范.doc_第2页
第2页 / 共75页
Java综合项目开发平台开发标准规范.doc_第3页
第3页 / 共75页
Java综合项目开发平台开发标准规范.doc_第4页
第4页 / 共75页
Java综合项目开发平台开发标准规范.doc_第5页
第5页 / 共75页
点击查看更多>>
资源描述

1、Java项目开发平台开发规范_北京东方国信电子有限公司CRM事业部时间:-8-27目 录Java项目开发平台开发规范1一、开发平台概述3二、技术综述51、Struts框架技术52、Hibernate数据持久化技术93、动态bean技术15三、在BONC-JONE平台上进行开发191、BONC-JONE平台目录阐明192、如何使用BONC-JONE运营起来193、开发关于规范性规定及典型环节19四、重要函数及使用技术办法阐明43如何使用自定义标签库?43如何使用日记类写日记?45如何进行资源注册?48如何进行登陆权限验证?48如何进行字符转换?48如何对资源文献进行字符转换?48如何配备、读取应

2、用配备信息?48如何打包boncpersistenceobj.jar文献?48数据操作办法原理是如何?48如何将任意文献上传到数据库中,又如何下载?48如何保证在页面清空字段能对的提交到数据库?48如何使用日期控件?49如何使用DBQuery类进行数据查询?49如何自动生成Hibernate持久化beans及map文献?49如何使用分页技术?51附录:54附A:Struts学习精要参照54附B:Hibernate学习精要参照54附C:技术备忘54一、开发平台概述BONCJONE开发平台是北京东方国信电子技术有限公司遵循“简朴、有效、先进、可扩”原则,通过整合Struts 1.1与Hiberna

3、te 2.1等先进开源技术设计并实现一种J2EE开发平台。其架构图如下:这个体系架构主体是MVC架构。MVC是Model/View/Control缩写。Model/View/Control是软件设计典型构造。在这种设计构造下,一种应用被分为三个某些:Model、View和Controller,每个某些负责不同功能。Model是指对业务数据/信息解决模块,涉及对业务数据存取、加工、综合等;View是指顾客界面,也就是面向顾客数据表达;Controller则负责View和Model之间流程控制,也就是完毕两个方向动作:1.将顾客界面(View)操作映射到详细Model,以完毕详细业务逻辑;2. 将

4、通过Model解决完业务数据及时反映到顾客界面(View)上。其系统构成构造图如下:平台辅助API表达层StrutsTiles业务层业务管理接口业务管理抽象类业务管理实现类业务Beans技术JDBC持久化层Hibernate连接池技术数据库DataBaseBONCJONE开发平台从总体构造上充分体现了分层系统设计思想。分层概念来源于操作系统及网络合同设计中,但当前这个概念已在所有面向对象应用系统中相称流行了。BONCJONE开发平台重要层次分为:表达层、业务层、持久化层及某些各层公用工具类库。分层系统设计思想重点在于:l 一种分层系统在各有关层实当代码间定义了接口,从而容许一种层实当代码变化不

5、会影响到其他层。l 分层系统构造还限制隔层依赖发生,各层通讯是由顶向下管理。某一层仅依赖于直接位于它下面那一层。每一层对其她层存在都是不懂得,除非那一层紧邻其下。虽然是对紧邻其下层它也仅需要懂得如何使用接口与其通讯就可以了,而无需懂得其实现细节。BONCJONE开发平台通过Struts+Tiles技术实现了MVC模式中表达层和控制层,通过Hibernate技术结合动态Bean技术融合成独特业务Beans技术构建了数据层。二、技术综述1、Struts框架技术 Struts是一种基于J2EEMVC框架。 J2EE体系涉及JSP、Servlet、EJB、WEB SERVICE等多项技术。这些技术浮现

6、给电子商务时代WEB应用开发提供了一种非常有竞争力选取。但如何把这些技术组合起来,形成一种适应项目需要稳定架构对项目开发是非常重要。 设计一种框架,需要考虑方面诸多,不但要对J2EE体系中各种技术进行筛选用舍,并要考虑到开发过程中角色分工、后期运营维护,以及系统扩展性等诸多因素。 因而,一种成功软件需要有一种成功架构。MVC架构使得应用程序构造更加清晰,通过将代码按照层次划分为业务逻辑/数据、顾客界面和应用流程控制这三个层次,增强代码稳定性。咱们懂得,对于Model、View、Controller这三某些功能来讲,View实现普通是由界面设计人员和界面程序员来完毕,Model则是由业务逻辑程序

7、员来完毕,Controller则普通由负责整体控制程序员来完毕。Controller某些代码比较稳定,普通会实现一种通用架构;而Model则跟随商务流程变化而变化;View更改则是随着顾客需求更改而更改。这种模块功能划分有助于在代码修改过程中进行模块隔离,而不需要把具备不同功能代码混杂在一起导致混乱。对于项目开发而言,有助于在项目小组内按照小构成员各自擅长进行分工,有助于三个某些并行开发、加快项目进度。 当前可供选取较为流行MVC框架有六种之多:Struts、Maverick、WebWork、Turbine、RealMothods、AOP(aspect-oriented programming

8、)。它们应用领域及实现侧重点各有不同。但以Struts应用最广,是基于MVC模式Web应用最典型框架,当推首选。 Struts最早是作为Apache Jakarta项目构成某些问世。项目创立者但愿通过对该项目研究,改进和提高Java Server Pages (JSPs)、Servlet、标签库以及面向对象技术水准。 Struts这个名字来源于在建筑和旧式飞机中使用支持金属架。它目是为了协助咱们减少在运用MVC设计模型来开发Web应用时间。 因而咱们选取Struts。Struts勉励按照Model 2方式构建应用体系。Model 2是MVC基本设计模式一种变体。MVC设计模式长处是,它使得Mo

9、del、View和Controller各个某些之间相对独立。Struts在一种中心位置装配ActionServlet、ActionMapping和各种Action类,解决所有传入HttpServletRequest。ActionServlet把各个传入HttpServletRequest分发给Action类,而ActionMapping对象可通过Struts-config.xml配备文献控制,它告诉ActionServlet如何分发祈求。 本图示意了Struts各个某些之间通信过程Controller功能:在客户端、View和Model之间起协调、仲裁作用。只有Controller才会与Mod

10、el和View联系,在这中间它就象是一种互换机,而Model和View之间不会直接通信,这样,Model、View和Controller就被分隔开来。这是成功运用Struts核心所在。阐明一下:所有Controller逻辑应当放入Action类,与应用其她层通信可以在这里进行。虽然咱们可以把业务逻辑也放入Controller,但普通而言最佳不要这样做。应当改用Model某些组件,由于这些组件才是真正解决数据地方。把数据保存到数据库也应当是Model功能之一。当Controller解决好一种HttpServletRequest,它把祈求转发给View。View唯一任务是体现数据,在Struts中

11、,View普通使用JSP技术。在Struts中,Controller和View之间所有通信都通过HttpServletRequest、HttpSession和ServletContext间接完毕,对于这些操作来说,首选技术莫过于Servlet,Struts直接把HttpServletRequest传递给Servlet或者是JSP,但是Servlet容器会自动把JSP转换成Servlet。Struts框架将其侧重点放在了Controller与View层。View由JSP定制标记库和JSP页面共同构造,其中ActionForm类是一种类似JavaBeanValueObject对象,带有set和ge

12、t办法,用来保存客户状态。按照StrutsMVC概念,ActionForm位于View和Controller之间中间地带。Struts提供了一组完备专用标记,用来从JSP访问ActionForm里面数据。Controller由ActionServlet、ActionMapping和各种Action类互相配合来完毕。其中Action类给开发人员自由发挥空间比较大,因而,在开发过程中完整地遵从MVC概念Action类使用方式是一种核心。对于Struts解剖。图解阐明:其中不同颜色代表MVC不同某些:红色(控制器)、紫色(模型)和绿色(视图)l 一方面,控制器(ActionServlet)进行初始化

13、工作,读取配备文献(struts-config.xml),为不同Struts模块初始化相应ModuleConfig对象。例如配备文献中Action映射定义都保存在ActionConfig集合中。相应地有ControlConfig集合、FormBeanConfig集合、ForwardConfig集合和MessageResourcesConfig集合等。l 控制器接受HTTP祈求,并从ActionConfig中找出相应于该祈求Action子类,如果没有相应Action,控制器直接将祈求转发给JSP或者静态页面。否则控制器将祈求分发至详细Action类进行解决。l 在控制器调用品体Actionexe

14、cute办法之前,ActionForm对象将运用HTTP祈求中参数来填充自己(可选环节,需要在配备文献中指定)。详细ActionForm对象应当是ActionForm子类对象,它其实就是一种JavaBean。此外,还可以在ActionForm类中调用validate办法来检查祈求参数合法性,并且可以返回一种包括所有错误信息ActionErrors对象。如果执行成功,ActionForm自动将这些参数信息以JavaBean(普通称之为form bean)方式保存在Servlet Context中,这样它们就可以被其他Action对象或者JSP调用。Struts将这些ActionForm配备信息都

15、放在FormBeanConfig集合中,通过它们Struts可以懂得针对某个客户祈求与否需要创立相应ActionForm实例。l Action很简朴,普通只包括一种execute办法,它负责执行相应业务逻辑,如果需要,它也进行相应数据检查。执行完毕之后,返回一种ActionForward对象,控制器通过该ActionForward对象来进行转发工作。咱们主张将获取数据和执行业务逻辑功能放到详细JavaBean当中,而Action只负责完毕与控制关于功能。遵循该原则,因此在上图中将Action对象归为控制器某些。本图给出了客户端从发出祈求到获得响应整个过程图解阐明。以上咱们从原理上剖析了Stru

16、ts,关于详细如何应用Struts框架框,请参看附录A。2、Hibernate数据持久化技术 Hibernate 是一种object/relational mapping (ORM)持久化技术。 曾经,涉及当前也有许多J2EE项目在直接使用SQL/JDBC实现持久化。众所周知DAO模式让咱们把复杂JDBC编码和大量SQL隐藏到业务逻辑和领域模型之后,但这种方式实现是有限分离,最致命是应用由一种数据库向另一种数据库迁移时可移植性非常差。此外它规定开发者对项目中使用关系数据库管理系统非常熟悉,并且要精通SQL。 当前可供选取较为流行数据持久化技术也同样有诸多:EJB、Hibernate、JDO、O

17、JB、Cayenne、SimpleORM、JAXOR等等。 不选用EJB理由 EJB在J2EE应用里是一种重量级组件,它由容器提供了分布、事务等各种公司级应用需要特性。咱们不选用它重要是由于:l 兼容性问题。规范一模同样,实现各有不同,当从某一种EJB容器向另一种EJB容器移植时维护成本会很高。l 性能问题。l 不支持动态Query问题。Entity Bean最后执行代码是在布置编译时生成,很难实现动态Query。l 如果一种应用对事务解决规定很高,访问量非常大需要实现分布式集群时EJB才是必要。选用Hibernate理由 Hibernate是当前最活跃,应用最广,更新最快,文档最完整,功能最

18、齐备一种数据持久化开源项目。选用它理由重要有:l Hibernate并不直接反映数据库中表和列,它通过某些持久化类(JavaBeans)来映射到数据库中表上。这些持久化类与咱们普通使用JavaBeans没有任何不同,它们即可以由Hibernate来持久化,同样重要是它们也可以完全与Hibernate无关地被使用。这是它与其他持久化模型(例如EJB)一种重要区别即Hibernate持久化类是纯JavaBeans,它可以在任何地方被使用,而不需要容器。l Hibernate提供了一种对象导向查询语言(HQL)。几乎支持所有SQL语法,老式数据库可以做它就可以做。l Hibernate提供了数据分段

19、提取控制功能。l 将Hibernate放在SLSB后,它同样可以实现分布式应用,同样可以运用容器提供JAT事务服务。因而咱们选取Hibernate。Hibernate概要构造图:Hibernate详细构造图:Hibernate使用概要l 手工创立或使用工具自动生成Hibernate持久化类;文献示例:package eg;import java.util.Set;import java.util.Date;/* * hibernate.class * table=CATS */public class Cat private Long id;/ identifier private Date

20、birthdate; private Cat mate; private Set kittens private Color color; private char sex; private float weight; /* * hibernate.id * generator-class=native * column=CAT_ID */ public Long getId() return id; private void setId(Long id) this.id=id; /* * hibernate.many-to-one * column=MATE_ID */ public Cat

21、 getMate() return mate; void setMate(Cat mate) this.mate = mate; /* * hibernate.property * column=BIRTH_DATE */ public Date getBirthdate() return birthdate; void setBirthdate(Date date) birthdate = date; /* * hibernate.property * column=WEIGHT */ public float getWeight() return weight; void setWeigh

22、t(float weight) this.weight = weight; /* * hibernate.property * column=COLOR * not-null=true */ public Color getColor() return color; void setColor(Color color) this.color = color; /* * hibernate.set * lazy=true * order-by=BIRTH_DATE * hibernate.collection-key * column=PARENT_ID * hibernate.collecti

23、on-one-to-many */ public Set getKittens() return kittens; void setKittens(Set kittens) this.kittens = kittens; / addKitten not needed by Hibernate public void addKitten(Cat kitten) kittens.add(kitten); /* * hibernate.property * column=SEX * not-null=true * update=false */ public char getSex() return

24、 sex; void setSex(char sex) this.sex=sex; l 手工创立或使用工具自动生成Hibernatexml映射文献;文献示例: l 初始化ConfigurationConfiguration cfg = new Configuration() .addFile(Cat.hbm.xml) .addFile(DomesticCat.hbm.xml);或Configuration cfg = new Configuration().addClass(eg.Cat.class).addClass(eg. DomesticCat.class) l 获得SessionFac

25、torySessionFactory sessions = cfg.buildSessionFactory();l 进行数据存取等操作Session sess = sessions.openSession(conn);/ start a new transaction (optional)Transaction tx = sess.beginTransaction();DomesticCat pk = new DomesticCat();pk.setColor(Color.TABBY);pk.setSex(F);pk.setName(PK);pk.setKittens( new HashSet

26、() );pk.addKitten(fritz);sess.save( pk,new Long(1234) );sess.flush();/force the SQL INSERTsess.refresh(cat);/re-read the state (after the trigger executes)mit();sess.close();l 使用HQL语言查询Query q = s.createQuery(from foo in class Foo where foo.name=:name and foo.size=:size);q.setProperties(fooBean);/ f

27、ooBean has getName() and getSize()List foos = q.list(); 需要阐明是:Hibernate产生所有SQL是运营时产生,说更精确某些是在你系统启动时产生。所有咱们需要只是一种包括映射元数据xml映射文献。xml映射文献可以你手工来维护,也可以通过植入源代码注释来产生。以上咱们简要简介了Hibernate基本特点及用法,详细内容请参看附录B。3、动态bean技术 使用动态bean技术理由:l 咱们不只一次抱怨信息系统中数据项变化不定,无法设计和实现Java Beans。l 咱们也不只一次作过这样事情:数据项增长或减少了,我需要修改信息系统以求适应

28、。例如咱们按照某个公司规定设计出了个Bean来满足该公司对信息系统中业务数据模型需要,过了一定期间后,她们业务发生了一定变化,要对数据模型扩充一某些数据项,可想而知会有多么辛苦。动态beans技术就是为解决此类问题而生,它为解决由于数据项变化带来设计和实现变更提供了技术基本。动态bean技术重要概念:l 一种Bean属性定义完全取决于有无访问者办法:设立器(setXXX())和获取器(getXXX()),而与在类定义中有无显示阐明字段毫无关系。l 为了使Beans能确认一种属性,其设立器(setXXX())和获取器(getXXX())必要遵循下列命名规则: n 一种属性名在访问办法中必要以大写

29、字母开头; n 在其他地方以小写字母开头。 l 扩展javaBean属性机制:定义了五种属性访问方略,使得属性访问代码像脚本同样在运营时决定,此外一种进步就是它支持List和Map属性元素属性,也就是扩展javaBean属性机制它不把一种Bean某个List和Map成员当作一种整体属性,而是动态地把这个List和Map成员元素当作属性,这样无疑提供了一种无限扩展Bean属性能力。Common-beanutils 1.6中propertyUtils实用类使用Java语言内省反射功能实现扩展属性设立器和获取器。propertyUtils定义了引用一种特定Java bean属性五种格式:n 简朴属性

30、,格式beanName.propName。propName标记了JavaBean beanName一种属性,这个属性获取器和设立器办法是通过JavaBean原则内省功能决定。如果要变化简朴属性值,必要要有设立器操作,可以想象成类似调用beanName.getpropName()|setpropName(value); n 嵌套属性,格式beanName.propName1.propName2.propName3。像简朴属性同样,第一种propName1元素被用来选取一种属性获取器办法,在这个办法返回对象上使用propName2获取器办法返回下一种对象,最后这个对象属性propName3被访问或

31、设立,可以想象成类似调用beanName.getpropName1().getpropName2().getpropName3()|setpropName3(value); n 索引属性,格式beanName.propNameindex。属性propName1可以是一种数组,java.util.List或者JavaBean beanName有索引属性获取器和设立器操作。bean只需propName获取器办法,可以想象成类似调用beanName. getpropName (index)|setpropName(index,value); n 映射属性,格式beanName. propName(k

32、ey)。propName是一种java.util.Map实现。bean只需propName获取器办法,可以想象成类似调用beanName. getpropName ().get(key)|set(key,value); n 组合属性,格式beanName. propName1.propName2index.propName3(key)。 l 动态bean:动态bean具备动态属性,也就是说可以由程序运营时构造bean属性,而不是像原则javaBean在编译时决定一种bean属性。定义和访问一种动态bean环节如下:n 定义一种动态属性Dynaproperty数组,动态属性Dynapropert

33、y定义了一种属性名字和对象类型; n 用定义好动态属性数组实例化一种动态类; n 由动态类返回一种动态bean; n 可以用propertyUtils访问和设立动态bean属性。 下面是定义和访问动态bean代码:/ TestDynaBean.javaimport mons.beanutils.*;import java.util.*;public class TestDynaBean public static void main(String args) TestBean bean = new TestBean();Object value = null;try Dynaproperty

34、px = new Dynaproperty(subordinate,bean.getClass(), new Dynaproperty(firstName,Class.forName(java.lang.String), new Dynaproperty(lastName,Class.forName(java.lang.String); DynaClass dynaClass = new BasicDynaClass(employee,null, px ); DynaBean employee = dynaClass.newInstance(); propertyUtils.setproper

35、ty(employee,subordinate,bean); propertyUtils.setproperty(employee,subordinate.listIndexed0,dy bean set); propertyUtils.setproperty(employee,firstName,Fred); propertyUtils.setproperty(employee,lastName,Flintstone); System.out.println(subordinate.listIndexed0:); System.out.println(propertyUtils.getpro

36、perty(employee,subordinate.listIndexed0); System.out.println(firstName: + propertyUtils.getproperty(employee, firstName); System.out.println(lastName: + propertyUtils.getproperty(employee, lastName);catch (Exception e )System.out.println(e.toString(); 从配备文献配备动态bean动态属性好处在于既能固定又能更改动态Bean属性,这些属性是这个动态B

37、ean对外界宣布访问合同。动态属性Dynaproperty重要构造函数接受两个参数:第一种为属性名称,为字符串性,第二个为属性类型,为Class类型。从配备文献读取资料普通为字符串型,咱们可以用ClassLoader把配备文献中字符串型属性类型转化成Class类型属性类型。下面struts 1.1 中struts-example.war formbeans.xml中片断体现了如何在配备文献中定一种动态bean动态属性:下面RequestUtils代码片断体现了如何从字符串表达属性类型转化成Class型属性类型:public static Class applicationClass(Strin

38、g className) throws ClassNotFoundException / Look up the class loader to be used ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader = null) classLoader = RequestUtils.class.getClassLoader(); / Attempt to load the specified class return (classLoader.loadClass(cl

39、assName); 这就是关于动态bean所有奥秘,RequestUtils类代码片断public static ActionForm createActionForm就是这样创立动态bean。三、在BONC-JONE平台上进行开发1、BONC-JONE平台目录阐明注意:mon、com.bonc.security包属于开发平台基本支持包,其中文献不容许开发人员改动。2、如何使用BONC-JONE运营起来 将开发平台从source safe拉下来后,只需要将src目录下bonc_init.properties文献中boncHome=途径改为你所下载目录实际途径,如:boncHome=D:DevelopWorkjavaboncCrmexamplerootWEB-INF,做了这样设立后,系统启动时就会到这个目录下去找咱们项目配备文献bonc_config.xml。 如果你使用是Jbuild

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 品牌综合 > 行业标准/行业规范

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服