毕业设计-JAVA手机短信分享系统的实现_第1页
毕业设计-JAVA手机短信分享系统的实现_第2页
毕业设计-JAVA手机短信分享系统的实现_第3页
毕业设计-JAVA手机短信分享系统的实现_第4页
毕业设计-JAVA手机短信分享系统的实现_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

大庆石油学院本科生毕业设计(论文) 1 摘 要 随着网络技术的迅速发展和 J2EE 平台的广泛应用,基于 B/S 的多层 WEB体系结构正在不断的完善。 WEB 技术的发展推动了信息化的发展,使人们能够不再受地理空间的限制与其他人进行信息的交流与共享。而开发这样一个信息交流平台,正是本论文要着手处理的问题。 其实,就算用 Java 建造一个不是很烦琐的 web 应用程序,也不是件轻松的事情。当为一个应用程序建造一个构架时有许多事情需要考虑。从高层来说,开发者需要考虑:怎样建立用户接口( user interfaces) ? 在哪里处理业务逻辑?和怎样持久化应用数据。这三 层每一层都有它们各自的问题需要回答。各个层次应该使用什么技术?怎样才能把应用程序设计得松耦合和能灵活改变 ? 构架允许层的替换不会影响到其它层吗?应用程序怎样处理容器级的服务( container level services),比如事务处理( transactions) ? 本论文正是基于上述问题出发,以开发一个信息交流平台系统为背景,对基于 MVC 模式的 Struts 框架、 Hibernate 的 ORM 机制和对持久对象持久化的管理以及 Spring IoC(控制反转)技术进行了探讨。并整合这三种框架: 表现层使用Struts; 业务层使用 Spring; 持久层使用 Hibernate 进行系统的开发。最后结合具体的事例对系统的实现作了详细的说明,验证了实现方法的可行性。 关键词 : J2EE Struts Hibernate Spring 模式 框架 大庆石油学院本科生毕业设计(论文) 2 Abstract With the rapid development of network technology and the wide use of J2EE platform, the multilayer web structure base on B/S has developed gradually. WEB techniques development has promoted the development of informationization, it has made people can communicate and share information without area and space limitation. However, developing such kind of information communication p latform is just the case in this thesis. Building non-trivial web applications with Java is no trivial task. There are many things to consider when structuring architecture to house an application. From a high-level, developers are faced with decisions about how they are going to construct user interfaces, where the business logic will reside, and how to persist application data. Each of these three layers has their own questions to be answered. What technologies should be implemented across each layer? How can the application be designed so that it is loosely coupled and flexible to change? Does the architecture allow layers to be replaced without affecting other layers? How will the application handle container level services such as transactions? This thesis is just base on these questions, taking an information communication platform system development as background, based on MVC architecture, discussed Struts frame, Hibernators ORM mechanism, persistent management of persistent object and Spring IoC technique and combining frameworks using three popular open source frameworks: For the presentation layer we will use Struts; for our business layer we will use Spring; and for our persistence layer we will use Hibernate to developing this system. At the end of the thesis, illustrate the way of realizing the system by an instance, and validate its feasibility. Key words: J2EE Struts Hibernate Spring Pattern Framework 大庆石油学院本科生毕业设计(论文) 3 摘 要 .1 ABSTRACT .2 第 1 章 概述 .5 1.1 课题研究目的和意义 .5 1.2 研究内容 .6 第 2 章 开发涉及的相关技术 .7 2.1 MYSQL 数据库设计工具介绍 .7 2.2 MYECLIPSE 设计工具 .7 2.3 STRUTS2 开发工具 .8 2.4 SPRING 技术简介 .9 2.5 JAVASCRIPT 技术简介 . 10 第 3 章 手机短信分享系统概述及需求分析 . 11 3.1手机短信分享系统概述 . 11 3.2手机短信分享系统需求分析 . 11 第 4 章 手机短信分享系统的详细设计 . 12 4.1 框架分析 . 12 4.2 功能模块简介 . 14 4.3 数据模型设计和数据库设计 . 17 4.3.3 持久层的实现 . 24 4.3.4 O/R 映射 . 24 4.3.5 DAO 数据访问接口 . 25 4.3.6 DAO 数据访问实现 . 25 4.4 业务层的实现 . 26 4.4.1 业务逻辑处理类的实现 . 26 4.5 表示层的实现 . 27 4.6 View 层的实现 . 28 4.7 Model 层的实现 . 29 4.8 Controller 层的实现 . 29 第 5 章 手机短信分享系统的界面实现 . 31 5.1 系统首页 . 31 5.2 精品铃声 . 33 5.3 手机主题 . 37 5.4 图片下载 . 39 5.5 游戏下载 . 42 5.5 短信下载 . 44 第 6 章 手机短信分享系统测试 . 45 6.1 测试概述 . 45 6.2 黑盒测试 . 45 大庆石油学院本科生毕业设计(论文) 4 总结与展望 . 46 7.1 本文的总结与展望 . 46 参考文献 . 47 致谢 . 49 大庆石油学院本科生毕业设计(论文) 5 第 1 章 概述 1.1 课题 研究目的和意义 从来没有任何事物的发展像互联网那样,对人类的活动产生如此深刻的影响。人们越来越依赖于 Internet 进行信息的交流与共享。 随着网络的飞速发展,信息交流平台在网络上扮演角色越来越重要了。信息交流平台 从她诞生的那一刻起就带有十分明确的个性化的人文色彩,作为一种远程电子通讯手段, 信息交流平台 允许一定范围内的用 户以十分廉价的方式,方便快捷地进行信息和文件资源的共享,以信件和电子讨论的形式进行交流。 毫不夸张的说,信息交流平台是网民互动沟通的最佳纽带 , 是互联网的灵魂 。 信息交流平台 已成为主流网民不可缺少的一项基本生活内容 。它 在新兴的电子文化、信息咨询和商业服务领域 也势必蕴藏 巨大 的 市场 。比如信息交流平台提供的 信息布告区 可为企业发布它的 产品介绍、推广、宣传、服务 等信息,能把企业的新产品快速的推向市场。 所以对信息交流平台的研究是完全有必要的。 J2EE 是 Sun ONE 的重量级产品,作为一种企业级 Web 应用程序开发 技术, J2EE 是目前唯一在市场上得到了广泛应用的技术体系。 J2EE 以 Java 为核心技术,更接近或者满足于互联网在智能化 Web 服务上对分布性、开放性和平台无关性的要求,同时它在安全性、健壮性、组件化等方面也更为成熟稳定,获得了众多 IT 厂商如 IBM、 Oracle、BEA 等共同制定标准并提供技术支持,因此具有强大的功能,是电子商务、远程教育等开发的首选平台。但是,即使我们用先进的 J2EE 来开发 Web 应用,也面临着许多问题需要考虑: 怎样建立用户接口( user interfaces) ? 在哪里处理业务 逻辑和怎样持久化应用数据 ? Struts、 Spring、 Hibernate 这三个基于 WEB应用开发的开源框架,可以为我们解决这些问题。如何把一个 WEB 应用分层而整合 Struts、 Spring、 Hibernate 技术,尽可能的将页面显示、业务逻辑和数据处理相分离,最大限度地降低系统各模块之间的耦合性,从而增强系统的可扩展性与可维护性,提高代码重用率,使系统的层次结构更加清晰,易于开发人员的分工协作,充分发挥开发人员的各自特长,这是一个值得研究探讨的问题。 大庆石油学院本科生毕业设计(论文) 6 Struts 是基于 MVC 模式的框架技术 。采用 Struts 可以简化遵循 MVC 设计模式的 Web 应用的开发工作,很好的实现代码重用,使开发人员从繁琐的工作中解脱出来,快速开发具有强可扩展性的 Web 应用,大大简化开发过程,缩短开发周期,提高开发效率。 Hibernate 是一项新兴的 ORM 技术,它把普通 java 对象映射到关系数据库表,并提供对对象的持久化操作。使得 Java 开发者能够高效地对关系数据库表进行增、删、改、查操作而不用直接面对 JDBC、 SQL 语句,让开发人员把精力集中在如何解决实际业务处理问题上。而借助于 Spring IoC 和AOP,使得应用中对象的关系 更加清晰、一致,而且还使得一切对象可控。最重要的一点是,对象本身的生命周期及对象之间的关系不用再让开发者费神了。 基于上述分析,研究实现 Struts、 Spring、 Hibernate 三个框架的整合来解决Web 应用开发中所面临的上述问题,从而提高程序的开发效率,增强系统的可扩展性与可维护性,提高代码重用率将会是一个很有意义的课题。 1.2 研究内容 以 J2EE 为基础 实现一个 手机短信共享 平台为出发点 ,设计了一个整合 SSH技术的架构 , 并分别用 Struts、 Hibernate、 Spring 实现了表示层 ,业务层 ,持久层,最终完成了本系统。 大庆石油学院本科生毕业设计(论文) 7 第 2 章 开发涉及的相关技术 2.1 MySql 数据库设计工具介绍 MySQL 是一个小型关系型数据库管理系统,开发者为瑞典 MySQLAB 公司,在 2008 年 1 月 16 号被 Sun 公司收购。 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。 MySQL 的海豚标志的名字叫“ sakila”,它是由 MySQL AB 的创始人从用户在“海豚命 名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者 Ambrose Twebaze 提供。根据 Ambrose 所说, Sakila来自一种叫 SiSwati 的斯威士兰方言,也是在 Ambrose 的家乡乌干达附近的坦桑尼亚的 Arusha 的一个小镇的名字。 1. 使用 C 和 C+编写,并使用了多种编译器进行测试,保证源代码的可移植性 2. 支持 AIX、 FreeBSD、 HP-UX、 Linux、 Mac OS、 Novell Netware、 OpenBSD、OS/2 Wrap、 Solaris、 Windows 等多种操作系统 3. 为多种编程语言提供了 API。这些编程语言包括 C、 C+、 Eiffel、 Java、Perl、 PHP、 Python、 Ruby 和 Tcl 等。 4. 支持多线程,充分利用 CPU 资源 5. 优化的 SQL 查询算法,有效地提高查询速度 6. 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的 GB 2312、 BIG5,日文的 Shift_JIS 等都可以用作数据表名和数据列名 7. 提供 TCP/IP、 ODBC 和 JDBC 等多种数据库连接途径 8. 提供用于管理、检查、 优化数据库操作的管理工具 9. 可以处理拥有上千万条记录的大型数据库 2.2 MyEclipse 设计工具 MyEclipse 企业级工作平台( MyEclipse Enterprise Workbench ,简称MyEclipse)是对 Eclipse IDE 的扩展,利用它我们可以在数据库和 J2EE 的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE 集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持 HTML, 大庆石油学院本科生毕业设计(论文) 8 Struts, JSF, CSS, Javascript, SQL, Hibernate。在结构上, MyEclipse 的特征可以被分为 7 类: 1. J2EE 模型 2. WEB 开发工具 3. EJB 开发工具 4. 应用程序服务器的连接器 5. J2EE 项目部署服务 6. 数据库服务 7. MyEclipse 整合帮助 对于以上每一种功能上的类别,在 Eclipse 中都有相应的功能部件,并通过一系列的插件来实现它们。 MyEclipse 结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。 简单而言, MyEclipse 是 Eclipse 的插件,也是一款功能强大的 J2EE 集成开发环境,支持代码编写、配置、测试以及除错。 MyEclipse7.0 的发布意味着我们不再需要配置 Tomcat 以及服务器了,你所需要做的仅仅是安装 MyEclipse 7.0。 7.0 发行版包括在 7.0M2 和 6.6 版本基础上对 bug 的修复和功能的加强。提供的支持包括: Eclipse 3.4.1/Ganymede、 REST web 服务、新的 myeclipse 操作板、 spring 工具集更新、集成 Manven2、 open JPA支持、高级 javascript 工具、 专业的 jsdt 实现、报表工具加强、 jsf 和 ICEfaces工具更新。 2.3 Struts2 开发 工具 Struts2 号称是一个全新的框架,但这仅仅是相对 Struts 1 而言。 Struts 2 与 Struts 1 相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架: WebWork 基础上发展起来的。从某种程度上来讲,Struts2 没有继承 Struts 1 的血统,而是继承 WebWork 的血统。或者说, WebWork衍生出了 Struts2,而不是 Struts 1 衍生了 Struts2。 因为 Struts2 是 WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了 Struts 1 和 WebWork 两者的优势,因此,是一个非常值得期待的框架。 Apache Struts2 是一个优雅的,可扩展的 JAVA EE web 框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Apache Struts 2 即是之前大家所熟知的 WebWork 2。在经历了几年的各自发展后, WebWork 和 Struts 社区决定合二为一,也即是 Struts 2 大庆石油学院本科生毕业设计(论文) 9 2.4 Spring 技术简介 Spring 是一个开源框架,它由 Rod Johnson 创建。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB完成的事情。然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 目的:解决企业应用开发的复杂性 功能:使用基本的 JavaBean 代替 EJB,并提供了更多的企业应用功能 范围:任何 Java 应用 简单来说, Spring 是一个 轻量级的控制反转 (IoC)和面向切面 (AOP)的容器框架。 轻量 从大小与开销两方面而言 Spring 都是轻量的。完整的Spring 框架可以在一个大小只有 1MB 多的 JAR 文件里发布。并且 Spring 所需的处理开销也是微不足道的。此外, Spring 是非侵入式的:典型地, Spring 应用中的对象不依赖于 Spring 的特定类。 控制反转 Spring 通过一种称作控制反转( IoC)的技术促进了松耦合。当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对 象。你可以认为 IoC 与 JNDI 相反 不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 面向切面 Spring 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计( auditing)和事务( transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的 完成业务逻辑 仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 容器 Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一 种容器,你可以配置你的每个 bean 如何被创建 基于一个可配置原型( prototype),你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例 以及它们是如何相互关联的。然而, Spring 不应该被混同于传统的重量级的 EJB 容器,它们经常是庞大与笨重的,难以使用。 框架 Spring 可以将简单的组件配置、组合成为复杂的应用。在Spring 中,应用对象被声明式地组合,典型地是在一个 XML 文件里。 Spring 也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留大庆石油学院本科生毕业设计(论文) 10 给了你。 所有 Spring 的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为 Spring 中的各种模块提供了基础支持。 2.5 JavaScript 技术简介 Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户端程序使用,也可以在 Servlet/JSP 的 Web 应用中使用,最具革命意义的是,Hibernate 可以在应 用 EJB 的 J2EE 架构中取代 CMP,完成数据持久化的重任。 Hibernate 的核心接口一共有 5 个,分别为 :Session、 SessionFactory、Transaction、 Query 和 Configuration。这 5 个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。 Session接口 :Session接口负责执行被持久化对象的 CRUD操作 (CRUD的任务是完成与数据库的交流,包含了很多常见的 SQL语句。 )。但需要注意的是 Session对象是非线程安全的。同时, Hibernate 的 session 不同于 JSP 应用中的HttpSession。这里当使用 session 这个术语时,其实指的是 Hibernate 中的session,而以后会将 HttpSesion 对象称为用户 session。 SessionFactory 接口 :SessionFactory 接口负责初始化 Hibernate。它充当数据存储源的代理,并负责创建 Session 对象。这里用到了工厂模式。需要注意的是 SessionFactory 并不是轻量级的,因为一般情况下,一个项目通 常只需要一个 SessionFactory 就够,当需要操作多个数据库时,可以为每个数据库指定一个 SessionFactory。 Configuration 接口 :Configuration 接口负责配置并启动 Hibernate,创建SessionFactory 对象。在 Hibernate 的启动的过程中, Configuration 类的实例首先定位映射文档位置、读取配置,然后创建 SessionFactory 对象。 Transaction 接口 :Transaction 接口负责事务相关的操作。它是可选的,开发人员也可以设计编 写自己的底层事务处理代码。 Query 和 Criteria 接口 :Query 和 Criteria 接口负责执行各种数据库查询。它可以使用 HQL 语言或 SQL 语句两种表达方式。 大庆石油学院本科生毕业设计(论文) 11 第 3 章 手机短信分享系统 概述及需求分析 3.1 手机短信分享系统 概述 手机短信分享系统 是一个对 手机短信和相应服务 进行分享 的 信息 管理系统,它包含 了音乐铃声 模块、 手机主题 模 块、 手机图片下载 模 块 、手机游戏 模 块 、后台管理 模 块 和 手机短信 模块 这六 个功能模块 。 网站中都是关于手机服务的模块 ,业务中 包括 对相应服务的点击量、更新时间等信息的统计, 可以通过这些 信息把动态的根据需求显示在页面上。 使用户更能清晰的根据自己的需求找到相应的服务和需求。 手机短信分享系统 是一个基于 B/S 的多层 WEB 应用系统,主要为上网手机用户提供了一个信息交流的平台。用户可以根据需要在分享同上下载资源,并且可以发表评论,提出问题并表达自己的观点。同时也可以查阅他人的评论等。 3.2 手机短信分享系统 需求分析 需求分析是指,需求分析人员将客户描述的需求用计算机语言描述出来,分析用户的需求是否能实现,是否还可以提交更多的功能。要开发一个软件产品,最首要也是最重要的就是需求分析,它是决定一个系统 成功与否的关键。 对于开发一个 分享 系统,首先需要确定它能提供那些功能。用户使用 分享 系统是按照一定的流程来进行的:用户 进入分享 系统,可以查询 需要的 查看 信息、查阅 服务 、 评论服务内容 、管理员要对 分享 系统进行管理 ,系统要具有创建、编辑、删除版块,管理 的用户,管理 信息 和设置的功能等 1.根据服务分类显示服务。 2.根据点击量显示服务内容 3.根据更新时间显示服务内容 4.个性化界面定制 5.根据搜索显示服务内容。 6.根据推荐用户显示服务内容 大庆石油学院本科生毕业设计(论文) 12 第 4 章 手机短信分享系统 的详细设计 详细设计阶段的根本 任务是确定怎样具体的实现要求的目标系统,也就是说,经过这个阶段的设计工作,应该写出对系统的精确描述,从而在编辑阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。此阶段要设计出程序的“蓝图”,开发人员根据这个蓝图写出实际的程序代码。因此,详细设计的结果基本决定了最终程序代码的质量。除了应该保证程序的可靠性之外,也应保证编写的程序可读性好,易于理解、测试、修改和维护,这一点是详细设计的最重要的目标与任务。 此外,界面设计也是本阶段完成的主要工作。 界面提供了一个人机对话的有效窗口,一个良好的界面不仅能够使 用户方便快捷的应用这个系统,而且还可以通过界面形象的了解系统所具有的功能。因此,界面设计是系统设计过程中的一个重要的环节。 4.1 框架分析 接下来我们所要做的就是对整个系统进行逻辑分层,已便于系统的开发 、 维护以及后续新的功能的扩充。 软件的逻辑分层指的是在单个的软件模块中完成相对独立的特定的功能。软件的层必须符合以下特征: 每个层由一组相关的类或组件构成,共同完成特定的功能。 层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的API,而下层组件不应该依赖上层组件。 每个层对上层公开 API,但具体的实 现细节对外透明。当某一层的实现发生变化,只要它的 API不变,不会影响其他层的实现。 软件分层的优点,主要表现在以下几个方面: 提高软件的伸缩性。伸缩性指应用程序是否支持更多的用户。 提高了软件的可维护性。可维护性指的时当发生需求变化时,只需修改软件的某一部分,不会影响其他部分的代码。层数越多,可维护性也会不断提高,因为修改软件的某一层的实现,不会影响其他的层。 提高软件的可扩展性。可扩展性指的是在现有系统中增加新功能的难易程度。层数越少,增加新功能就越容易破坏现有的程序结构。层数越多,大庆石油学院本科生毕业设计(论文) 13 就可以在每个层中提供扩 展点,不会打破应用的整体框架。 提高软件的可重用性。可重用性指的是应用程序代码没有冗余,同一个应用程序能满足多种需求。 提高软件的可管理性。可管理性指的是管理系统的难易程度。将应用程序分为多层后,可将工作分给不同的开发小组,从而便于管理。 我们采用流行的 MVC设计模式,整合 Struts、 Spring、 Hibernate框架,把整个系统分为四层: 表 示 层 ( Presentation Layer)、 业务层( Business Layer) 、 持久层 ( Persistence Layer ) 、 域模 块 层( Domain Model Layer ) ,并用 Struts实现 表现层 , 用 Spring实现业务层 , 用 Hibernate实现数据持久层。 表 示 层 :提供与用户交互的界面,主要负责接受用户请求并做出响应。它接受用户的输入,将数据传递给业务层,并将业务层返回的处理结果以 DHTML的形式呈现给用户。这一层的最佳实现模式就是 MVC模式,所以借助成熟的采用 MVC模式的 Struts来实现该层。 Struts主要在这一层负责为用户管理请求和响应;提供 ActionFrom来封装与用户互动的数据元素;提供 控制器( controller)代理调用 业务逻辑 ;处理从其他层抛出的 Struts Action异常; 业务层 :具体的业务逻辑通常导致代码的高度耦合,因此我们将业务逻辑分为单独的一层,其目的也是希望通过该层,来降低它与系统其他部分的耦合度。该层借助 Spring可以达到更好的效果。通过 Spring的 IOC模式来装配业务组件,如 DAO对象,使系统更具扩展性。通过 Spring AOP(面向方面)思想,来集中处理具体业务,如事务管理,使代码更为简洁,增加复用,提高开发效率。所以 Spring主要在这一层负责 处理应用程序的业务逻辑和业务验证;管理事务;管理业务 层对象之间的依赖;从 表 示 层中提供一个上下文( context)给业务层获得业务服务( business services ) ; 管理从业务逻辑到持久层的实现 。 持久层 :在传统的系统开发中该层占据大部分的开发时间,且随着需求的变更功能的修改,逐渐变得难以控制,特别是表结构的变化可能导致整个系统大动干戈。 Hibernate框架为 java提供了对象关系持久化( object-to-relational persistence)机制和查询服务 。借助 Hibernate,利用大庆石油学院本科生毕业设计(论文) 14 其持久化机制和 CRUD封装来减少代码开发量和其他层 次的耦合度。 域模 块 层 :该层应该说是 ORM思想的产物, ORM用对象关联数据表,允许数据表中数据放入对象,也允许对象中数据更新到数据表,我们将这些对象的集合归为一个专门的层次即 Domain Layer。域对象承担各层之间数据通信的载体。实际上域对象也是一个完完全全的业务对象,如Board对象, Friend对象。通过对业务的对象化,这有利于业务逻辑的重用。 将系统进行如上的分层,从理论上可以让其承担各自职责,表示层提供友好的用户交互、业务层处理具体问题领域逻辑、持久层完成与数据库读取存储、域模型承担数据传输的载 体。将一个复杂的应用领域细分成诸多最小单元,然后进行串联、组合。使得一个应用领域的实现过程中,最小单元达到最大复用,这也是我们将 ICPS系统进行上述分层的原因之一。 分层后的设计图如图 5-1所示。 图 5-1 系统架构层次图 4.2 功能模块简介 4.2.1 系统 功能划分: 大庆石油学院本科生毕业设计(论文) 15 根据系统所实现的功能,可作出如下图所示的结构划分: 根据服务分类显示服务类型 精品铃声服务 图片下载服务 短信服务 首页 手机主题服务 手机游戏服务 显示其他服务的信息 根据点击量和更新时间显示服务列表 显示具体铃声分类列表 显示铃声列表 显示总体铃声数数据和排行 显示所有手机主题数据 显示手机主题 显示总手机主题数据和排行 显示具体图片分类列表和数据 显示图片下载 显示总图片下载数据和排行 显示具体游戏分类列表和数据 显示手机游戏 显示总手机游戏数据和排行 显示具体短信分类列表和数据 显示短信服务 显示总短信服务数据和排行 大庆石油学院本科生毕业设计(论文) 16 4.2.2 系统 逻辑流程图 : 首页 服务总页面(分类,排行,更新时间)信息列表 【页面逻辑 流程图 】 选择一个服务类型 选择一个下载内容 下载页面 下载完成 按说明进行下载 搜索内容 搜索页面 选择一个下载内容 分类内容 分类信息页面 选择一个下载内容 页面需要的信息 服务 层( Service 类) - 由 Spring 依赖注入实体类 DAO 层 (Hibernate 查询 ) 查询数据库,返回数据 Action 类( Struts2)提供 根据 ID 或者 其他需求查询数据 结束 结束 【数据加载逻辑 流程图 】 大庆石油学院本科生毕业设计(论文) 17 3.3 根据搜索信息 加载数据 2.2 排行榜信息 2.3 搜索信息 3.4 根据具体服务的 ID查询数据库获取数据 2.4 显示具体信息 1 选择服务 用户 D1 数据库信息 2.1 分类信息 3.2 分类排行榜数据 3.1 搜索分类信息数据 4.2.3 系统 数据流图 : 通过以上数据流图的描述,很清晰的看出整个数据的流向。用户登录 主页面 界面后 ,选择相应的服务, 分别处理其相应的加载工作。 然 后把数据通过服务层反传递到前台页面 JSP进行显示。 4.3 数据模型设计 和数据库设计 数据库 设计 是最重要的,如果数据库的设计不是很清晰,那么在服务层使用的时候常常会造成数据冗余。 系统需要大量的数据来支持的 ,建立合适的数据库来存储数据是非常重要的,那么首先就要设计合理、稳定的数据模型 。根据多次需求分析 ,对需求已经十分 明确,经过详细的需求分析,了解到各个表应有的关系, 将 系统 的数据模型设计完成。 完成了整合 Struts、 Hibernate 和 Spring 框架的设计,把应用系统分为了四层:表示层、业务层、持久层、 域模块层。本章主要探讨如何引入 Struts、 Hibernate和 Spring 框架技术分别实现表示层、业务层、持久层,并最终完成 共享 系统的大庆石油学院本科生毕业设计(论文) 18 实现。 4.3.1 数据库采用 Hibernate 进行架构 class Entity: private String id; private String title; private String content; private int clickTimes; private Date time; private Date updateTime; private User user; private ThemeType themeType; private String action; class Game extends Entity: private Image image; private String url; private Set comments; 游戏( Game)表 存储游戏的属性和状态 字段名称 数据类型 是否为主键 Id 文本 是 Title 文本 否 Content 长文本 否 clickTimes 整型 否 time 文本 否 updateTime 整型 否 action 文本 否 User_id 整型 (外键 ) 否 themeType_id 文本 否 url 整型 否 image 整型 否 class Image extends Entity: private String url; private Set comments; 图像( Image)表 存储图像的属性和状态 字段名称 数据类型 是否为主键 Id 文本 是 Title 文本 否 Content 长文本 否 clickTimes 整型 否 time 文本 否 updateTime 整型 否 大庆石油学院本科生毕业设计(论文) 19 action 文本 否 User_id 整型 (外键 ) 否 themeType_id 文本 否 url 整型 否 class Music extends Entity: private String url; private Set comments; 铃声( Music)表 字段名称 数据类型 是否为主键 Id 文本 是 Title 文本 否 Content 长文本 否 clickTimes 整型 否 time 文本 否 updateTime 整型 否 action 文本 否 User_id 整型 (外键 ) 否 themeType_id 文本 否 url 整型 否 class SMS extends Entity: private Set comments; 短信( SMS)表 存储短信的属性和状态 字段名称 数据类型 是否为主键 Id 文本 是 Title 文本 否 Content 长文本 否 clickTimes 整型 否 time 文本 否 updateTime 整型 否 action 文本 否 User_id 整型 (外键 ) 否 themeType_id 文本 否 Abstract class Comment: private int id; private String title; 大庆石油学院本科生毕业设计(论文) 20 private String content; private Date time; private User user; private String action; class ThemeComment: class GameComment: class MusicComment: class SMSComment: 评论( Comment)表 存储评论的属性和状态 字段名称 数据类型 是否为主键 Id 文本 是 Type 文本 否 Title 文本 否 Content 长文本 否 Time 时间 否 Action 整型 否 Sms_id 文本 否 User_id 整型 (外键 ) 否 Image_id 文本 否 Music_id 文本 Theme_id 文 本 Game_id 文本 用户( User)类: class User: private int id; private String name; private String password; private String petName; private Permission permission; private int cellPhone; private UserDetailedInformation detial; private Set groups; private Set comments; private Set entities; private Set createGroups; class UserDetailedInformation: private int id; private Image image; private String sex; 大庆石油学院本科生毕业设计(论文) 21 private Date birthday; private String interest; private Date registerTime; private Date lastLoginTime; 用户 (User)表 存储用户的属性和状态 字段名称 数据类型 是否为主键 Id 整型 是 name 文本 否 password 文本 否 Permission_id 整型 (外键 ) 否 petName 文本 否 cellPhone 整型 否 Detail_id 整型 否 用户详细信息( UserDetailedInformation)表: 字段名称 数据类型 是否为主键 Id 整型 是 image 整型 否 Sex 文本 否 Birthday 日期 否 Interest 文本 否 registerTime 日期 否 lastLoginTime 日期 否 组( Group)类: Class Group: private int id; private String name; private String description; private String notice; private Image image; private Date time; private User user; private Set members; 组( Group)信息 存储组别的属性和状态 字段名称 数据类型 是否为主键 Id 整型 是 name 文本 否 description 文本 否 notice 文本 否 Image 整型 否 大庆石油学院本科生毕业设计(论文) 22 Time 日期 否 User 整型 否 Class Type: private int id; private String name; private Set themeTypes; 类别总分类( Type)信息 字段名称 数据类型 是否为主键 Id 整型 是 name 文本 否 Class ThemeType: private int id; private String name; private Type type; 具体类别分类( ThemeType)信息 字段名称 数据类型 是否为主键 Id 整型 是 Name 文本 否 Type_id 整型 否 Class Permission: private int id; private String name; 权限( Permission)信息 字段名称 数据类型 是否为主键 Id 整型 是 Name 文本 否 4.3.2 数据库类图 类型 :含有所有的定义类型 大庆石油学院本科生毕业设计(论文) 23 实体 :具体的实体分类 -游戏、主题、短信、图片、音乐。 评论 : 大庆石油学院本科生毕业设计(论文) 24 用户: 4.3.3 持久层的实现 我们用 Hibernate框架实现应用的持久层,封装访问数据库的实现细节,并向上层提供面向对象的数据访问 API。在接下来的三个小节,主要分析了如何创建 Hibernate框架为我们的应用服务。分为如下三个 步骤: 创建 O/R映射文件 创建 Hibernate配置文件 通过 Hibrenate API实现具体的 DAO数据访类 4.3.4 O/R映射 Hibernate采用 XML格式的文件来指定对象和关系数据之间的映射。在应用运行时, Hibernate将根据这个映射文件来生成各种 SQL语句,实现数据的访问。 表与表之间的关联关系 通过 XML进行配置,然后经过 HibernateAPI实现。 大庆石油学院本科生毕业设计(论文) 25 4.3.5 DAO数据访问接口 本系统涉及的业务对象有 多 个,每一个都映射到一张数据库表,为了完成业务对象的持久 化,执行相应的增、删、改、查操作,所以必须实现每一个对象的DAO类。基于以下几点考虑,我们创建了每一个对象 DAO类的接口类 DAO: 为了以后功能扩展 降低系统实现之间的相互依赖关系 业务层用 Spring框架的设值注入方式绑定 business service object和 DAO Object, Business Object中的 Setter方法接受的是接口,这样便于很松散的定义对象实现,然后注入。 考虑到每一个 对象 DAO类所需完成功能的相似性 ,所以可以定义一个接口超类 , 用以封装通用的方法定义 。 public interface ImageDAO public Image getImage(String id); public List getAllImages(); public List getAllImages(int page, int pageSize); public void deleteImage(String imageId); 4.3.6 DAO数据访问实现 为了实现代码的最大复用和便于以后功能的变更,业务对象 DAO都继承自 接口中的 DAO。 Transactional可以获得 CurrentSession。 CurrentSession能为我们管理 Session的创建、事务的启动、提交与回滚。 getXXX()方法提供给调用者一个 Query对象,它需要调用者传入一个 SQL语句的字符串作为参数。这个方法调用的 getCurrentSession ()方法获取 Session。 向数据库中添加记录是最常见的操作之一。 AddXXX()实现了向数据库中添加一条对应于一个业务对象实例的记录,它调用 HibernateTemplate的 save()方法实现。 根 据主键查询唯一数据对象,用 getXXXById()方法实现。这个方法有两个参数:业务对象 Class和 id。根据需要, id可以是 Integer型对象、 Long型对象或String。 大庆石油学院本科生毕业设计(论文) 26 updateXXX()方法用于把业务对象的更新持久化到数据库对应的表中。 deleteXXX()方法从数据库删除一条对应于一个业务对象的记录 FindXXXByName(String name)方法根据查询语句查询数据库并返回查询结果所包含的业务对象集合 业务对象 DAO封装了 Hibernate的实现细节,提供访问接口,供业务 层调用。 从上面的分析可以看出,用 Hibernate 实现持久层,使操作变得非常简洁,我们所面对和操作的是都是具体得业务对象,而让 Hibernate 根据映射文件去完成和数据库表打交道得那部分工作。这也是使用 Hibernate 实现持久层得优势所在。 4.4 业务层的实现 业务层所要做的就是处理来自表示 层的请求、执行应用逻辑、 对 持久层的调用、处理事务、处理异常。 本系统涉及到的业务逻辑类是由系统的业务对象决定的。 Spring框架负责把业务处理逻辑与所用到的业务处理对象和 DAO联系起来以完成相应的业务处理。 4.4.1 业务逻辑处理类的实现 依据本系统涉及的业务对象,相应的业务逻辑接口为: GameService接口 ImageService接口 MusicService接口 GameService接口 SMSService接口 ThemeService接口 UserService接口 boards); 4.4.2 Spring框架的配置 Spring框架依据配置文件将对象和服务以注入的方式联系起来。 Spring的配置文件都是一些关于 Bean的定义,包括数据源的配置, SessionFactory的配置以及 Service Beans的配置。主要包括如下九个方面的配置: 1) 获取数据源的配置文件,用以配置数据源。 2) 配置数据源 Bean,以供 SessionFactory Bean引用。 大庆石油学院本科生毕业设计(论文) 27 主要是上一步中从 perties获取的值设置 driverClassName、 url、userName、 password、 dialect等属性的值。 3) 配置 SessionFactory Bean,以供配置事务管理 bean、 hibernateInterceptor bean、 Dao Beans引用。 主要涉及到一些映射文件的定义,比如 Board.hbm.xml, Boards.hbm.xml等,用来描述从关系数据到对象的映射。 4) 配置事务管理 bean,用来管理数据库事务。 Spring为我们提供了 HibernateTransactionManager事务管理器,但必须为它提供 sessionFactory取值,即第 3步中的 SessionFactory Bean。HibernateTransactionManager将会把事务处理的具体工作委托给 Hibernate中的 net.sf.hibernate.Transaction对象。 5) 配置 hibernateInterceptor。 定义 hibernateInterceptor的作用是拦截对所有 Dao Beans的方法对调,在调用前绑定一个新的 Hibernate Session实例到当前线程,并在调用后关闭此Session实例。像 4)中所述的一样,也要为它提供 sessionFactory取值。 6) 配置 Dao Beans,以供 Dao的 AOP代理引用。 主要是一些具体 Dao实现类的定义,以供业务层完成对数据库的相应操作。 7) 配置 Dao的 AOP代理,以供 Service Beans。 8) 配置 Service Beans,以供 Service Beans的事务代理引用。 和上面 6)中所述类似,主要是定义一些具体了业务处理 Bean,以完成相应的业务处理。 9) 配置 Service Beans的事务代理,以供表示层调用。 在上述所分析的配置中,完成了对数据源、 SessionFactory、HibernateTransactionManager、 HibernateInterceptor、 Dao Beans及代理、Service Beans及事务代理等的配置。通过 Spring AOP实现了声明式事务管理。借助 Spring IoC实现了以配 置的方式创建注入对象。 4.5 表示层的实现 大庆石油学院本科生毕业设计(论文) 28 借助 Spring IoC和 Hibernate结合,实现了业务层与持久层的整合,把 Business Service Object和 DAO组装了起来,并把这些对象配到一个事务管理器( transaction manager)里。剩下来的工作就是用户接口层功能的实现,即表示层的实现。我们把表示层再继续细分为三层: View层, Model层, Controller层。 View层:由 JSP组成,提供与用户交互的界面即动态页面。负责接受用户的输入,借助 Struts的标签库,把 用户输入的数据存入 ActionForm Bean中,供Struts Action处理,并将返回处理结果的显示给用户。 Model层:由 Struts Action和 ActionForm组成,负责处理从 View层传递过来的数据并调用相应业务处理逻辑进行数据处理,将处理结果返回给 View层 Controller层:由 ActionServlet组成,负责接受用户请求并转发到相应的 Action Bean处理,再根据处理的结果将不同的显示请求重定向到响应的 JSP页面中进行显示。 4.6 View层的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论