版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕业设计(论文)题题 目目 基基于于 j ja av va a 的的博博客客设设计计与与开开发发姓姓 名名 学学 号号 指指 导导 老老 师师指指导导教教师师职职称称年年级级专专业业班班级级所所 在在 学学 院院2 20 00 08 8 年年 6 6 月月 1 12 2 日日 I / 40目目录录目录 I摘要 III前言 V文献综述 VI第 1 章 绪论 1第 1 节背景 1第 2 节研究的目的与意义 2第 2 章 设计简介与设计方案 3第 1 节设计原则 3第 2 节运行架构 3第 3 节设计方案 4第 3 章 相关技术介绍 5第 1 节 MVC 简介 5第 2 节 SPRING 的起源和
2、背景 6第 3 节 HIBERNATE 概述 7第 4 章 需求分析 8第 1 节注册博友 8第 2 节普通用户 9第 5 章 系统架构设计 11第 1 节系统架构说明: 12第 2 节 HIBERNATE层 12第 3 节实现 SERVICE 层 18第 4 节 MVC 层实现 20设计结果与对设计结果的分析25全文总结 28 II / 40致 30参考文献 31 III / 40摘要越来越多的网络用户希望能够在网络平台上更多地展现自己的个性,更方便地与他人互动交流,拥有一个自己独立的空间,随着Web2.0 时代的到来,一个新的概念出现了 博客。首先介绍了博客设计的意义和背景,主流博客的主要
3、功能。重点介绍了基于 J2EE 架构的博客设计方案,实现的主要功能。其次,重点讲述了博客的业务逻辑层和持久层的设计与开发过程中所涉与的技术与开源框架。 系统如何以 Spring 框架为核心,向下整合 Hibernate 进行持久层访问,向上整合 Struts 按清晰的 MVC 模式控制,怎样划分应用的层次。简述了页面的请求的分发与流程。最后对 BLOG 开发中所碰到的一些问题,并针对这些问题提出一些解决方案,最后对系统性能作出一些简要评估,阐述了一些个人想法。关键词: : 博客,J2EE, Spring,Struts,Hibernate IV / 40AbstractAbstractMore
4、and more network users hope to unfold there characteristics in the network platform and interact with people more conveniently. From the begining of Web 2.0, a new concept of blog emerged.Firstly, we introduce the meaning and background of designing of blog site, and then introduce the main function
5、 of the blog site briefly. We also introduce the designing scheme of blog site which is based on the architecture of J2EE. The main function carried out in our blog project is presented.Secondly, we introduce the designing of logic and permanent layer of the blog site. The technic and structure refe
6、red in the process of developing are presented. We also depict how to be around with frame of Spring, how to work with Hibernate to visit permanent layer below, how to work with Struts to control the clear MVC model up and how to divide layers of application. We also give the brief introduce of dist
7、ribution and flow of pagesrequest.Finally, wediscuss some problems about the blog realization and show schemes of solving problems. Brief evaluation on the performance of system is given.We give a comment on problems occurring in our work.K Ke ey yw wo or rd ds s: :blog, J2EE, Spring, Struts, Hibern
8、ate V / 40 VI / 40前言本文介绍了基于轻量级 J2EE 开发博客。同时利用Spring、Struts、Hibernate、Ajax 等框架整合开发。本文主要分为七章。第一章主要介绍了进行博客的背景与意义。第二章对博客设计方案做了简要介绍。第三章介绍了博客的需求分析。第四章详细介绍了系统的架构设计,并详细讲述了通过Spring 框架,向下整合 Hibernate 进行持久层访问,利用 DAO 模式隔离业务逻辑层与具体持久层,向上整合 Struts 按清晰的 MVC 模式构建系统。第五章简单讲述了系统设计时遇到的问题与解决方案,另外对系统的性能作了一个简要的评论与设计结果和设计结果
9、分析。第六章对全文所使用的方法、结果以与目的和意义做了全面的总结,展望java 技术在 Web 上的一些应用。本文的完成得到了 戴祖旭博士的帮助和指导,在此向他表示衷心的感。阙红林2007-06-04 于工程大学理学院 VII / 40文文献献综综述述Hibernate 相关文献介绍文献2围绕着 ORM,讲述了对象映射配置,对象关系映射、集合映射、对象的操作和查询。与详细如何利用Hibernate 构建 DAO 层,怎样根据 PO 的关系。面向对象操作数据库,怎么配置数据库映射文件。Java 基础文献概述文献10讲述了 java 基础知识,如控制流程、初始化和清理、接口和部类等。并讲述如何利用
10、对象提供服务,并通过接口隐藏具体实现。J2EE 相关文献概述文献4论述了在 J2EE 平台中在各层经常遇到的问题,该文献详细讲解如何解决 J2EE 平台所遇到的问题。文献8将述了如何构建轻量级的 J2EE 企业应用程序,并讲解 MVC 在 Web 中应用,怎么将请求控制并转发, Struts 标签。文献5详细讲述了 Spring 的控制反转、 AOP 编程思想。与其怎么利用Spring 整合 Hibernate ,利用 Spring 提供 IOC 容器管理 DAO 组件,利用事务管理 SessionFactory。文献6以 8 个小型 J2EE 项目讲述怎么利用 Struts、Hibernat
11、e、Spring 等框架构建 J2EE Web 应用。并且也详细讲述各个框架的在项目中应用。文献7这本书是有 3 个具有 15 以上的开发经验的企业 java 架构师或首席架构师所著。本书讲述了 J2EE 的 3 层所涉与的核心模式。通过通用模式可以更快构建稳定的 J2EE 应用。文献11这本书详细讲述了架构设计的方法。架构设计应该包括那些方面。怎么应用架构模式。Ajax 技术文献概述文献2讲述了 JavaScript、CSS、DOM、XML 的在 Ajax 上一些应用。如何利用 VIII / 40这四个技术实现 html 片段的替换。并结合一些实例讲述如何利用Ajax实现友好用户体验。Ecl
12、ipse 文献概述文献9讲述了如何利用 Eclipse 开发 java 应用程序。该文献主要讲如何构建java 开发环境,如何安装 Eclipse 插件。并利用 Eclipse 自动生成一些代码。Jsp 文献概述文献3围绕着实例讲述 Jsp 的各种技术。比如 Servlet,JavaBean 在 Jsp 中的应用。本文中的图片播放器和音频播放器是基于这书上实例改进的。 1 / 40第第 1 1 章章 绪绪论论第第 1 1 节节背景背景商业设计的主要目的一般是通过的推广,实现更多网络用户的关注,从而吸引更多的企业用户投入更多的宣传经费到上。长期的战略目标,商业不仅是公共产品信息和服务的推广,它还
13、是将买家与卖家、厂商和合作伙伴紧密结合的平台,借助这些商业可以消除企业与客户之间时间与空间带来的障碍。Blog 博客致力于为广大博客提供优质博客页面服务的商业。每个博客都希望借助自己的博客页面宣传自己,而博客数量越多,的点击率越高就越能够吸引广大的企业客户选择该商业作为媒介,将自己的产品展现给客户。可以说,对这些博客而言:为博客提供良好的服务就意味着为带来更多的商业客户。因此,在具体设计实现该博客时,主要考虑了主流博客的几个主要功能。1. 博客的注册、登录验证功能2. 网络用户通过关键字搜索博文功能3. 最热门博客页面推荐浏览4. 文章详细容与相关评论显示5. 博客页面访问量统计6. 博客个人
14、文章管理维护功能7. 博客个人文章分类管理维护功能8. 博客个人友情维护功能9. 博客个人基本信息管理维护功能10.博客图片上传与个人相册管理11.网络用户写留言,博主查看留言。 2 / 40第第 2 2 节节研究的目的与意义研究的目的与意义Blog 记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识和他人分享、交流,同时又通过 “六度空间 ”结识了更多志趣相投的朋友;而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的容,收集和整理成为很多人关注的专业 Blog 目前越来越多的人获取信息的来源是一些固定的 Blog 。
15、随着博客人数的增加, Blog 作为一种新的生活方式、新的工作方式、新的学习方式已经被越来越多的人所接受,并且在改变传统的网络和社会结构:网络信息不再是虚假不可验证的,交流和沟通更有明确的选择和方向性,单一的思想和群体的智慧结合变的更加有效,个人出版变成人人都可以实现的梦想 Blog 正在影响和改变着我们的生活 。 3 / 40第第 2 2 章章 设设计计简简介介与与设设计计方方案案在整个 blog 进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定与系统结构设计。下面对这进行详细介绍。第第 1 1 节节设计原则设计原则在进行软件系统开发的最初环节,一般都需要进行系统的选
16、型,即根据系统功能的实际需求,选择合适的开发工具与软件架构。blog 对系统的可靠性、稳定性有比较高的要求。本系统设计时,比较主流的B/S 设计有基于 JSP、ASP、PHP、CGI 与 J2EE 等模式。相比较而言 PHP 的功能相对简单,不适合做大程序;而CGI 效率相对较低,所以也不考虑。由于J2EE 的开源的框架中提供了 MVC 模式实现框架 Struts、对象关系模型中的 Hibernate 的框架与拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择 Java 技术作为 blog 的开发工具。第第 2 2 节节运行架构运行架构为了增加系统的吞吐量,提高并发处
17、理客户请求数量,系统采用了IBM 服务器作为主机。在数据库处理方面,不需要在数据层借助存储过程与数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQLE Er rr ro or r! ! R Re ef fe er re en nc ce e s so ou ur rc ce e n no ot t f fo ou un nd d. .。该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下:1. 服务器端操作系统:独立于操作系统的跨平台系统,客户端MicroSoft Windows 2000 与以上;2. 数据库: MySQL 5.0.27 版本;3. W
18、eb 服务器: Tomcat 5.5 与以上版本,配合 MVC 设计模式与 Hibernate 4 / 40开发架构;4. 客户端运行环境:能运行 IE 5 以上或 Netscape 5 以上浏览器的操作系统,配合使用 Ajax 技术;5. 客户端运行工具:目前的系统采用浏览器作为客户端,为了支持Ajax开发框架,应该选择使用 IE 5 以上版本浏览器。本以 NT 为 Web 平台,JSP+Ajax+Servlet+JavaBean+Hibernate 为实现技术,建立基于 MySQL 数据库系统的核心动态网页,实现博客前台与博客个人维护管理等功能模块。第第 3 3 节节设计方案设计方案为了在
19、更短的时间实现博客,我们采用J2EE 架构。集成开发环境我采用对于插件即插即用的 Eclipse,JSP 运行环境我们采用 Tomcat 应用服务器,数据库管理系统我们采用的是 MYSQL,博客主要实现注册用户可以在 服务器上开辟自己的空间,也可以发布消息,上传文件,回复消息,从服务器发送客户端的数据应用XML 来封装. 本系统采用的是经典的 J2EE 三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问与合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。并利用 Spring、Hibernate、Sp
20、ring 等轻量级框架实现三层结构的设计。即采用的是贫血模式,业务逻辑对象正面封装了全部的业务逻辑方法, Web 层仅与业务逻辑组件交互即可,无须访问底层的DAO 对象。Spring 的声明式事务管理将负责业务逻辑对象方法的事务性。在贫血模式下,其分层非常清晰。Domain Object 并不具备领域对象的业务逻辑功能,仅仅是ORM 框架持久化所需的 POJO ,仅是数据载体。贫血模型容易理解,开发便捷,但严重背离了面向对象的设计思想,所有的 Domain Object 并不是完整的 Java 对象。 5 / 40第第 3 3 章章 相相关关技技术术介介绍绍第第 1 1 节节MVCMVC 简介
21、简介MVC 是 Model 、View 、Controller 三个词的缩写,三个词分别代表应用的三个组成部分 :模型、视图与控制器。三个部分以最少的稿合,协同工作,从而提高应用的可扩展性与可维护性。起初, MVC 模式是针对一样的数据需要不同显示的应用而设计的,其整体的效果如图1 所示:图 1 MVC 结构在经典的 MVC 模式中,事件由控制器处理,控制器根据事件的类型改变模型或视图,反之亦然。具体地说,模型维护一个视图列表,这些视图为获得模型变化通知,通常采用观察者模式登记给模型。当模型发生改变时,模型向所有登记过的视图发送通知 :接下来,视图从对应的模型中获得信息,然后更新自己。概括起来
22、, MVC 有如下特点。 .多个视图可以对应一个模型。按MVC 设计模式,一个模型对应多个视图,可以减少代码的复制与代码的维护量,一旦模型发生改变,也易于维护。1. 模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如使用 JSP 页面、Velocity 模板或者直接产生 Excel 文档等。2. 应用被分隔为三层,降低了各层之间的稿合,提供了应用的可扩展性。3. 控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念。 6 / 404. MVC 更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有一
23、样的特征,有利于通过工程化和工具化产生管理程序代码。第第 2 2 节节SpringSpring 的起源和背景的起源和背景2002 年 wrox 出版了Expert one on one J2EE design and development一书。该书的作者是 Rod Johnson。在书中, Johnson 对传统的J2EE 架构提出深层次的思考和质疑。并提出J2EE 的实用主义思想。 2003 年, J2EE 领域出现一个新的框架 : Spring ,该框架同样出自 Johnson 之手。事实上, Spring 框架是Expert one on one J2EE design and dev
24、elopment一书中思想的全面体现和完善, Spring 对实用主义 J2EE 思想进一步改造和扩充,使其发展成更开放、清晰、全面与高效的开发框架。一经推出,就得到众多开发者的拥戴。传统 J2EE 应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致 J2EE 的应用并没有真正实现 Write Once 与 Run Anywhere 的承诺。Spring 作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。Spring 致力于 J2EE 应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring 是企业应用开
25、发的 一站式选择,并贯穿表现层、业务层与持久层。然而,Spring 并不想取代那些已有的框架,而与它们无缝地整合。总结起来, Spring 有如下优点:1. 低侵入式设计,代码污染极低。2. 独立于各种应用服务器,可以真正实现Write Once, Run Anywhere 的承诺。3. Spring 的 DI 机制降低了业务对象替换的复杂性。4. Spring 并不完全依赖于 Spring ,开发者可自由选用 Spring 框架的部分或全部。 7 / 40第第 3 3 节节HibernateHibernate 概述概述Hibernate 是目前最流行的 ORM 框架,其采用非常优雅的方式将S
26、QL 操作完全包装成对象化的操作。其作者Gavin King 在持久层设计上极富经验,采用非常少的代码实现了整个框架,同时完全开放源代码,即使偶尔遇到无法理解的情况,也可以参照源代码来理解其在持久层上灵巧而智能的设计。目前Hibernate 在国的开发人员相当多, Hibernate 的文档也非常丰富,这些都为学习Hiberante 铺平了道路,因而 Hibernate 的学习相对简单一些。下面通过对比来了解 Hibernate 和传统 JDBC 操作数据库持久层之间的差异。 8 / 40第第 4 4 章章 需需求求分分析析Blog 主要是实现注册用户登录、管理相关信息、博文与相关评论、查看留
27、言、友情、与图片的上传和图像的播放而为上网用户提供按博文主题搜索,查看注册用户的博文与提出相关评论,并为注册用户写留言,游览注册用户的相册、注册等功能的系统。下面就以两种不同的用户来分析博客的需求。 第第 1 1 节节注册博友注册博友首先必须在博客首页中登录填写用户名和密码,这样才能执行一些相关操作,不然就是普通用户只能查看一些信息,而不能发表博文。可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情管理与博文分类管理,用例图2。图 2 博客管理页面的用例图在博客主界面中发表博文
28、时可以选择博文类型,这样可以更好管理自己的博文。并 9 / 40查看和删除网友对自己的博文的一些评论、查看和删除网友留下的一些留言,提供与其他网友交流的空间。更好交流,在信息时代人们通过个人空间沟通也用来但不能在自己的博客主页面中提交评论和留言。这样在本系统中就可以为博友提供更多的个人色彩。在管理页面中添加和删除友情连接。这样博友可以在自己空间中快速定位自己的关心的。这样还可以让网友看到自己的一些信息。友情与网页访问量统计显示:在博客的个人页面中还提供了推荐给普通网络用户的相关友情,此外,对个人页面的访问量也在随时进行统计,并在个人页面中进行直观的显示。博客主页面的用例图如图 3 所示:图 3
29、 博客主页面的用例图第第 2 2 节节普通用户普通用户在博客注册页面注册成为博客的注册用户,才可以拥有自己独立的空间,进入某一博客页面查看相关文章信息时,可以随时对自己所感兴趣的文章发表评论,同时也可以查看到其他人针对该博文的评论。 普通用户在阅读博文时可以在最后留下自己的一些评论。他也可以留下更多的信息。这样他可以写留言。这样他留下的信息就更快地被博友所看到。 普通用户进入博友的用例图如图4 所示: 10 / 40图 4 上网博友在博客主页面的用例图普通网友可以搜索自己关心的一些数据。并且在搜索结果中提供在结果围再次搜索。这样就可以将围缩小。 首页向注册用户提供登陆模块,注册用户在博客首页跟
30、上网网友一样可以查看博客和博文推荐。上网网友可以注册成为博客用户,拥有自己独立的空间。这一模块的用例图如图5 所示:图 5 博客首页的用例图 11 / 40第第 5 5 章章 系系统统架架构构设设计计本系统采用严格的 J2 EE 应用结构,主要有如下几个分层。1. 表现层:由 JSP 页面组成。2. MVC 层:使用 Struts 框架。3. 业务逻辑层 :主要由 Spring loC 容器管理的业务逻辑组件组成。4. DAO 层:由 7 个 DAO 组件组成,实现类必须继承Spring 提供的HibernateDaoSupport。5. Hibernate 持久层:由 7 个 PO 组成,并
31、在 Hibernate Session 管理下,完成数据库访问。6. 数据库服务层 :使用 MySQL 数据库存储持久化数据。系统的具体分层如图 5 所示。图6 系统结构图在图 6 黑色大方框的 MVC 控制层、 Service 层与 DAO 组件层的组件,都由Spring IOC 容器负责生成,并管理组件的实例(实例必须是单身模式的,本系统中的 bean 基本上是单身的)。 12 / 40第第 1 1 节节系统架构说明:系统架构说明:本系统不仅严格按 MVC 模式设计,还按 J2 EE 分层设计,将中间层严格分成业务逻辑层、 DAO 层与数据持久层等。 MVC 层的控制器绝对禁止持久层访问,
32、甚至不参与业务逻辑的实现。表现层采用传统JSP 技术。 本系统采用的是典型的 J2EE 三层结构,分为表现层、中间层 (业务逻辑层 )和数据服务层。三层体系将业务规则、数据访问与合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。 Jsp 广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。中间层采用的是流行的Spring+Hibernate ,为了将控制层与业务逻辑层分离,又细分为以下几种。Web 层,就是 MVC 模式里面的 C,负责逻辑层和表现层的交互。调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC
33、采用 Struts 框架。Service 层(就是业务逻辑层 ),负责实现业务逻辑。业务逻辑层以DAO 层为基础,通过对 DAO 组件的正面模式包装,完成系统所要求的业务逻辑。DAO 层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。PO ,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate 作为 ORM 框架。Spring 的作用贯穿了整个中间层,将Web 层、Service 层、DAO 层与 PO 无缝整合,其数据服务层用来存放数据。第第 2 2 节节HibernateHibernate 层层通过
34、使用 Hibernate 持久层,可以避免使用传统的JDBC 操作数据库,对JDBC 近一步包装,从而更好地使用面向对象的方式来操作数据库。保证了整个软件开发过程以面向对象的方式进行,即面向对象分析、设计与编程,透过Hibernte 对 PO 对象持久化操作,不管插入还是查询都是通过PO。 13 / 405.2.1 设计持久化对象 (PO)面向对象分析,是指根据系统需求提取应用中的对象,将这些对象抽象成类,再抽取出需要持久化保存的类,这些需要持久化保存的类就是持久化对象(PO) 。该系统并没有预先设计数据库,而是完全从面向对象分析开始,设计了7 个持久化类。本系统一共设计了如下7 个 PO 。
35、1. Blog: 对应博客网友的一些基本信息,必如id、username、password、sex、picturename、name、address、uid、subject。还包括一些集合,博友的博文(Articles)、图片( Pictures)、留言( Messages),这样在系统中我们可以随时通过 getXxx()访问博客的一些属性就不用编写sql 语句来访问博友的些属性,2. Picture: 对应博友的图片,包含 name、blog,filename,这样我们可以将图片的路径名保存到数据库中,在根据路径名访问博友上传的图片,就不用用到数据库中的 Blob 类型,将图片数据格式转来转
36、去,不过这样服务器直接存储客户的图片。3. Messages: 对应网友留下的留言,属性有id、username、Blog、注册用户可以查看别人写的留言,但不能在自己的空间留言。4. FeedBack: 对应回复, 包括 id、article、username、content。他对于一篇博文,是网友阅读博文后对博文的评论。该评论无论是谁都可以看到。5. Sort: 对应博文分类属性有 Id、Blog 、name、Articles,注册用户可以在自己的空间定义一些分类,这样可以更好管理自己的博文,一个分类对应一个Blog,一个分类可能有很多分类。6. Article: 博客系统的核心对应有 ti
37、tle,Id、blog、content、sort,一个博文属于一种分类,可以有很多回复,7. Links: 对应有情连接,包括 id、url、name、blog 博友通过添加有情连接可以在自己的空间中提供快速的自己关心的。 14 / 40客观世界中的对象不是孤立存在的,以上7 个 PO 也不是孤立存在的,它们之间存在复杂的关联关系。分析关联关系也是面向对象分析的必要步骤,这7 个 PO 的关系如下。 Blog 除了 FeedBack 外,与另外 5 个都是 1-N 的关系,在blog 类里对应有个集合。比如 messages,是 SetArticle 和 FeedBack 之间存在I-N 的关
38、系,每篇博文可以被很多人评论。 Article 和 sort 之间存在 N-1 的关系,即每篇博文只能属于一种分类中,并且只属于一个博友,在Hibernate 框架中它提供了以 xml 文件形式出现的映射文件,完成从PO 到数据库表映射后,即完成面向对象的程序设计语言与关系数据库的映射。以面向对象的方式操作关系数据库。5.2.2 实现 DAO 层在 Hibernate 持久层之上,可使用 DAO 组件再次封装数据库操作。通过DAO 层,可以让业务逻辑层与具体持久层技术分离,一旦需要更换持久层技术时,业务逻辑层组件不需要任何改变。因此,使用DAO 组件,即意味着引入 DAO 模式,使每个 DAO
39、 组件包含了数据库的访问逻辑 :每个 DAO 组件可对一个数据库表完成基本的 CRUD 等操作。DAO 模式的实现至少需要如下三个部分。1. DAO 工厂类。2. DAO 接口。3. DAO 接口的实现类。 DAO 模式是一种更符合软件工程的开发方式,使用DAO 模式有如下理由。1) DAO 模式抽象出数据访问方式,业务逻辑组件无须理会底层的数据库 访问,而只专注于业务逻辑的实现。2) DAO 将数据访问集中在独立的一层,所有的数据访问都由DAO 对象完成,这层独立的 DAO 分离了数据访问的实现与其他业务逻辑,使得系统更具可维护性。3) DAO 还有助于提升系统的可移植性。独立的DAO 层使
40、得系统能在不同的 15 / 40数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅仅影响 DAO 层,不同数据库的切换不会影响业务逻辑组件,因此提高了系统的可复用性。对于不同的持久层技术, Spring 的 DAO 提供一个 DAO 模板,将通用的操作放在模板里完成,而对于特定的操作,则通过回调接口完成。Spring 为Hibernate 提供的 DAO 支持类是 : HibernateDaoSupport,5.2.3 DAO 组件的定义DAO 组件提供了各持久化对象的基本的CRUD 操作。而在 DAO 接口里则对DAO 组件包含的各种 CRUD 方法提供了声明,但有
41、一些IDE 工具也可以生成基本的 CRUD 方法。使用 DAO 接口的原因是 :避免业务逻辑组件与特定的DAO 组件藕合。由于 DAO 组件中的方法不是开始就设计出来的,其中的很多方法可能会随着业务逻辑的需求而增加,但以下几个方法是通用的。 get: 根据主键加载持久化实例。 saveor update: 保存或更新持久化实例。 remove: 删除持久化实例。上面涉与了 7 个 PO,这样我们必须设计 7 个对应的 PODao 7 个 Dao 必须继承 BaseDao 这个 BaseDao 有对接口的一些基本的 CURD 操作。7 个 Dao 如下。LinksDao ,BlogDao、Fee
42、dBackDao、ArticleDao、MessageDao、SortDao、PictureDao。这 7 个 Dao 分别封装对自己的持久化对象的一些操作。5.2.4 实现 DAO 组件借助于Spring的DAO支持,可以很方便地实现 DAO类。Spring 为Hibernate 的整合提供了很好的支持, Spring 的DAO 支持类是 :HiberanteDaoSupport ,该类只需要传入一个 SessionFactory 引用,即可得到一个 HibernateTemplate 实例, 16 / 40该实例功能非常强大,数据库的大部分操作也很容易实现。所有的DAO 类都继承Hiber
43、nateDaoSupport,并实现相应的 DAO 接口。而业务逻辑对象则面向接口编程,无须关心 DAO 的实现细节。通过这种方式,可以让应用在不同的持久化技术之间切换。LinksDaoHiberante ,BlogDaoHiberante、FeedBackDaoHiberante、ArticleDaoHiberante、MessageDaoHiberante、SortDaoHiberante、PictureDaoHiberante分别是LinksDao ,BlogDao、FeedBackDao、ArticleDao、MessageDao、SortDao、PictureDao的实现类,并继承
44、HibernateDaoSupport ,并通过 Spring IoC容器向7个Dao 实现类注入SessionFactroy ,在7个Dao 的实现类就可以通过 HibernateTemplate对PO持久化操作。并借助于 Spring 提供的两个工具类 : HibernateDaoSupport和HibernateTemplate,可以很容易地实现 DAO 组件。这种简单的实现较之传统的JDBC 持久化访问,简直不可同日而语。比如我现在要得到所有Blog对象我只需一句 return getHibernateTemplate() .find(from Blog);则返回一个 Blog对象的列
45、表。5.2.5 部署 DAO 层HibernateDaoSupport 类只需要一个 SessionFactory 属性,即可完成数据库访问。 SessionFactroy 创建 Session,而数据库的 CRUD 操作都是有 Session 完成,并将查询结果保存在一级缓存中,每次用户提交一次会话,可能需要Session 完成一些数据库的操作而实际的数据库访问由模板类HibernateTemplate 完成,该模板类提供了大量便捷的方法,简化了数据库的访问。5.2.5.1 DAO 组件运行的基础应用的 DAO 组件以 Hibernate 和 Spring 为基础,由 Spring 容器负责
46、生成并管理 DAO 组件。Spring 容器负责为 DAO 组件注入其运行所需要的基础SessionFactory。Spring 为整合 Hibernate 提供了大量工具类,通过 17 / 40LocalSessionFactoryBean 类,可以将 Hibernate 的 SessionFactory 纳入其IoC 容器。使用 LocalSessionFactoryBean 配置 SessionFactory 之前,必须为其提供对应的数据源,配置代码如下 :在datasource中配置它的数据库驱动driverClass,URL,username、password、inPoolSize、
47、maxPoolSize 不管我们采用那种数据库我就可以在修改 dataSource 的一些属性而不改动程序,将程序和数据库的耦合降到最低。5.2.5.2 配置 DAD 组件在将dataSource注入到上面简述的 7个Dao中,就可以用 HibernateTemplate提供的大量便捷的方法。进一步简化了持久层讨问,其模板的操作大大降低Hibernate 的重复操作 ;Spring 提供的DAO 支持简化了 DAO 开发;SessionFactory 的依赖注入简化了 Session 的控制等 ;这些都极提高 J2EE应用的开发效率。声明式事务的管理分离了业务逻辑和事务逻辑,将应用从特定的事务
48、逻辑中解料,使应用可以方便地在不同的事务策略之间切换。在所有的ORM 框架中, Sping 对Hibernate 的支持最好。 Spring 提供很多 IoC 特性的支持,方便地处理大部分典型的 Hibernate 整合问题,如 SessionFactory 的注入到 7个PODao中、HibernateTemplate 的简化操作与 DAO 支持等,然后在 7个PODao实现类继承 HibernateDaoSupport,这样的话, Dao实现类就可以通过HibernateTemplment以面向对象的方式操作数据库。另外, Spring 还提供了统一的异常体系与声明式事务管理等。一旦 Hi
49、bernate 处于Spring 的管理下, Hibernate 所需要的基础资源,都由 Spring 提供注入。 Hibernate创建SessionFactory 必需的DataSource ,执行持久化必需的 Session 与持久层访问必需的事务控制等,这些原本必须通过代码控制的逻辑,都将由Spring 接管:DataSource, SessionFactory, TransactionManager 等,都将作为 Spring 容器中的beano 将这些bean 放在配置文件中管理,可以提供很好的解耦。Spring 提供了DAO 支持,可以大大简化 DAO 组件的开发。 IOC 容器
50、的使用,提供了 DAO 18 / 40组件与业务逻辑组件之间的松糯合。所有的DAO实现Bean组件,都由容器负责注入到业务逻辑组件中,其业务组件无须关心DAO 组件的实现。面向接口编程与DAO 模式的使用,提高了系统组件之间的解稿,降低了系统重构的成本。通过Spring 整合Hibernate ,使持久层的访问更加容易,使用 Spring 管理Hibernate持久层有如下优势。1. 有效的 Session 管理: Spring 提供了有效、简单和安全的Hibernate Session 处理。2. IoC 容器提高了 DAO 组件与业务逻辑层之间的解糯。3. DAO 模式的使用,降低了系统重
51、构的代价。4. 方便的事务管理 : Hibernate 的事务管理处理会限制 Hibernate 的表现,而5. Spring的声明式事务管理力度是方法级。6. 通用的资源管理 : Spring 的ApplicationContext 能管理SessionFactory ,使得配置值很容易被管理和修改,无须使用Hibernate 的配置文件。7. 异常包装 :Spring 能够包装 Hibernate 异常,把它们从 checked exception 变为runtimeException; 开发者可选择在恰当的层处理数据中不可恢复的异常,从而避免烦琐的 catch/throw 与异常声明。配
52、置 DAD 组件所有继承HibernateDaoSupport 的 DAO 实现类,必须为其提供 SessionFactory 的引用。由于所有 DAO 组件都需要注入 SessionFactory 引用,因此可以使用 bean 继承简化 DAO 组件的配置。本应用同样将所有的DAO 组件配置在单独的配置文件中daoContext.xml 中例如:由于 7 个 Dao 都必须利用 IoC 容器注入SessionFactory。我们先配一个 dao 模板,然后 7 个 Dao 就继承该模板这样就可以简化 daoContext.xml 文件 19 / 40以 blogDAO 为例,blogDAO
53、的以 daoTemplate 为父 Bean ,属性 class 是 Dao的实现类。其余 6 个 PODAO 的配置相似。从上面的配置文件可以看出Spring Ioc 容器在Tomcat 启动时就可以向 Dao 注入 SessionFactory第第 3 3 节节实现实现 ServiceService 层层Service 组件采用正面模式封装多个DAO 组件, DAO 对象与 Service 组件之间的关 Service 组件需要实现的业务方法主要取决于业务的需要,通常需要在业务组件中包含对应的方法。业务层组件的实现业务层组件与具体的数据库访问技术分离,使所有的数据库访问依赖于 DAO 组件
54、,定义一个 FacadeManagerImpl 来包装 7 个 Dao 这样就可以把逻辑层和 Dao 分开,达到松散耦合的效果。事务管理将推迟到Service 组件而不是 DAO 组件,因为只有对业务逻辑方法添加事务才有实际的意义,对于单个 DAO 方法(基本的 CRUD 方法)增加事务操作是没有太大实际意义的。关于事务属性的配置,本系统使用 Spring 提供的 TransactionProxyFactoryBean 配置事务代理。这样不必为每个目标对象配置代理bean; 避免了目标对象被直接调用。部暑业务层组件单独配置系统的业务逻辑层,可避免因配置文件过大引起配置文件难以阅读。将配置文件按
55、层和模块分开配置,可以提高Spring 配置文件的可读性和可理解性。在 applicationContext. xml 配置文件中配置数据源、事务管理器、业务逻辑组件和事务管理器等bean。配置文件如下: 20 / 40PROPAGATION_REQUIRED 利用 SpringFrameWork 的 TransactionProxyFactoryBean 管理业务组件的事务,对应业务的方法名调用不同的事务管理,所以在业务逻辑组件的方法取名时一定要规化 。 txProxyTemplate Bean 是个业务组件事务管理的一个代理的父Bean,业务组件代理继承 txProxyTemplate,并
56、注入对应目标业务组件FacadeManagerImpl 的在业务控制器根据请求调用的是一个业务逻辑事务管理的代理,这个代理把请求分发给目标业务逻辑组件去处理,业务逻辑组件根据请求调用相应得 Dao 去执行。这样通过 FacadeManagerImpl 隔离业务逻辑控制器与 Dao耦合。业务不需要知道是那个Dao 执行的,也不需要 Dao 的 实现类 。我们通过 Spring 向 FacadeManagerImpl 注入 7 个 Dao 组件,业务逻辑组件是 面向 DAO 接口编程,可让业务逻辑组件从DAO 组件的实现中分离。因此业务逻辑组件只关心业务逻辑的实现,无须关心数据访问逻辑的实现。第第
57、 4 4 节节MVCMVC 层实现层实现MVC 架构的核心思想是 :将程序分成相对独立,而又能协同工作的三个部分。通过使用 MVC 架构,可以降低模块之间的耦合,提高应用的可扩展性。另外, MVC 的每个组件只关心组件的逻辑,不应与其他组件的逻辑混合。本文的 MVC 采用 Struts 框架。因为 Struts 是最健壮,应用最广的 MVC 框架。系统使用 Struts 框架可以提高系统的可控制性,保证了系统的稳定性与可用性。5.4.1 1. Model 部分模型独立于数据的显示,博客中所涉与的Model 都是 ActionForm 和 21 / 40JavaBean 组成。模型返回的数据与显
58、示逻辑分离。应用被分隔为三层,降低了各层之间的耦合,提高了应用的可扩展性。其中ActionForm 用于封装用户请求参数,所有的用户请求参数由系统自动封装成ActionForm 对象:该对象被ActionServlet 转发给 Action; 然后 Action 根据 ActionForm 里的请求参数处理用户请求。比如本系统中的Registfrom 封装了注册用户的所有信息,但页面触发了.do 结尾 的 请求。这 Struts 的核心控制器 ActionServlet 将填充RegistForm 即调用 RegistForm 的 setXxx。然后 RegistAction 就可以向业务逻辑
59、组件提交添加 RegistForm 到博客。这样就完成用户的注册。 而 JavaBean 则封装了底层的业务逻辑,包括数据库访问等。比如本文中FacadeManagerImpl ,通过业务外观向表现层封装数据的处理部分,而ActionForm 封装了请求参数以一个值对象( VO)的形似穿透 J2EE 的各层。5.4.2 View 部分Struts 的 View 部分采用 JSP 实现。整个应用由客户端请求驱动,当客户端请求被 ActionServlet 拦截时, ActionServlet 根据请求决定是否需要调用Model 处理用户请求,当用户请求处理完成后,其处理结果通过JSP 呈现给用户
60、。通过 Jsp 将业务逻辑组件返回的值对象格式化,用户和系统通过View 交互的。5.4.3 3. Controller 部分Struts 的 Controller 由系统核心控制器与业务逻辑控制器。系统核心控制拦截特定形式的请求,再根据请求调用相应得业务逻辑控制器处理请求,在 web.xml 中如下定义:action.blog.webapp.util.MyActionServlet 22 / 40config/WEB-INF/struts-config.xmlaction*.do从上面的配置文件可以看出MyActionServlet 是 MVC 的核心控制器,一般采用 Struts 的 Ac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法式铠甲守护安全
- 触电测试题及答案
- 传真机测试题及答案
- 2026苏教版六年级数学上册第七单元第4课时《练习十四》教案
- 护理查对的法律法规
- 护理人文关怀理念
- 护理病区护理不良事件分析与处理
- 护理护理信息技术:数字化时代护理信息技术的应用
- 2026年头部媒体发稿平台综合实力研究:15万+媒体资源矩阵规模优势资源整合能力的行业标杆实证-头部媒体发稿平台深度测评与未来趋势
- 护理风险识别与防范评估
- 从输血到患者血液管理《临床用血技术规范(2025版)》解读
- 2026年顺丰速运快递员面试问题及答案详解
- 国家基层糖尿病防治管理指南(2025)解读
- 第25课《文言文二则:曹冲称象》课件 统编版语文六年级上册
- 呼吸机脱机流程规范
- 2025年新高一英语暑假专项提升(人教版)动词时空密码速通(时态语态与主谓一致考点解析)
- 牛羊屠宰车间管理制度
- 潞安化工集团招聘2025笔试题库官方
- 2025年版云南省劳动合同范本下载
- 小学长元音知识讲解
- 个人防护PPE培训课件
评论
0/150
提交评论