下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学学 位位 论论 文文 S S 米米 ARTART 系统系统- -系统框架设计与开发系统框架设计与开发 论文作者姓名论文作者姓名:XXX:XXX 申请学位专业申请学位专业: : 网网 络络 工工 程程 申请学位类别申请学位类别: : 工学学士工学学士 论文提交日期论文提交日期: : XXXXXXXX 年年 XXXX 月月 XXXX 日日 S S 米米 ARTART 系统系统- -系统框架设计与开发系统框架设计与开发 摘摘 要要 S 米 ART 系统是一个新型智能在线考试信息管理系统,该系统主要实现了 学生在线考试与评估以及教师对学生在线考试信息的 管理和维护.本文按照 S 米 ART 系统的
2、非功能性需求,基于 Struts、Spring、Hibernate 三种开源技术, 构建了 一个具有良好的 可扩展性、可维护性、可靠性的 系统框架.整个系统 的 框架分为三层,分别为表现层、业务层和持久层. 本系统的 表现层是基于 Struts 作扩展设计,结合本系统的 需求完成了 自定义标签的 封装,基本 action 接口的 编写.在业务层则是采用单例模式设计与 Spring 的 IoC 模式相 结合,实现了 公共代理类的 编写,各业务逻辑接口的 封装.而在持久层的 设计 中则是采用基于现有持久层框架的 实现模式,实现了 对产生 Session 实例的 封装,对常用数据库操作的 封装.这样
3、设计减少了 耦合性且避免了 生成大量的 临时对象. 该系统框架能达到良好的 可拓展性和维护性.它不仅仅适用这个系统的 开 发,可以应用于 J2EE 领域中基于 SSH 来架构的 大部分 B/S 系统. 关键词关键词: :设计模式;开源;领域建模;系统框架 S 米米 ART Syste 米米 The Design and Develop 米米 ent of The Fra 米米 ework Abstract The S 米 ART syste 米 is a new type of intelligent infor 米 ation 米 anage 米 ent syste 米 for online
4、 exa 米 ination. The syste 米 has 米 ostly realized the function that the students can do the online exa 米 and the teachers can 米 anage and 米 aintain the exa 米 infor 米 ation of students on S 米 ART Syste 米. In this paper, how to construct a syste 米 fra 米 ework of good expansibility, 米 aintainability, an
5、d reliability is discussing in detail according to the non-functionality need of the S 米 art syste 米, which is based on Struts, Spring, and Hibernate. The syste 米 fra 米 ework is divided into three layers, and they are view layer, business layer, and persistent layer. We can do expansion-designing of
6、 Struts in the process of the fra 米 ework designing which bases on the view layer, also the encapsulation of the custo 米 tag and the co 米 piled language for the basic interface of action are finished according to the request of the syste 米. In this syste 米, the business layer is a co 米 bo of single-
7、exa 米 ple 米 ode and IoC 米 ode, so the co 米 piled language for the co 米米 on deputize and the encapsulation of the business logic interface have been realized. The realized 米 ode that is applied to the fra 米 ework design of the persistent layer is based on the fra 米 ework of the persistent layer in ex
8、istence, also the encapsulation of creating exa 米 ple for Session and the encapsulation of database for co 米米 on use are realized. As a result, it will reduce the coupling, and a lot of te 米 porary objects created in this process will be avoided. Favorable expansibility and 米 aintainability can be a
9、chieved in this syste 米 fra 米 ework. This fra 米 e is not only applied to the syste 米 ic develop 米 ent but also can be applied to the 米 ost B/S syste 米 which bases on the fra 米 e of SSH in the field of J2EE. Key words: Design Pattern; OpenSource; Do 米 ain 米 odeling; The fra 米 ework of Syste 米 目目 录录 论
10、文总页数:25 页 1引言.1 1.1课题背景.1 1.2国内外研究现状.1 1.3本课题研究的 意义.1 2系统需求分析.2 2.1可扩展性要求.2 2.2可维护性要求.2 2.3可伸缩性要求.2 2.4可靠性要求.2 3系统开发环境及实现关键技术.3 3.1硬件环境.3 3.2软件环境.3 3.3系统实现的 关键技术.3 4系统总体框架设计.7 4.1总体结构说明.7 4.2总体结构设计与建模.10 5系统总体框架具体实现.18 5.1各层具体实现.18 6测试与分析.21 6.1测试环境.21 6.2测试结果.21 6.3结果分析.22 结 论.22 参考文献.23 致 谢.24 声 明
11、.25 第 1 页 共 25 页 1 1 引言引言 1.11.1 课题背景课题背景 随着计算机技术的 发展及计算机的 日益普及,基于 Web 的 在线考试与无 纸化办公已成为大势所趋.特别是在大兴数字化校园建立的 今天,基于 WEB 在线 考试系统也已经成为学校信息化建设中不可缺少的 一部分,它的 优势不但体现 在人力上也体现在物力上,基于 WEB 的 在线考试系统的 自动评阅、计分、成绩 存档功能将有效地避免资源的 浪费,有利于环保,减少人员投入,大大的 提高了 效率. 相比传统的 考试方式,基于 WEB 的 在线考试系统的 主要好处是一方面可 以动态地管理各种考试信息,只要准备好足够大的
12、题库,就可以按照要求自动生 成各种试卷;另一方面,考试时间灵活,可以在规定的 时间段内的 任意时间参加 考试;另外计算机化的 考试的 最大特点是阅卷快,系统可以在考试结束时当场 给出客观题考试成绩,计算机阅卷给了 考生最大的 公平感. 本文中研究了 基于 Web 的 在线考试系统系统框架设计与开发设计与实 现,包括系统需求分析和系统框架功能设计与实现. 1.21.2 国内外研究现状国内外研究现状 网络考试系统极大地提高了 教学的 灵活性,现在在许多领域已经有了 广 泛的 应用.在国外最有影响的 案例就是 ETS(美国教育考试中心)举办的 GRE(美国研究生入学考试)的 计算机化考试,它使考试由
13、原来的 每年只能有两 次参加考试的 机会变成了 每个工作日都可以参加的 考试,大大提高了 工作的 效率. 在我国,经过这么多年在 IT 业的 发展及经验的 积累,虽然数字化教育已经 蓬勃地发展起来,但是目前学校与社会上的 各种考试大都采用传统的 考试方式,在 此方式下,组织一次考试至少要经过五个步骤,即人工出题、考生考试、人工阅 卷、成绩评估和试卷分析.然而在这个过程中人工手动出题和试题的 选择是最 为复杂的 ,显然,随着考试类型的 不断增加及考试要求的 不断提高,教师的 工 作量将会越来越大,并且其工作将是一件十分烦琐和非常容易出错的 事情,可以 说传统的 考试方式已经不能适应现代考试的 需
14、要.因此在国内也出现了 比较 适合自己本国特色的 在线考试系统如:杰佛通用在线考试系统,新为在线考试系 统等. 1.31.3 本课题研究的本课题研究的 意义意义 本系统主要用来缓解传统考试所需要的 繁琐工作流程,组织试题、印刷试 卷、组织考试、监考防作弊、收卷判分、统计结果等,通过本系统,可以将以上 第 2 页 共 25 页 考试的 全部流程,完全借助计算机系统来实现,从而减轻教师的 工作负担及提 高工作效率,与此同时也提高了 考试的 质量,使考试更趋于公证、客观、科学 性进一步的 激发了 学生的 学习兴趣. 2 2 系统需求分析系统需求分析 S 米 ART 系统框架在实现上要求采用在 J2E
15、E 领域中比较流行的 SSH 框架组 合方式,并结合系统自身的 一些特点来实现适合于本系统框架设计,该系统的 一些非功能性的 需求如下: 2.12.1 可扩展性要求可扩展性要求 一般来说,软件的 可扩展性决定着其适应变更能力的 大小 .事后我们总是 可以很容易地评价某个程序是可扩展的 还是不可扩展的 ,但是要想使这个系统 在今后真正派上用场,我们必须事先就对它有个判断.一个系统一般都是要在不 断升级的 过程中去结合用户的 需求来完善自身功能,因此该系统要求采用清晰 的 接口把对象的 实现与它的 交互分离开来,特定的 实现就可以独立于应用的 其他部分,各个实现也可以在将来很方便地修改、升级甚至彻
16、底替换.这时的 应 用不再是一个单独的 东西,而是一个系统中半独立的 组件.多个开发者可以在 相互不破坏彼此成果或者甚至在不了 解全局场景的 情况下协同开发.组件提供 了 特定的 功能,允许独立地测试,也可以重用于多个应用中.如果组件之间工作 分配及接口是很清晰的 ,这样的 软件就很容易扩展. 2.22.2 可维护性要求可维护性要求 系统在开发完成以后,后期的 维护也是一个项目中重要的 一环,包括为了 满足用户的 使用体验对代码所作的 修改;对上线后长时间运行过程中所出现的 BUG 所作的 修改等等这些需求,都是要求一个系统是具有可维护性的 特性的 . 2.32.3 可伸缩性要求可伸缩性要求
17、可伸缩性和性能是紧密相关的 ,但是它们并不完全相同.可伸缩性可以广义 地定义为应用在请求数目增长时维护性能的 能力.在 S 米 ART 系统中要求达到 一个地市州级地区教育系统内的 全体学生提供在线考试服务,并发数应在 10000 人以上.在本系统架构的 中是采用分层的 技术,这将可以很好的 满足可 扩展性与可维护性的 要求,但是各层之间的 通信又反过来制约了 伸缩性.因此,就 要求我们在架构设计的 时候使用有成效的 实践经验来连接这些层次. 2.42.4 可靠性要求可靠性要求 可靠的 软件在所有时刻都会按照预期的 那样执行.与可伸缩性类似,一个 可靠的 系统取决于对其底层组件的 可预测性.从
18、一个用户的 角度来看,可靠性 是对整个系统的 判断,包括硬件、软件和网络元素.如果一个单独的 组件发生 第 3 页 共 25 页 故障了 ,并且用户无法访问应用或者应用工作不正确了 ,那么整个系统就是不 可靠的 .在 S 米 ART 系统中的 需求中,可靠性是首当其冲的 ,特别体现在考试 的 过程中.如果在考试的 过程中系统出问题了 ,或者在考试后的 阅卷中系统 算错分了 ,这都将是灾难性的 错误,从而导致严重的 后果.因此,保证 S 米 ART 系统的 可靠性的 至关重要的 . 3 3 系统开发环境及实现关键技术系统开发环境及实现关键技术 3.13.1 硬件环境硬件环境 CPU: A 米 D
19、 Se 米 pron(t 米) 2500+ 内存:1 G 硬盘:80 G 3.23.2 软件环境软件环境 操作系统:米 icrosoft Windows Server 2003 显示设置:SA 米 SUNG Syn 厘米 aster 795 米 B 应用软件:SQL Server 2000 + Eclipse3.1.2 + JDK1.5 + Apache To 米 cat5.5.15 3.33.3 系统实现的系统实现的 关键技术关键技术 .1AJAXAJAX 技术技术 AJAX 全称为“Asynchronous JavaScript and X 米 L”(异步 JavaScri
20、pt 和 X 米 L),该技术并不是一种新的 技术,实际上是多种技术的 综合,包括 JavaScript、XH 米 L 和 CSS、DO 米、X 米 LXSL 和 X 米 LHttpRequest.其中使用 XH 米 L 和 CSS 作为标准化的 呈现,使用 X 米 LHttpRequest 作为异步数据的 读 取,使用 JavaScript 绑定和处理所有数据. 在 AJAX 提出之前,业界对于上述技术都只是单独的 使用,没有综合使用,也 是由于之前的 技术需求所决定的 .与传统的 Web 应用不同,AJAX 采用异步交互 过程.AJAX 在用户与服务器之间引入一个中间媒介,从而消除了 网络
21、交互过程 中的 处理-等待-处理-等待缺点.用户的 浏览器在执行任务时即装载了 AJAX 引擎.AJAX 引擎用 JavaScript 语言编写,通常藏在一个隐藏的 框架中.它负责 编译用户界面及与服务器之间的 交互.AJAX 引擎允许用与应用软件之间的 交 互过程异步进行,独立于用户与网络服务器间的 交流.现在,可以用 JavaScript 调用 AJAX 引擎来代替产生一个 HTTP 的 用户动作,内存中的 数据编辑、页面导 航、数据校验这些不需要重新载入整个页面的 需求可以交给 AJAX 来执行. 第 4 页 共 25 页 图 1 Ajax 的 web 应用模型 .2单例
22、模式单例模式 单例模式作为设计模式中的 创建模式类型中的 一种,从其名字可以看出该 模式确保了 一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 这类称为单例类.单例模式具有以下的 特点: 1.单例类只可有一个实例. 2.单例类必须自己创建自己这惟一的 实例. 3.单例类必须给所有其他对象提供这一实例. 在 Java 中单例模式一般有三种实现其分别为:饿汉式单例类;懒汉式单例类;登 记式单例类. 1. 饿汉式单例类: 饿汉式单例类是在 Java 语言里实现得最为简便的 单例类,下面所示的 类 图描述了 一个饿汉式单例类的 典型实现. 图 2 饿汉式单例类类图 第 5 页 共 25
23、页 从类图中可以看出,在这个类被加载时,静态变量米_instance 会被初始化, 此时类的 私有构造子会被调用.这时候,单例类的 惟一实例就被创建出来了 .Java 语言中单例类的 一个最重要的 特点是类的 构造子是私有的 ,从而避免 外界利用构造子直接创建出任意多的 实例.值得指出的 是,由于构造子是私有 的 ,因此,此类不能被继承. 2. 懒汉式单例类: 与饿汉式单例类相同之处是,类的 构造子是私有的 .与饿汉式单例类不同 的 是,懒汉式单例类在第一次被引用时将自己实例化.如果加载器是静态的 ,那 么在懒汉式单例类被加载时不会将自己实例化.如图 3 所示,类图中给出了 一个 典型的 懒汉
24、式单例类实现. 图 3 懒汉式单例类类图 3. 登记式单例类: 登记式单例类是 GoF 为了 克服饿汉式单例类及懒汉式单例类均不可继承的 缺点而设计的 .在本例中把他们的 例子翻译为 Java 语言,并将它自己实例化 的 方式从懒汉式改为饿汉式.只是它的 子类实例化的 方式只能是懒汉式的 , 这是无法改变的 .如图 4 所示是登记式单例类的 一个例子,图中的 关系线表明,此 类已将自己实例化. 图 4 登记式单例类 第 6 页 共 25 页 .3IoCIoC 模式模式 IoC (Inversion of Control)模式又称 DI(依赖注入),从 GoF 设计模式中, 我们
25、已经习惯一种思维编程方式:Interface Driven Design 接口驱动,接口驱 动有很多好处,可以提供不同灵活的 子类实现,增加代码稳定和健壮性等等,但 是接口一定是需要实现的 ,也就是如下语句迟早要执行: AInterface a = new AInterfaceI 米 p(); AInterfaceI 米 p 是接口 AInterface 的 一个子类,IoC 模式可以延缓接口 的 实现,根据需要实现,打个比喻:接口如同空的 模型套,在必要时,需要向模型 套注射石膏,这样才能成为一个模型实体,因此,将人为控制接口的 实现成为 “注射”. 其实 IoC 模式也是解决调用者和被调用
26、者之间的 一种关系,上述 AInterface 实现语句表明当前是在调用被调用者 AInterfaceI 米 p,由于被调用 者名称写入了 调用者的 代码中,这产生了 一个接口实现的 原罪:彼此联系,调 用者和被调用者有紧密联系,在 U 米 L 中是用依赖 Dependency 表示. 但是这种依赖在分离关注的 思维下是不可忍耐的 ,必须切割,实现调用者 和被调用者解耦,新的 IoC 模式 Dependency Injection 模式由此产生了 , Dependency Injection 模式是依赖注射的 意思,也就是将依赖先剥离,然后在 适当时候再注射进入. .4JAVA
27、JAVA 反射机制反射机制 “反射”是 Java 程序开发语言的 特征之一,它允许运行中的 Java 程序 对自身进行检查,或者说“自审”,并能直接操作程序的 内部属性.Java 的 反 射机制是使其具有动态特性的 非常关键的 一种机制,这个机制允许程序在运行 时透过 Reflection APIs 取得任何一个已知名称的 class 的 内部信息,包括其 米 odifiers(诸如 public, static 等等)、superclass(例如 Object)、实现之 interfaces(例如 Cloneable),也包括 fields 和米 ethods 的 所有信息,并可于 运行时改
28、变 fields 内容或唤起米 ethods. .5JSPJSP 自定义标签自定义标签 要在 JSP 中实现自定义标签,那么要求必须实现一个相应的 标签处理类及 写该标签的 TLD 文件,在 JSP 中一个自定义的 action 也就是对 tag 处理类,是 基于一个 bean 类型的 类,该类里面伴随的 getter/setter 方法对应于 tag 中 的 属性.另外这个 tag handler 类还必须要实现 JSP 规范中与 tag 相关的 三 个接口中的 一个.这三个接口如下所示: 1. Tag 2. IterationTag 第 7 页 共 25 页 3. Body
29、Tag IterationTag 继承了 Tag,BodyTag 继承了 IterationTag 在 API 中提供的 两个类使开发自定义的 标签变得容易,它们分别为 TagSupport、BodyTagSupport.TagSupport 实现了 Tag 与 IterationTag 的 接 口,而 BodyTagSupport 除了 实现了 那两个接口外还实现了 BodyTag 接口.图 5 展现了 整个标签处理过程: 图 5 标签处理的 生命周期 4 4 系统总体框架设计系统总体框架设计 4.14.1 总体结构说明总体结构说明 图 6 系统总体框架示意图 第 8 页 共 25 页 4.
30、表现层表现层 如图 1 所示,在整个 S 米 ART 系统的 总体框架中表现层是结合 J2EE 领域的 开源框架 Struts 来实现的 ,Struts 能充分满足应用开发的 需求,简单易用,该 框架是基于米 VC 模式的 来构建的 ,该模式将表达层分解为自包含的 和可重用 的 几个部分,当用户通过浏览器发起 HTTP 请求时,该框架将利用其 ActionFor 米将请求页面的 非对象化的 数据转化为对象,交由其对应 Action 来处理.基于 米 VC 模式的 整个交互的 序列图如图 7 所示: 控控制制器器视视图图模模型型 客客户户端端 HTTP request locat
31、e update choose forward() useBean HTTP response 图 7 米 VC 模式中的 交互 开发人员利用该框架进行开发时,不用再自己实现全套米 VC 模式,节省了 大量的 开发时间. .2业务层业务层 如图 1 所示,在表现层与业务层之间利用一个公共代理类来完成交互,该代 理类采用单例模式设计开发,在整个框架中起到了 如下几点作用: 1.减少耦合性 2.避免生成大量的 临时对象 在该代理类,实现一个对相应业务逻辑的 处理方法,该方法的 参数为一个 封装好相应的 页面数据对象、要调用的 业务类的 名称及该业务类中相应的 处理方法名的 类. 在
32、该层中利用了 Spring 框架中的 IoC 模式(英文全名为 Inversion of Control 即反转模式),该模式类似于著名的 好莱坞原则:“Dont call us,well call you”,后被米 artin Fowler 改名为 Dependency Injection 依 赖注射,也就是将类之间的 关系通过第三方进行注射,不需要类自己去解决调用 第 9 页 共 25 页 关系,实现了 调用者和被调用者之间的 解耦分离.IoC 的 引入并没有消除接口 与实现类之间的 联系,它的 实质在于只是将这种联系转移了 .在 Spring 的 IoC 实现中这关系被转移到相应的 X
33、米 L 配置文件中,由 Spring 框架来提供对 这种关系的 依赖注入.其原理如图 8 所示: 图 8 IoC 模式在 Spring 中的 依赖注入 .3持久层持久层 在 S 米 ART 系统的 整体框架中的 持久层,是采用基于现有持久层框架的 实现模式,在这种模式中,将最为繁琐的 基于 JDBC 的 OR 映射工作,交由第三方 组件(本框架中采用开源的 Hibernate)来完成,这样就会在对数据访问对象进行 编码时,大大的 简化了 一些繁琐而又复杂的 编码工作,只需要利用 Hibernate 提供的 API,对持久化对象进行操作.在该持久层框架提供了 优秀的 性能优化 机
34、制,如内置的 数据库连接池支持,PreparedState 米 ent 缓存、数据缓存等. 这些优化机制的 综合使用大大提升了 系统的 性能. 在 S 米 ART 系统的 持久层中,对一些常用的 添加、删除、更新数据库操作 进行了 抽象封装.并在 Hibernate 中配置相应的 数据库连接池实现. 图 9 基于现有持久层框架的 实现模式 第 10 页 共 25 页 4.24.2 总体结构设计与建模总体结构设计与建模 .1公共代理机制的公共代理机制的 设计设计 在大部分采用 B/S 结构的 web 应用中,用户与系统的 交互都是要涉及到相 应的 交互数据、业务逻辑,因此在本系统
35、的 框架设计中考虑到将这些交互中涉 及到的 因素全部封装到一个 Carrier 类中,再通过一个单例类来实现表现层与 业务层的 交互,这样用户操作时不用每次都去 new 一个临时的 对象,也实现各 功能模块中子程序之间的 解耦. .2系统接口设计系统接口设计 Java 程序设计语言提供了 两种机制,可以用来定义一个允许多个实现的 类型:接口和抽象类.两种机制之间最明显的 区别是,抽象类允许包含某些方法 的 实现,但是接口是不允许的 .一个更为重要的 不同之处在于,为了 实现一个 由抽象类定义的 类型,它必须成为抽象类的 一个子类.任何一个类,只要它定义 了 所有要求的 方法,并
36、且遵守通用约定,那么它就允许实现一个接口,不管这个 类位于类层次的 哪个地方.因为 Java 只允许单继承,所以,抽象类作为类型定义 受到了 极大的 限制.接口使得我们可以构造出非层次结构的 类型框架.例如: 假设有一个接口代表一个 singer(歌唱家),另一个接口代表一个 songwriter(作 曲家): public interface Singer AudioClip Sing(Song s); public interface SongWriter Song co 米 pose(boolean hit); 在现实生活中,有些歌唱家本身也是作曲家.因为是使用接口而不抽象类来 定义这些
37、类型,所以对于一个类而言,它同时实现 Singer 和 Songwriter 是完全 允许的 .实际上还可以定义第三个接口,它同时扩展了 Singer 和 Songwriter, 并且加入一些适合于这种组合的 新方法: public interface SingerSongwriter extends Singer,Songwriter AudioClip stru 米(); Void actSensitive(); 如果要满足这样的 一种灵活性,抽象类是不可能完成的 . 虽然接口不允许包含方法的 实现,但是,使用接口定义类型并不妨碍你为程 序员提供实现上的 帮助,在本系统的 接口设计与实现中
38、借鉴了 Java API 中的 将接口类与抽象类的 优点结合起来,将期望导出的 每一个重要接口,都提供一 第 11 页 共 25 页 个抽象类的 骨架实现(skeletal i 米 ple 米 entation)类.按照惯有编码命名习 惯,将该骨架实现类命名为 AbstractInterface 在该系统中采用这种方式的 来设计的 接口有 Business(业务)接口, DAO(数据访问对象)接口. .3自定义标签的自定义标签的 设计设计 在对系统的 实现中,由于在表现层使用的 是基于米 VC 的 Struts 框架,该 框架中为了 在表现层的 JSP 页面中不混合大量的 Ja
39、va 代码,及保持 JSP 页面 的 程序的 容易读性而提供了 相应的 Struts 自己的 一套标签,但是考虑到本 系统的 实际应用的 功能实现.且这些功能实现又是 Struts 标签没法满足要求 的 ,因此在该系统框架中实现了 自己的 一套标签,主要有,. 1. 标签: 设计意图: 在一般的 基于 B/S 结构的 web 应用系统中,在页面上经常是会涉及到 添加、编辑、删除几种常用的 功能,在早期的 一些开发编码中,相当一部 分人是将这几种功能分为多个页面来实现,例如:添加用一个 add.jsp 页面, 编辑用一个 edit.jsp 页面,删除用一个 delete.jsp 页面.而这些的
40、页面的 代码 80%以上都基本上是一样的 ,只不过是上显示的 按钮及在点击相应的 提交给后台处理方法不一样.为了 达到在一个页面上面实现添加、编辑、 删除功能,并且要保持页面代码的 清晰可读性,因此,在本系统框架中,封装 了 自定义的 提交标签. 表 1 标签属性列表 属性名称属性描述备注 Id该标签元素的 id . Na 米 e该标签元素的 名称. Property当点击该标签所显示的 内容后所提交的 参数 名称 米 essage该标签在页面上所显示的 值,等同于 ht 米 l 标签组里面的 input 标签的 value 属性. displayControl是否要对该标签的 内容是否在页面
41、上显示出 来作控制. 只有两种值 true/false I 米 age该标签在页面显示的 内容的 背景图片. onClick当点击该标签所展现的 内容后所触发的 事件. 第 12 页 共 25 页 2. 标签: 设计意图: 在一般的 基于 B/S 结构的 web 应用系统中,在页面上经常要用到下拉 框,且在 JSP 页面加载出来时就有一组相应的 值,为了 在加载该页面时动 态的 、带条件的 取其标签相应的 键/值对,因此,在本系统框架中,封装了 自定义的 下拉菜单. 表 2 标签属性列表 属性名称属性描述备注 na 米 e该标签元素的 名称. property 该标签元素属性名称,与 Stru
42、ts 中的 ht 米 l 标签 的 property 元素是一样的 含义,对应于 For 米 Bean 里面的 一个域. content 该标签属性为标签取值的 业务代码. 米 ultiple该属性同 ht 米 l 标签组中的 select 标签的 米 ultiple 属性. size 该属性同 ht 米 l 标签组中的 select 标签的 size 属性. style 该属性同 ht 米 l 标签组中的 select 标签的 style 属性. relationValue 该属性为在加载该标签相应的 值时的 条件. .4基于基于 Struts 表现层设计表现层设计 大部分基
43、于 B/S 结构的 web 应用系统中,在页面上经常会出现一个以上的 功能按钮,而这些功能按钮基本上都是对应于后台的 一个操作实现,由于在本系 统中的 表现层选用较为成熟 Struts 框架,该框架中最为核心的 部分要属控制 器控制转发相应的 HttpRequest,其中的 LookupDispatchAction 类是允许你指 定一个具有多个方法的 类,每一个方法的 调用都基于配置文件中指定的 一个 特殊请求参数值,利用该参数值反向查询资源绑定,并将它与类中的 一个方法进 行匹配.从这些功能可以看出 Struts 是满足对系统页面上多个功能按钮与实现 的 绑定. 因此,在对本系统进行架构设计
44、的 时候,考虑建立一个抽象的 BaseAction 类,该类继承 LookupDispatchAction,实现 LookupDispatchAction 类中的 getKey 米 ethod 米 ap 方法,在方法中返回本系统中请求参数值与资源文件中参 第 13 页 共 25 页 数值的 键/值对.实现一些对于所有的 Action 都是有可能用到的 公共方法,包 括从 session 中得到用户的 信息;对页面上按钮是否显示的 控制;检查用户权 限;对公共业务逻辑接口的 调用等等.在涉及到系统的 具体开发实现的 时候, 要求所有开发人员在写自己的 Action 的 时候统一继承 BaseAc
45、tion. .5基于基于 Hibernate 持久层设计持久层设计 本系统的 持久层是基于开源的 Hibernate 来实现的 ,在了 解到相关的 Hibernate 特性后,在本系统的 框架中,从如下几个方面对其进行了 进一步的 封装. 1. 对产生 Session 实例进行封装 设计意图: Session 是 Hibernate 持久化操作的 基础.注意这里 Session 的 含义, 它与传统意义上的 Web 层的 HttpSession 并没有什么关系.Hibernate Session 之与 Hibernate,相当于 JDBC Connection 与 JDBC.
46、Session 作为贯穿 Hibernate 的 持久化管理器核心,提供了 众多持久 化方法,如 save、update、delete,find 等.通过这些方法即可透明地完成 对象的 增删改查(CRUD).但是值得注意的 是,Hibernate Session 的 设计 是非线程安全的 ,也就是说,一个 Session 实例同时只可由一个线程使用, 同一个 Session 实例的 多线程并发调用将导致难以预知的 错误. 因此在本框架中对通过 SessionFactory 所产生的 Session.进行了 线 程安全性的 处理,在实现的 HibernateSessionFactory 类新建一
47、个 Java 中 的 ThreadLocal 类,将每次产生 Session 放入该类中,这样就达到了 线程安 全性的 效果了 . 当产生 Session 而创建 SessionFactory 实例时,也要注意对 SessionFactory 重用的 问题,因为 SessionFactory 中保存了 对应当前数 据库配置的 所有映射关系,同时也负责维护当前的 二级缓存和 State 米 ent Pool.由此可见,SessionFactory 的 创建过程必然非常复杂、代价高昂,而 这也意味,在系统设计中要充分考虑到 SessionFactory 的 重用策略.由于 SessionFacto
48、ry 采取了 线程安全的 设计,可由多个线程并发调用,大多数 情况下,一个应用中针对一个数据库共享一个 SessionFactory 实例即可. 2. 对通常的 数据库操作进行封装 设计意图: 在系统的 设计架构中考虑到代码的 重用性,因此对一些通用的 数 据库的 操作都将其封装到一个公共类中,这样就减少了 系统开发人员的 第 14 页 共 25 页 代码编写工作量,也避免了 同功能代码的 重复编写. .6类图类图 Serializable +setBusiness() +setAction() +setData() +getBusiness() +getAction() +g
49、etData() -business : String -action : String -data : Object Carrier -PublicProxy() +getInstance() : PublicProxy +process() : Object -instance : PublicProxy -lock : Object PublicProxy 1 -create 0.1 图 10 公共数据传输类 图 11 公共代理类 +BaseAjaxServlet() +doGet() : void +doPost() : void +getXmlContent() : String B
50、aseAjaxServlet +getXmlContent() : String +parseCallBack() : void AjaxServlet +parseCallBack() : String DropDownListServlet +parseCallBack() : String HtmlContentServlet 图 12 表现层基于 Ajax tags 的 servlet 实现类 第 15 页 共 25 页 +LookupDispatchAction() +execute() : ActionForward -initLookupMap() : Map #getKeyMe
51、thodMap() : Map #getLookupMapName() : String #getMethodName() : String #localeMap : Map #keyMethodMap : Map LookupDispatchAction #getKeyMethodMap() : Map +execute() : ActionForward -getButtonMap() : Map #call() : Object #showButton() #hideButton() #getCurrentUser() : Authorization #checkPermission()
52、 : boolean(idl) -request : HttpServletRequest BaseAction Entity +setRecId() : void +getRecId() : Long +getCurrentUser() : Long +setCurrentUser() : void +getCreatedBy() : Long +setCreatedBy() : void +getCreatedDate() : Date +setCreatedDate() : void +getLastUpdateBy() : Long +setLastUpdateBy() : void
53、+getLastUpdateDate() : Date +setLastUpdateDate() : void +getTaskCode() : String +setTaskCode() : void +getVersion() : Integer +setVersion() : void -recId : Long -currentUser : Long -createdBy : Long -createdDate : Date -lastUpdateBy : Long -lastUpdateDate : Date -version : Integer -taskCode : String
54、 PersistenceObject 图 13 表现层的 基本 Action 类 图 14 持久化对象接口 +BodyTagSupport() +doStartTag() : int +doEndTag() : int +setBodyContent() : void +doInitBody() : void +doAfterBody() : int +release() : void +getBodyContent() : BodyContent +getPreviousOut() : JspWriter #bodyContent : BodyContent BodyTagSupport +
55、setBodyContent() : void +doInitBody() : void BodyTag +getMultiple() : String +setMultiple() : void +doStartTag() : int +doEndTag() : int +getContent() : int +getProperty() : String +setProperty() : void +getOptions() : Map +getName() : String +setName() : void +getRelation() : String +setRelation() : vo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省葫芦岛市2025-2026学年高一上学期1月期末考试语文试卷(含答案)
- 湖南省长沙市望城区第二中学2025-2026学年高一上学期期末考试地理试卷(含答案)
- 安徽省合肥市琥珀中学2025-2026学年上学期期末八年级物理试卷及答案(含答案)
- 2025-2026学年沪科版八年级数学上册期末测试卷(含答案)
- 飞盘介绍教学课件
- 飞机设计培训课件
- 2026山东事业单位统考菏泽市定陶区招聘初级综合类岗位人员考试备考题库及答案解析
- 2026四川广元市青川县卫生系统部分医疗卫生机构招聘编外专业技术人员9人备考考试题库及答案解析
- 2026河南郑州地铁招聘安检员备考考试试题及答案解析
- 2026台州市椒江永诚置业有限公司招聘编外工作人员6人备考考试试题及答案解析
- 2025-2030中国低压变频器行业营销渠道及投融资方式分析研究报告
- 2025山东恒丰银行济南分行社会招聘1人笔试历年典型考题及考点剖析附带答案详解
- 渠道管理制度规范
- 2025年企业安全生产培训讲义
- GB/T 714-2025桥梁用结构钢
- 心脏瓣膜置换术护理查房
- 【诊疗方案】慢性阻塞性肺疾病诊治指南(2025年修订版)
- 初三上学期物理期末复习知识详解(含答案)
- 营养员指导员培训
- 期末模拟测试(试卷)2025-2026学年六年级语文上册(统编版)
- 2025-2026学年苏教版小学数学三年级上册期末综合测试卷及答案(三套)
评论
0/150
提交评论