摘要 MVC设计模式是基于J2EE的WEB应用开发的首选模式,当前许多流行的框架也都是基于MVC设计模式的。本文简要介绍了MVC设计模式和Struts框架,并提出了一种基于MVC模式的新型WEB应用开发框架——WebFramework,并对该框架的各个层次的组成、功能进行了详细的描述。
关键词 MVC设计模式; J2EE;框架; Struts
引言
随着开源软件的兴起,各种框架也纷纷出现,如Apache 的开源框架Struts就是典型的代表。在实际软件开发中运用这些框架,大大降低了J2EE开发的复杂度和难度,降低了开发成本。但是这些框架也有不足的地方,如难于掌握,配置复杂等等。本文研究的目的在于设计出一种简单易行的WEB开发框架——WebFramework,WebFramework结构清晰,易于理解,增加系统的可扩展性,可维护性,降低开发成本。
MVC设计模式
基于J2EE的WEB应用系统,多数都利用MVC模式来实现其体系结构。MVC(Model-View-Controller)是八十年代为编程语言Smalltalk-80发明的一种软件设计模式。MVC模式将交互式应用分成模型(Model)、视图(View)和控制器(Controller)三部分[1]。模型是指从现实世界中挖掘出来的对象模型,是应用逻辑的反映。模型封装了数据和对数据的操作,是实际进行数据处理的计算的地方。视图是应用和用户之间的接口,它负责将应用显现给用户和显示模型的状态。控制器负责视图和模型之间的交互,控制对用户输入的响应响应方式和流程,它主要负责两方面的动作:把用户的请求分发到相应的模型;将模型的改变及时反应到视图上。MVC将这些对象分离以提高灵活性和复用性。MVC模式的结构如图1所示:
图1 MVC设计模式的结构
Struts框架
Struts是Apache基金会Jakarta项目组的一个Open Source项目,它将Servlet2.2和JSP1.1标记用作实现的一部分,它由一组相互协作的类、servlet和JSP标记,组成一个可重用的系统设计。它能够很好地帮助Java开发者利用J2EE开发WEB应用。它将设计模式中“分离显示逻辑与业务逻辑”的能力发挥的淋漓尽致。因此,越来越多的大型的WEB应用项目的开发都纷纷采用Struts框架,或者借鉴Struts架构设计,进行基于MVC模式的应用系统的开发。
Struts的工作原理如图2所示:
图2 Struts 的工作原理
Struts的优点主要体现在两个方面:表单验证和页面导航。表单验证解决了请求数据的验证问题,增强了系统健壮性。而页面导航使系统的业务流程脉络清晰,系统各部分之间的联系可以通过配置文件反映出来,从而在一定程度上简化了系统以后的维护工作。
但是Struts也存在一些不足:
1)陡峭的学习曲线。Taglib是Struts的标记库,如果能灵活运用,能大提高开发效率,但对初学者来说,却需要一个持续学习的过程,增加了系统的开发成本。
2)增加了系统的复杂度。业务层和表现层之间的耦合度太高,使得开发人员无法专注于表现层的设计和实现。
3)没有对表单数据前端验证提出方案,不利于在大型系统中使用。
4)配置文件过于复杂繁索,随着系统规模的增大,struts-config.xml越来越庞大,维护也变得越来越困难。
WebFramework框架
针对Struts框架的以上不足之处,本文提出WebFramework框架,与Struts框架相比,WebFramework更简单易行,它通过简化表现层的设计,降低开发难度,节约开发成本;使用VO(Value Object)作为数据传递的方式,
降低系统复杂度;运用简单的浏览器端表单字段数据验证,提高系统的运行效率;简化的配置文件,便于系统的维护。
设计目标
遵循J2EE规范,基于多层分布式应用软件开发框架,分布式的层次构架方式可以提高软件系统性能上的可扩展性,从长期的角度上保障了客户对当前的软件投资;实现软件系统在异常情况下也可以正常地提供服务,提高软件系统的稳定性;各个构架层次逻辑分离,有利于软件开发过程中团队成员的协同工作,提高生产效率。
2、框架结构
在设计策略中,将软件系统从构架上分为数据层、业务逻辑层和表示层,主要集中在业务表示与业务逻辑层。将普通三层架构的表示层细分成视图格式层和表示控制逻辑层。表示层涉及基于“瘦客户”技术的用户视图格式服务器端表示和相应的交互式控制逻辑。视图格式层,只保留了构建客户端用户视图必要的显示格式和事件触发;而在表示控制逻辑层则如名称所描述的那样,实现了人机交互所需控制逻辑和部分业务会话逻辑,再加上贯穿所有系统逻辑层的业务实体,则构成了以MVC模式为核心的表示层架构,将显示格式、显示控制逻辑、模型数据三部分有效地分隔开来,大大加强了系统架构的可扩展性和应用子系统的可插拔性。
业务层细分成业务会话层和业务持久化层。业务层集中在业务流程中处理逻辑的组件化封装,且与数据层平台和外部系统无关。业务会话层,侧重于业务活动,将一项业务的所有活动事务性地封装起来,也确保业务流程处理的一致性和高效率;而业务持久化层则是为业务会话层提供支持,提供业务数据的持久化操作,在业务与数据库之间建立分离作用的中间层,构成松耦合的架构。
本分层模型中实现了MVC设计模式。其中,Servlet组件对应于MVC中的控制器(Controller)部分,JSP及Browser对应于视图(View)部分,而会话外观、逻辑Bean及值对象则对应于模型(Model)部分。其结构图3所示:
2.1、数据层
(1)层定义
数据层对数据进行管理,并向业务逻辑层提供标准化的开放访问接口。
数据层目前主要提供两种形式的服务方式:数据库方式和文件方式。数据库主要提供业务操作数据等具有明显结构化特性的数据的存储和访问服务;文件主要提供包括扫描文档图像、传真、照片、计算机生成的报告、字处理文档、电子表格、演示文稿、语音和视频片段等非结构化数据的存储和访问服务。
主要功能:数据创建、数据存储、数据查询、数据更新、数据删除、数据安全、事务支持、数据备份/恢复。
(2)与其他层接口
1)数据库方式的数据层面向业务逻辑层提供数据库访问服务接口,业务逻辑层通过JDBC协议访问数据库服务。
2)文件方式的数据层面向业务逻辑层提供文件级的访问服务接口,业务逻辑层通过操作系统本身提供的文件访问API访问文件数据。
图3 MyFramework框架结构图
2.2 业务逻辑层
(1)层定义
业务逻辑层接受从表示层输入的用户请求,将其转化为业务逻辑过程能够理解的方式,根据特定的业务逻辑有序地向数据层发送数据请求,并将数据层返回的数据解释及组合成用户所需信息,返回给表示层,是整个应用软件系统中业务逻辑的实现和处理核心。业务逻辑层运行在基于J2EE应用服务器的EJB及WEB容器中。
(2)组件定义
业务逻辑层包含会话外观(Session Fa?ade)、逻辑Bean(Logic Bean)和和数据存取Bean(Data Access Bean)等三个逻辑组件。
1)会话外观
提供了面向表示层的统一的业务逻辑调用接口;是数据存取事务的边界,所有数据存取事务都由会话外观进行管理,即会话外观负责数据存取事务的开始和关闭。
业务逻辑完成方式:通过调用逻辑Bean实现业务逻辑。
2)逻辑Bean
提供了业务逻辑具体实现;具有可复用性:可以直接被会话外观调用,实现会话外观所需的业务逻辑;可以被其他逻辑Bean调用,此时此逻辑Bean作为一个更复杂的业务逻辑的一个组成部分。
业务逻辑完成方式:可以通过调用其他的逻辑Bean实现相对复杂的业务逻辑;可以直接调用数据存取Bean完成相对简单的业务逻辑。
3)数据存取Bean
提供了数据层的访问接口;不负责管理事务,它只是被动的使用调用者传入的事务环境;与数据库表的映射方式,通常采取单个数据表对应单个数据存取Bean的映射方式,由单个数据存取Bean包含对应单个数据表的所有相关数据访问操作。
4)值对象
包含业务逻辑实体的属性,不包括业务逻辑实体的操作;是表示层和业务逻辑层数据交换的主体单元,和会话外观一同组成了完整的业务逻辑实体,提供了业务逻辑层面向表示层的统一接口;与数据库表的映射方式,通常采取单个数据表对应单个值对象的映射方式;可以与不同类型值对象以聚合方式组成新的值对象。
(3)与其他层接口
1)由会话外观提供面向表示层的业务逻辑调用接口,表示层通过Java本地调用访问业务逻辑层。
2)数据存取Bean通过JDBC访问数据库服务。
3)数据存取Bean通过操作系统提供的系统服务访问文件数据。
2.3 表示层
(1)层定义
表示层接受用户提交的输入请求,通过对业务逻辑层的访问,获得并向用户输出可视化响应。
(2)组件定义
采用MVC设计模式,由Servlet提供页面请求和请求响应的总体控制,JSP和浏览器提供请求结果响应的可视化显示。
1)Servlet
接收所有用户由通过浏览器提交的业务请求,并合成相应的值对象,访问业务逻辑层完成业务逻辑实体的业务处理;将业务逻辑实体的变化以值对象的方式通知并转向相应的JSP。
2)JSP
根据Servlet告知的值对象,合成请求响应结果的最终输出格式化文本(HTML);将合成格式化文本以网络协议的方式发送给提交业务请求的用户浏览器。
3)浏览器
提供用户输入业务请求数据的输入界面,数据验证通过后提交业务请求;接收业务请求响应的HTML文本,将业务请求响应结果以可视化的访问呈现给用户。
4)WebService
是业务逻辑层对外部系统提供服务的边界和接口,完成和外部系统的集成和交互。
(3)与其他层接口
1)Servlet通过Java本地调用访问业务逻辑层。
2)浏览器通过HTTP/HTTPS协议向表示层提出业务请求并接收表示层的业务响应。
3、框架的配置文件
(1)系统初始化配置文件:web.xml
该文件是Controller专属的配置信息文件。控制器在第一次启动时需要从这个文件载入系统的配置信息。文件内容如下:
<servlet> <servlet-name>controlservlet</servlet-name> <servlet-class>mytools.control.web.ControlHan-dler</servlet-class> </servlet> <servlet-mapping> <servlet-name>controlservlet</servlet-name> <url-pattern>/controler</url-pattern> </servlet-mapping> |
(2)页面导航配置文件:web_config.xml
<?xml version="1.0" encoding="GB2312"?> <action name="XX" type="ActionClassName" method="methodName"/> |
web_config.xml文件是整个框架的重要部分,它控制了系统执行时的执行流程。该文件包括两种元素:<forwards>和<action-mappings>,其中<forwards>元素用来设置当前要转向调用的JSP页面,而<action-mappings>则设置了当前用户提交的操作要调用哪一个Action 类,及当前类中的哪个方法。
总结
WebFramework框架已经在一个航运管理项目中经过测试和检验,实践证明,此框架在中大型项目开发中,可以缩短开发周期,提高开发效率,系统运行稳定,易于维护。
有关应用开发框架的研究是一个不断深入,逐步完善的过程,在对WebFramework不断推广试用的基础上,还将进一步扩展其功能,使其应用领域更加广泛。