去除业务耦合性的JSS多层Web开发框架设计方法

文档序号:10511898阅读:638来源:国知局
去除业务耦合性的JSS多层Web开发框架设计方法
【专利摘要】本发明涉及Web开发框架设计领域,具体地来讲为一种去除业务耦合性的JSS多层Web开发框架设计方法,包括:表现层、控制层、业务层以及持久层,其中表现层由JSP页面由加上Struts框架组合而成,业务层分为粗粒度Service层以及细粒度Service层,JSP页面中的用户事件由Struts框架分配到相应的控制层中,本发明将开发框架层次划分为四个层次:表示层、控制层、业务层、持久层。层次划分更细致,但框架的使用又没有因此而变得繁琐,相反在设计中尽量降低需要大量开发时间的完成工作的层次实现的使用难度,提高开发效率。
【专利说明】
去除业务耦合性的JSS多层Web开发框架设计方法
技术领域
[0001] 本发明涉及Web开发框架设计领域,具体地来讲为一种去除业务耦合性的JSS多层 Web开发框架设计方法。
【背景技术】
[0002] 随着软件的规模越来越大、系统越来越复杂以及软件危机程度的日益加剧,"软件 复用"和"软件体系结构的深入研究"成为现代软件开发的重要特点,从而架构与微架构开 始得到人们的高度重视。系统的微架构就是框架的选择或构建。框架是面向对象系统获得 复用的最大方式。良好的架构与微架构已经成为软件质量和软件持续性开发的根本保证。 而J2EE技术的发展使得开源项目的发展也达到了一个新的高度,并且涌现出了许多新思想 和新的开源框架。目前,以Struts、Hibernate、Spring为代表的开源框架正在逐渐流行开 来,并且己应用于越来越多的系统开发上。
[0003] 现有J2EE体系结构存在着各种弊端,如无法快速开发出原型系统;Web层与后台业 务逻辑层过于耦合;大数据量查询性能需要优化;数据表/数据模型更改,引起多个层面变 化,修改量大,存在质量隐患等。而采用框架组件技术则是解决上述弊端的一个有效方案。 框架的最大好处就是重用,框架不仅能重用代码,而且在一定程度上能重用设计和分析。

【发明内容】

[0004] 本发明所要解决的技术问题在于提供一种去除业务耦合性的JSS多层Web开发框 架设计方法,解决框架的使用繁琐的问题。
[0005] 本发明是这样实现的,一种去除业务耦合性的JSS多层Web开发框架设计方法,
[0006] 包括:表现层、控制层、业务层以及持久层,其中表现层由JSP页面由加上Struts框 架组合而成,业务层分为粗粒度Service层以及细粒度Service层,JSP页面中的用户事件由 Struts框架分配到相应的控制层中;
[0007] 控制层接到调用后,不进行任何附加的处理,如果业务复杂,转移给业务层的粗粒 度Service层进行处理;
[0008] 控制层接到调用后,不进行任何附加的处理,如果业务单一,直接转移到相应的细 粒度Service层来处理;
[0009] 粗粒度Service层把需求进行分解,分别转移到相应的细粒度Service层中,并汇 总最后的结果;
[0010]细粒度Service层接受调用后,进行业务的具体处理,并调用持久层中的数据库操 作接口来持久化数据。
[0011] 进一步地,在JSP页面得到的数据被Struts框架进行自动处理,Struts框架初始化 化一个相应的ActionForm,并把JSP页面输入数据填充入ActionForm中,进行校验之后,作 为输入参数传递给控制层,ActionForm是struts框架所特有的值传输对象,为了使得 Struts框架和其他层达到最底的親合性,使用DT0对象作为中介来把ActionForm中的数据 传入业务层的各Service层中。
[0012] 进一步地,从JSP页面至I」控制层传入的是ActionForm,从控制层至IjJSP页面传出的 是ActionForm或者List数据集;
[0013] 从控制层到粗粒度Service传入的是DT0,DT0中包含的属性值一般少于 ActionForm所包含的属性值,从粗粒度Service到控制层传出的是单个数据或List数据集;
[0014] 从粗粒度Service到细粒度Service传入的是DT0或实体对象,从细粒度Service层 到粗粒度Service传出的是单个数据或List数据集。
[0015]从控制层到细粒度Service传入的是DT0,从细粒度Service传出的是单个数据或 List数据集。
[0016]进一步地,框架中所有的对象都是存放在Spring的工厂容器里,由Spring配置文 件来管理这些对象。
[0017] 进一步地,框架所构成的系统在启动完成之后,对外提供服务,系统服务流程按照 以下的方式执行:
[0018] 用户发送HTTP请求到服务器,请求与服务器建立连接,用户的所有请求首先经过 过滤器进行安全检测,之后,将URL重新定位到合理的位置,如果请求合法,用户请求继续发 送给框架的中央控制器执行调度,如果请求不合法,过滤器将终断用户的请求,转向JSP页 面;
[0019]控制层组件ActionServlet作为该框架的中央控制器,负责系统里HTTP请求与响 应地调度管理,如果用户向应用程序输出窗口控制台发出的所有访问请求都要通过 A c t i ο n S e r v 1 e t来转到相应的资源文件或业务逻辑控制器,已完成相应的请求, ActionServlet根据struts-config. xml配置文件作为依据执行。
[0020] 进一步地,Spring工厂在运行环境启动过程中启动,根据spring-config.xml的配 置信息同步初始化业务层的业务模型Service Model和持久层的对象实例并链接他们之间 的关系,具体为:控制层中的业务逻辑Action首先通知Spring工厂希望获得的实例注册名 称,Spring工厂管理器到Spring工厂容器中查找指定的实例并返回给控制层,控制层与业 务层实现对接,之后通过调度业务层的方法完成数据的进一步处理。
[0021 ]本发明与现有技术相比,有益效果在于:
[0022] 1、本发明将开发框架层次划分为四个层次:表示层、控制层、业务层、持久层。层次 划分更细致,但框架的使用又没有因此而变得繁琐,相反在设计中尽量降低需要大量开发 时间的完成工作的层次实现的使用难度,提高开发效率。
[0023] 2.通过配置文件和特殊类控制表示层与业务逻辑层的数据交互,不再要求必须使 用特殊的标签完成数据展示和数据的交互。
[0024] 3. J2W框架设计和实现了独特的展示模式,和独特数据交换模式相辅相成的,既然 共通的控制类控制了不符合规范的代码对系统的影响。
【附图说明】
[0025]图1为本发明实施例提供的JSS多层Web开发框架组件结构图;
[0026]图2为本发明实施例提供的JSS多层Web开发框架组件流程图;
[0027]图3为本发明实施例提供的Spring IoC控制示意图;
[0028]图4为本发明实施例提供的数据库持久化结构图。
【具体实施方式】
[0029]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明 进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于 限定本发明。
[0030] 本架构基于Struts框架的MVC,如图1所示,重新得到了细化,三个大层次得到了细 分,其中实线箭头表示调用关系,虚线箭头表示数据的传递关系。
[0031] 在表现层中,最外面的子层,也就是用户所接触到界面是由JSP页面加上Struts标 签组合而成的。JSP页面用来展示页面的格式,显示数据的地方和有事件响应的按纽等均由 Struts标签来完成。JSP页面本来是可以以标签内嵌JAVA代码的方式来表现数据和处理交 互,但是这里用到的JSP页面里只有其格式布局的子集,极其类似于HTML,这里使用JSP而不 直接使用HTML是因为Struts的标签只能在JSP中才能得到下确的编译,即在JSP中标签才有 用。表现层中的另一个子层是控制层,所有的页面事件都汇集到这个子层,并在不同的控制 层中得到处理。本来在控制层中可以进行各种具体业务逻辑的处理,但在此框架中,控制层 的功能非常单一,就是把各种事件委托为相应的Service处理,起一个转接的作用。
[0032] 中间层分为了两个子层:粗粒度Service层和细粒度Service层。之所以划分为粗 细不同的两个子层,是因为在业务逻辑的处理过程中,看似复杂的处理,其实可以分为一个 个子部分,每个部分功能相对独立。这样,细粒度Service层来做具体业务处理,功能相对单 一,复杂度大大降低,粗粒度的service子层根据具体事件的要求,把细粒度Service进行组 合拼装,来满足实际的需要。这样划分的另外一个优点是:细粒度service的复用度得到了 大大地提高。有的时候,需求很简单,不需要集成多个细粒度Service,一个就可以解决,这 个时候,由Action直接调用细粒度Service来实现。
[0033] 这里的持久层也称为DA0层,其本质是一组自定义的数据库操作接口,在业务逻辑 层的处理类中调用,将数据持久化到数据库中。
[0034]由上可见,子层间的调用关系为:
[0035] 1 .JSP页面中的用户事件由Struts框架分配到相应的控制层中。
[0036] 2.控制层接到调用后,不进行任何附加的处理:如果业务复杂,转移给相应的粗粒 度Service类进行处理。
[0037] 3.粗粒度Service把需求进行分解,分别转移到相应的细粒度Service中,并汇总 最后的结果。
[0038] 4.控制层接到调用后,不进行任何附加的处理;如果业务很单一,直接转移到相应 的细粒度Service来处理。
[0039] 5.细粒度Service接受调用后,进行业务的具体处理,并调用持久层中的数据库操 作接口来持久化数据。
[0040]在JSP页面得到的数据被Struts进行自动处理,Struts会初始化化一个相应的 ActionForm,并把界面输入数据填充入这个ActionForm中,进行校验之后,作为输入参数传 递给控制层。ActionForm是struts框架所特有的值传输对象,为了使得Struts和其他层达 到最底的親合性,这里使用DT0对象作为中介来把ActionForm中的数据传入中间Service层 中。所以控制层的功能就是改装界面数据,调用相应的Service并将其传入。DTO对象使用使 得表现层可以进行替换,比如可以使用其他的表现层技术来,从而这个框架的灵活性得到 了大大增加。这样无论是粗粒Service还是细粒度Service,它们得到的不可能是 ActionForm这个Struts所独有的东西了。在复杂的业务中,粗粒度service会把DT0对象进 一步细分,或者初始化入相应的实体对象中,并传入细粒度Service中进行进一步的处理。 细粒度Service针对具体的业务处理这些数据,调用数据库操作接口来进行数据的持久化。 [0041]从上面的分析结合上图1中虚线的标示可以看出:
[0042] I .从JSP页面到控制层传入的是Act ionForm,从控制层到JSP页面传出的是 Act ionForm或者List数据集。
[0043] Π .从控制层到粗粒度Service层传入的是DT0,DT0中包含的属性值一般少于 Act ionForm类所包含的属性值,Act ionForm可能包含一些表单验证的信息。从粗粒度 Service层到控制层传出的是单个数据或List数据集。
[0044] ΙΠ .从粗粒度Service层到细粒度Service层传入的是DT0或实体对象,从细粒度 Service层到粗粒度Service层传出的是单个数据或List数据集。
[0045] IV.从控制层到细粒度Service层传入的是DT0,从细粒度Service层传出的是单个 数据或List数据集。
[0046] 参见图2为框架组建流程,从图2中可以看出框架中所有的对象都是存放在Spring 的工厂容器里,由Spring配置文件来管理这些对象。基于该文件的管理实现系统内各个组 件间的非侵入式编程,提高系统的可扩展性与可维护性。同时,通过整合Struts的组件实现 MVC的这一重要思想,使得系统的设计与实现可以采用流水式的方式开发。
[0047] 从图2中可以看出Struts、Spring两大开源框架在该Web应用框架中是环环相扣 的,形成了一个整体。
[0048]该框架下的在系统启动完成之后,系统可以开始对外提供服务。系统服务流程按 照以下的方式执行:
[0049] 1.用户发送HTTP请求到服务器,请求与服务器建立连接。用户的所有请求首先经 过过滤器进行安全检测,以避免非法用户非法使用系统和用户的超时使用系统,以保护系 统数据安全。之后,将URL重新定位到合理的位置。如果请求合法,用户请求继续发送给框架 中央控制器执行调度。如果请求不合法,过滤器将终断用户的请求,转向JSP页面。
[0050] 2.控制层组件ActionServlet作为该框架平台中央控制器,负责系统里HTTP请求 与响应地调度管理。如果用户向控制台发出的所有访问请求都要通过ActionServlet来转 到相应的资源文件或业务逻辑控制器,已完成相应的请求。ActionServlet是根据struts-conf ig · xml配置文件作为依据执行的。struts-conf ig · xml同时也可以完成其他系统信息 的配置管理,包括一下内容:
[0051]①数据源的配置,在这里可以配置数据库源的启动程序、数据库链接URI、链接对 象的使用时间长度等其他参数。这里提供了一种基于配置的数据库源管理解决方案。
[0052] ②Web Container异常监视器配置,这是Struts开源框架提供的一种配置方案,用 于解决当Web Container内产生异常时,由异常监视器捕获并统一处理。使得系统不会把系 统直接抛给用户,而是由监视器捕获并翻译成友好的提示消息来告知用户系统现在的运行 状态。
[0053] ③系统监视并响应用户请求的URL映射参数,这一部分是系统配置的核心。
[0054] ④系统国际化资源配置参数。这部分决定企业级系统框架适应不同系统需求和不 同语言的灵活性程度。
[0055] ⑤其他插件的整合(在这个框架中不使用这种整合方式)。
[0056] 参见图3,业务逻辑Action是框架应用到实际的系统之后,在实际的项目需求环境 下按照框架标准实际开发的。
[0057] Spring工厂在运行环境启动过程中启动,根据spring-config. xml的配置信息同 步初始化Service Model和Dao的对象实例并链接他们之间的关系。
[0058]如图3,这里的业务逻辑Action指的是本例中的逻辑业务的控制层。
[0059] 业务逻辑Action首先通知Spring工厂希望获得的实例注册名称。Spring工厂管理 器到工厂容器中查找指定的实例并返回给控制器。这时控制器就与业务层实现了对接,之 后通过调度业务层的方法完成数据的进一步处理。在控制器层、业务层和持久层之间数据 传递主要以DataModel对象为主。业务模型ServiceModel是实际处理业务逻辑的Model部 件。它是在框架平台的基础之上来完成这一业务逻辑的。
[0060]参见图4,对于框架的数据库设计,在软件项目中,数据管理是软件工作的重要组 成部分。数据操作的安全性、可靠性和正确性是软件有效的重要标志和根本要求。在行业 内,用来存储数据的数据源主要以数据库为载体。并使用相应的数据库管理系统对数据库 进行管理和维护。使用数据库管理系统可以减少了数据的重复、避免数据的不一致、提高数 据共享能力、具有较高的数据安全性和完整性保障、可以实现操作并行调度、及易于使用和 扩展。
[0061 ] 现在可供选择的数据库有Oracle、Sybase、DB2、SQL server、MySQL等。作为企业级 系统框架解决基于配置地自适应地与某一种或几种数据库建立连接并提供服务,已成为评 估一个企业级系统框架的自适应能力和应用范围的标志。特别是作为搭载在Java平台之上 的数据库,考虑一致性整体的移植性,数据库管理系统的可选择性决定了这个框架的可推 广性。
[0062]基于这样的一个要求,在设计框架的数据库源管理组件时,基于Apache公司的 commons-dbutils包的相关内容实现自定义的数据库持久化解决方案。其中 BaseDataSource类用于初始化数据库连接的基本信息,Transact ionManager类用于对数据 库操作进行统一的事务控制,DboPerator类用于封装数据库操作的具体实现。数据库组件 结构图如图4所示,
[0063] 数据库持久化狭义的理解:"持久化"仅仅指把域对象永久保存到数据库中;广义 的理解,"持久化"包括和数据库相关的各种操作。通过持久化技术可以减少访问数据库数 据次数,增加应用程序执行速度,代码重用性高,能够完成大部分数据库操作;松散耦合,使 持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用 修改代码。
[0064] 本框架数据持久化操作具体有下面四个重要步骤:
[0065] 1.数据库参数持久化
[0066]在程序设计中,程序在与文件建立连接与释放连接时是最耗时间的,而且文件操 作要保证操作线程并发的安全性。由于数据库启动参数的数据量很小,将其设计成在服务 器启动时持久化到内存的某个静态区域。只要用静态变量来接收这些参数值即可,这样就 可以节省很多服务器开销。
[0067] 2.DataSource 数据源定义
[0068]当DataSource启动之后,就会在内存创建数据库连接池并与数据库建立若干个物 理连接。如果客户程序需要与数据库取得连接时,客户程序把连结请求放入缓冲中由连接 池统一调度物理连结,这样可以最大程度利用宝贵的物理连结。当完成数据操作后,客户程 序只需要释放连接即可而不必关闭连接。
[0069] 3.数据库事务控制
[0070] 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。 简答的说就是:要么全部执行成功,要么撤销不执行。数据库提供的事务功能是J2EE应用中 事务的根本。重执行日志记录了数据库变化的每一个动作,数据库系统会根据重执行日志, 在发生错误的时候撤销已执行的操作;或者在数据库重启时,将尚未持久化的数据重新执 行操作。
[0071] 4.数据库组件接口程序
[0072] 框架的客户程序接口为程序员提供一个熟悉的数据库数据集处理方案。它的操作 过程与ResultSet很相似,而且功能更加强大。该程序接口作为软件项目开发过程中DA0层 的父类,提供数据处理的统一方法。它是对数据库事务控制模块和数据库操作模块的二次 封装和扩展。
[0073] 1)获得数据库的连接对象;提供程序员手动控制事务的连接对象。
[0074] 2)该模块提供了对数据库连接对象的事务操作管理。程序员在编写程序可以让框 架自动管理数据库的事务操作,也可以采用手动的方式管理事务操作。
[0075] 3)对数据库操作模块的二次封装与扩展。将查询结果的List集合传送给DataSet 进行处理。并扩展了 Oracle序列的操作,程序员只要将序列名称作为参数传入该方法即可 得到当前可用的序列号。
[0076] 数据库的启动参数配置在dbconfig. properties中。配置的参数信息如表1所示。 [0077]表1数据库连接启动参数表
[0078]
[0079] 使用这样配置管理方案可以方便的更改数据库的连接位置、数据库类型等其它数 据库状态,提高框架的灵活性。
[0080] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1. 一种去除业务耦合性的JSS多层Web开发框架设计方法,其特征在于,包括:表现层、 控制层、业务层以及持久层,其中表现层由JSP页面由加上Struts框架组合而成,业务层分 为粗粒度Service层以及细粒度Service层,JSP页面中的用户事件由Struts框架分配到相 应的控制层中; 控制层接到调用后,不进行任何附加的处理,如果业务复杂,转移给业务层的粗粒度 Service层进行处理; 控制层接到调用后,不进行任何附加的处理,如果业务单一,直接转移到相应的细粒度 Service层来处理; 粗粒度Service层把需求进行分解,分别转移到相应的细粒度Service层中,并汇总最 后的结果; 细粒度Service层接受调用后,进行业务的具体处理,并调用持久层中的数据库操作接 口来持久化数据。2. 按照权利要求1所述的去除业务耦合性的JSS多层Web开发框架设计方法,其特征在 于,在JSP页面得到的数据被Struts框架进行自动处理,Struts框架初始化化一个相应的 ActionForm,并把JSP页面输入数据填充入ActionForm中,进行校验之后,作为输入参数传 递给控制层,ActionForm是struts框架所特有的值传输对象,为了使得Struts框架和其他 层达到最底的親合性,使用DT0对象作为中介来把ActionForm中的数据传入业务层的各 Service 层中。3. 按照权利要求2所述的去除业务耦合性的JSS多层Web开发框架设计方法,其特征在 于, 从JSP页面到控制层传入的是ActionForm,从控制层到JSP页面传出的是ActionForm或 者List数据集; 从控制层到粗粒度Service传入的是DT0,DT0中包含的属性值一般少于ActionForm所 包含的属性值,从粗粒度Service到控制层传出的是单个数据或List数据集; 从粗粒度Service到细粒度Service传入的是DT0或实体对象,从细粒度Service层到粗 粒度Service传出的是单个数据或List数据集。 从控制层到细粒度Service传入的是DT0,从细粒度Service传出的是单个数据或List 数据集。4. 按照权利要求1所述的去除业务耦合性的JSS多层Web开发框架设计方法,其特征在 于,框架中所有的对象都是存放在Spring的工厂容器里,由Spring配置文件来管理这些对 象。5. 按照权利要求4所述的去除业务耦合性的JSS多层Web开发框架设计方法,其特征在 于,框架所构成的系统在启动完成之后,对外提供服务,系统服务流程按照以下的方式执 行: 用户发送HTTP请求到服务器,请求与服务器建立连接,用户的所有请求首先经过过滤 器进行安全检测,之后,将URL重新定位到合理的位置,如果请求合法,用户请求继续发送给 框架的中央控制器执行调度,如果请求不合法,过滤器将终断用户的请求,转向JSP页面; 控制层组件Act ionServlet作为该框架的中央控制器,负责系统里HTTP请求与响应地 调度管理,如果用户向应用程序输出窗口控制台发出的所有访问请求都要通过 A c t i ο n S e r v 1 e t来转到相应的资源文件或业务逻辑控制器,已完成相应的请求, ActionServlet根据struts-conf ig.xml配置文件作为依据执行。6.按照权利要求5所述的去除业务耦合性的JSS多层Web开发框架设计方法,其特征在 于,Spring工厂在运行环境启动过程中启动,根据spring-config.xml的配置信息同步初始 化业务层的业务模型Service Model和持久层的对象实例并链接他们之间的关系,具体为: 控制层中的业务逻辑Action首先通知Spring工厂希望获得的实例注册名称,Spring工厂管 理器到Spring工厂容器中查找指定的实例并返回给控制层,控制层与业务层实现对接,之 后通过调度业务层的方法完成数据的进一步处理。
【文档编号】G06F9/44GK105867907SQ201610168167
【公开日】2016年8月17日
【申请日】2016年3月23日
【发明人】夏辉, 王晓薇, 吴鹏, 赵志刚, 白萍, 王静晶, 王艳
【申请人】沈阳师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1