1、Java工程开发平台开发标准 北京东方国信电子CRM事业部 时间:2003-8-27 目 录Java工程开发平台开发标准1 一、开发平台概述2 二、技术综述2 1、Struts框架技术2 2、Hibernate数据持久化技术4 3、动态bean技术9 三、在BONC-JONE平台上进展开发12 1、BONC-JONE平台目录说明12 2、如何使用BONC-JONE运行起来13 3、开发有关标准性要求及典型步骤13 四、主要函数及使用技术方法说明36 如何使用自定义标签犀? 36 如何使用日志类写日志? 38 如何进展资源注册? 41 如何进展登陆权限验证? 4
2、1 如何进展字符转换? 41 如何对资源文件进展字符转换? 41 如何配置、读取应用配置信息? 41 如何打包 boncpersistenceobj. jar 文件? 41 数据操作方法的原理是怎样的? 41 如何将任意文件上传到数据库中,义如何下载? 41 如何保证在页面清空的字段能正确提交到数据库? 41 如何使用日期控件? 42 如何使用DBQuery类进展数据查询? 42 如何白动生成Hibernate持久化beans及map文件? 42 如何使用分页技术? 44 附录:45 附A: Struts学习精要参考45 附B: Hibernate学习精要■参考45
3、 附C:技术备忘45 定义了五种属性访问策略,使得属性的访问代码像脚本一样在运行时决定,另外一 个进步就是它支持List和Map属性的元素属性,也就是扩展javaBean属性机制它不把 一个Bean的某个List和Map成员看成一个整体属性,而是动态地把这个List和Map 成员的元素看成属性,这样无疑提供了 一种无限扩展Bean属性的能力。 Common-beanut i I s 1.6中的propertyUt i I s实用类使用Java语言的内省反射功能实 现扩展属性的设置器和获取器。propertyUti Is定义了引用一个特定Java bean属性的五种 格式: ■ 简单属性
4、格式 beanName. propName。propName 标识了 JavaBean beanName 的 一个属性,这个属性的获取器和设置器的方法是通过JavaBean的标准内省功能 决定的。如果要改变简单属性的值,必须要有设置器操作,可以想象成类似调 用 beanName. [getpropName () | setpropName (va I ue)];嵌套属性,格式 beanName. propNamel. propName2. propName3。像简单属性一样, 第一个propNamel元素被用来选择一个属性获取器方法,在这个方法退回的对 象上使用propName2的获取器方法
5、返回下一个对象,最后这个对象的属性 propName3被访问或设置,可以想象成类似调用 beanName. getpropNamel (). getpropName? (). [getpropName3 () | setpropName3 (va I ue)]索引属性,格式beanName. propName[ index] 0属性propNamel可以是一个数组, java, ut i I. List或者JavaBean beanName有索引属性获取器和设置器操作。 bean只需propName的获取器方法,可以想象成类似调用beanName. [getpropName (index)
6、setpropName (i ndex,vaIue)]: ■ 映射属性,格式 beanName. propName (key)。propName 是一个 java. util. Map 实现。bean 只需propName的萩取器方法,可以想象成类似调用beanName. getpropName0. [get("key")|set("key",value); ■ 组合属性,格式 beanName. propNamel. propName2[i ndex]. propName3 (key) 0• 动态bean: 动态bean具有动态属性,也就是说可以由程序运行时构造bean的属性,而不是
7、像标准 的javaBean在编译时决定一个bean的属性。 定义和访问一个动态bean的步骤如下: ■ 定义一个动态属性Dynaproperty数组,动态属性Dynaproperty定义了 一个属 性的名字和对象类型; ■ 用定义好的动态属性数组实例化一个动态类; ■ 由动态类返回一个动态bean; ■ 可以用propertyUti Is访问和设置动态bean的属性。 下面是定义和访问动态bean的代码: // TestDynaBean. javaimport org. apache mons.beanut iIs. *; import java.ut iI. pub Ii
8、c cI ass TestDynaBean { pub Iic static void ma i n (Str i ng[] args) {TestBean bean = new TestBean (); Object vaIue = null;try( Dynaproperty[] px = (new Dynaproperty ("subord i nate", bean.getClass ()), new Dynaproperty ("f i rstName",Class. forName(" java. lang. Str ing")), new Dynaproperty("I
9、astName",Class. forName ("java. lang. Str i ng")) };DynaClass dynaCIass = new BasicDynaClass("employee",null, px ); DynaBean empIoyee = dynaCIass. new Instance ();propertyllt i I s. setproperty (emp I oyee, "subord i nate", bean); propertyllt i I s. setproperty (emp I oyee, "subord i nate. I i st
10、 I ndexed [0]", "dy bean set");propertyllt i I s. setproperty (emp I oyee, "f i rstName", "Fred"); propertyllt i I s. setproperty (emp I oyee, " I astName","FIi ntstone"); System, out.pr intIn ("subordinate. Iist Indexed[0]:");System, out. pr i nt I n (propertyllt i I s. getproperty (emp I oyee, "
11、subord i nate. I i st Indexed[0]")); System, out. pr intIn("fi rstName:" +propertyllt i I s. getproperty (emp I oyee, "f i rstName")); System, out. pr i nt In("IastName:" +propertyllt i I s. getproperty (emp I oyee, " I astName")); )catch (Except i on e )(System, out. pr i nt I n (e. toStr i ng (
12、)); } )} 从配置文件配置动态bean的动态属性好处在于既能固定又能更改动态Bean的属 性,这些属性是这个动态Bean对外界的宣布的"访问协议"。动态属性Dynaproperty的 主要构造函数承受两个参数:第一个为属性名称,为字符串性,第二个为属性的类型, 为Class类型。从配置文件读取的资料普通为字符串型,我们可以用ClassLoader把配 置文件中字符串型的属性类型转化成Class类型的属性类型。 下面 struts 1. 1 中 struts-exampIe. war 的 formbeans, xml 中的片断表达了如何 在配置文件中定一个动态bean的动态属
13、性:
14、ss appIi cat i onCI ass (Str i ng cIassName)throws CIassNotFoundExcept i on { // Look up the cI ass loader to be usedClassLoader cIassLoader = Thread. currentThread (). getContextC I assLoader ();i f (cIassLoader — null) ( c I assLoader = RequestUt i I s. c I ass. getC I assLoader (); } // Atte
15、mpt to Ioad the specified cI ass return (cIassLoader. IoadCI ass(cIassName)); } 这就是关于动态bean的所有奥秘,RequestUt i I s类:代码片断pub I i c static Act ionForm createAct ionForm就是这样创立动态bean的。 三、在B0NC-J0NE平台上进展开发 1、BONC-JONE平台目录说明注意:com. bone mon、com. bone, secur i ty包属于开发平台根本支持包,其中的文件不 允许开发人员改动。 2、如何使用BONG-
16、JONE运行起来 将开发平台从source safe拉下来后,只需要将src目录下的bonc_init. properties 文件中 boncHome二的路径改为你所下载目录的实际路径,如: boncHome=D: \\Deve IopWork\\java\\boncCrm\\examp I eroot\\WEB-INF,做了 这样的设置后, 系统启动时就会到这个目录下去找我们的工程配置文件bonc_conf i g. xml。 如果你使用的是Jbuilder,还应该将I ib目录下的所有包文件,参加到你工程的Required Libraries 中。 做完以上工作bonc-jone应
17、该就可以正常运行了。 3、开发有关标准性要求及典型步骤 • 应用的包的组织规那么客户关系工程中所有与应用模块相关的包均应在com. bone, erm包下,如果开 发的是其他工程那么根据工程名称来定义这个包名称,可能是这样的: com. bone, samp I e 等。 ■ 在com. bone, erm包之下,以模块名称来分包,比方:模块名称是“留言模块〃, 就要定义一个与其对应的包com. bone. erm. module, leavewordo在各模块包下再分为bean包〔存放Form bean及其他本模块可能要用到的 bean〕action包〔存放Act i on类〕与bu
18、ss i nessmanager业务管理包〔存放业 务管理接口 类〕,比方:com. bone. erm. module, leaveword, act ion、 com. bone. erm. module, leaveword, bean 与 com. bone. erm. modu I e. I eaveword, buss i nessmanager 包。 ■ 在各模块的业务管理包下再定义业务管理实现类包〔impl包存放业务管理接口 的实现类〕,比方:com. bone. erm. module, leavev/ord. buss i nessmanager. imp I o
19、■ 包定义的要求:全部小写字母定义。 • 应用开发中主要编写的类的作用Form bean类:建议开发中尽量使用动态Form bean〔即根据struts的配置支 件生成的动态bean〕,特殊情况下才写Form bean类。该类是一个ValueObject 对象,主要的作用是包装客户端请求,将数据从view层传给Action类,由 Action类转给业务处理类进展处理:或者由Action类更改或填充其中的数据, 然后将其传给view层来显示。 ■ Action类:Action类主要完成三方而的功能,其一是做登陆及权限验证,其 二是做数据校验,其三〔也是最主要的)员责完成与控制有关的功能。需要
20、注 意的是尽可能不要此类中包含业务处理功能。 ■ 业务管理接口类:该类是对业务对象进展操作的抽象,是一个接口,对该业务 对象的操作均应通过它来进展。 ■ 业务管理抽象类:这种类实现或局部实现业务管理接口中定义的方法,业务操 作的大局部代码均应该写在这个类中。由于这个类是个抽象类,所以它不能够 被实例化。 ■ 业务管理实现类:这种类是业务管理抽象类的继承类,通常情况下其中无实际 代码。 应用开发中关键的配置文件的意义及功能 ■ web. xml文件:是Web应用最根本的部署描述配置文件。 部署Web应用首先要配置web. xml文件。开发人员需要在Web. xml部署描述文件中 配置
21、 有效的部署描述文件必须包含DTD声明: web-app标记是部署描述文件的根元素,它的子元素包括: 元素 描述 icon 此元素指定在GUI工具中表示此Web应用的大图标和小图 标,包含一个sma 1 l-icon和一个large-icon元素,可使 用GIF或JPEG格式的图像 d i sp1 ay-name 此元素
22、提供在GUI工具中此模块的短名字 descr i pt i on 此元素提供关于父元素的描述性文本 d i str ibutab1e 如果在Web应用部署描述中使用该元素,就表示该Web应 用可以部署到分布式Servlet容器 context-param 此元素包含Web应用的Servlet环境的初始参数 servlet 包含一个servlet的声明性数据 servlet-mapping 在servlet和ur 1模式间进展映射 session-config 声明此Web应用的Session参数 mime-mapping 定义扩展名和mime type间的映射 v
23、/e 1 come-f i 1 e-1 i st
包含we 1 come-f i 1 e子元素的顺序列表
error-page
包含一个错误代码或违例类型与web应用中资源的映射
taglib
用于描述一个JSP标记库
resource-ref
包含一个对外部资源的引用声明
secur ity-constraint
用于为一个或多个Web资源集合指定相应的平安约束
login-config
用于配理身份筌定的方法,此应用使用域名,以及通过表 单登录机制那么需要设置此属性
secur ity-role
包含使用于web应用中 24、>元素的平 安角色的声明
env-entry
包含应用环境变量的声明
ejb-ref
用于声明对EJB的引用
ServletContext初始化参数:
context-param标记的子元素包括: param-name : 参数名 param-va I ue : 参数值 description :参数的描述信息 例如:
25、 descr i pt ion
Sess i on 配置
session-config标记的子元素包括:
session-timeout : session 超时时间
例如:
26、name :在GUI X具中的显示名称
descr i pt ion :描述信息
servlet-class | jsp-f i le : servlet 类名称;jsp 文件的完全路径
init-param :初始化参数列表
Ioad-on-startup : web应用启动时装载
secur ity-role-ref:定义平安引用角色
servlet-mapping标记的子元素包括:
servIet-name : servlet 名称
例如:
27、n>IargeI. gif1arge-icon>
28、it Param VaIue 29、k>
30、ime-mapping> 31、ile>
index, htm 32、ept ion~type>
33、据交换的保护方式
login-config标记的子元素 包括:
auth-method :用于为Web应用配置身份鉴定机制。作为对使用身份 签定约束保护的任何W e b资源取得访问的先决条件,用户必须使用已 配置的身份鉴定机制进展鉴定。此元素的合法值为“BASIC”、“DIGEST” 、 “FORM” 或 “CLENT-CERT”
realm-name :指定在 根底授权中的域名form-log in-config :定义Web应用中使用的登陆页面可被找到的位 置
secur ity-role标记的子元素包括:
descr i pt ion :描述信息roIe-name :平安角色的 34、名字
例如:
35、ew/Control的缩写。
Mode I /V i ew/Contro I是软件设计的典型构造。在这种设计构造下,一个应用被分为三个局 部:Model、View和Control ler,每个局部负责不同的功能。Model是指对业务数据/信息 的处理模块,包括对业务数据的存取、加工、综合等;View是指用户界面,也就是面向用 户的数据表示:Controller那么负责View和Model之间的流程控制,也就是完成两个方向 的动作:1.将用户界面(View)的操作映射到具体的Model,以完成具体的业务逻辑;2.将 通过Model处理完的业务数据及时反响到用户界而(View)上。
其系统组成 36、构造图如下:
• 分层系统构造还限制隔层依赖的发生,各层的通讯是由顶向下管理的。某一层仅依 赖于直接位于它下面的那一层。每一层对其他层的存在都是不知道的,除非那一层 紧邻其下。即使是对紧邻其下的层它也仅需要知道如何使用接口与其通讯就可以 了,而无需知道其实现细节。
B0NC-J0NE开发平台通过Struts+Ti les技术实现了 MVC模式中的表示层和控制层,通 过Hibernate技术结合动态Bean技术融合成独特的业务Beans技术构建了数据层。
二、技术综述
1、Struts框架技术Struts是一个基于J2EE的MVC框架。
J2EE体系包括JSP、Servlet、EJ 37、B、WEB SERVICE等多项技术。这些技术的出现给电子商务 时代的WEB应用开发提供了一个非常有竞争力的选择。但怎样把这些技术组合起来,形成一 38、~name>DefauIt
39、11d
40、r i >
41、tagI i b-1ocat i on>/WEB-1 NF/struts-t i Ies. tld
看来web. xml的配置是很多的,但在开发中我们需要进展的配置并不多。 在bonc-jone开发平台的web. xml中根本不需要开发人员变动已有的配 置。唯一需要由开发人员进展的配置是增加各模块的struts配置文件路 径,例如:
42、 t iIes. Act i onComponentServI et
43、是Struts柜架的中心配置文件,通俗地说是Struts应用的 地图。
以下是Struts配置文件的根本构造:
44、utoGenerated by : Struts GUI v2. 11(c)2002 Al ien-Factory ―>