摘要 Struts提供了一个非常好的MVC框架,在Web应用开发中把界面和业务逻辑分离,提高了代码的可重用性和灵活性。文中首先介绍了Struts概念和体系结构,阐述了Struts的工作原理。然后介绍了小区物业管理系统各个功能模块以及整个系统基于Struts的开发流程。最后,通过一个应用示例,详细介绍了Struts框架在系统开发中的应用。
关键词 MVC;Struts框架;Web;物业管理系统;
前言
物业管理系统是近年来为适应小区建设和管理而兴起的一种新型产业,它的出现为住宅小区的现代化管理提供了保障。目前,物业管理系统的开发方法很多,但多数系统在开发中存在系统结构复杂、代码重用率低、网页设计和软件开发相互制约导致开发效率低下等不尽人意的地方。在系统设计过程中,我们综合考虑系统结构、开发周期以及代码重用等方面,决定采用先进的J2EE技术来开发这个应用系统,并全面贯彻MVC(Model-View-Controller)的开发模式。而Struts作为一个实现良好的MVC框架,很好地将应用逻辑、处理过程和显示逻辑分成不同的组件实现,对大型的复杂的Web系统而言,可大大方便代码开发和管理,提高开发效率。正是鉴于此特性,在设计小区物业管理系统时,我们采用了基于Struts框架的系统构建模式。
Struts的体系结构
作为一个实现良好的MVC框架,Struts对Model、View和Controller都提供了对应的实现组件,图1所示为Struts体系结构图。下面从模型、视图、控制来介绍Struts的体系结构。
图1 Struts构体系结图
视图(View)就是一系列提交到客户浏览器进行显示的JSP文件,是用户看到并与之交互的界面。在这些界面中没有业务逻辑,也没有模型信息,只有标签。
模型(Model)表示应用程序的状态和业务逻辑,通常由JavaBean或EJB组件来实现。
控制器(Controller)的作用是从客户端接受请求,并且选择执行相应的业务逻辑,然后把响应结果送回到客户端。在Struts中Controller由ActionServlet类和Action类来实现。ActionServlet主要负责接受HTTP请求信息,Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。
小区物业管理系统
1、系统功能划分
小区物业管理系统是物业部门用来对住宅小区内的建筑、住户、设备、人员等信息进行综合管理的一个信息管理系统。根据客户要求,系统要能对小区内建筑、公共设备、住户等基本信息实现录入、修改、查询和删除等操作,并且还要实现包括水、电、煤气费在内的各项物业管理费用的统计、查询和报表生成。因此,实现该物业管理系统功能模块图如下:
图2 系统功能模块图
各模块实现的功能如下:
(1)系统管理模块
系统管理模块是整个物业管理系统的核心,在区分不同用户的使用权限、加强软件使用安全性和保证数据安全方面起着关键的作用。具体包括:用户管理、用户授权、更改密码、系统设置、系统初始化、数据库备份、恢复这几个子模块。
(2)住户管理模块
该模块完成对新增住户基本信息(姓名、人口、住房面积等)的登记和已有住户信息的修改、查询和删除,是系统最基本的功能。该模块具体又分为住户登记、住户修改、住户修改、住户查询和住户删除四个子模块。
(3)设备管理模块
该模块实现对小区内各项公共设备(如:路灯、排水管等)的管理,为各项设备建立信息档案,记录各设备检查\维修\保养记录。具体又分为设备登记、设备报修、设备检查和设备保养这四个子模块。
(4)房产管理模块
该模块主要是针对小区内的建筑,实现对小区内每一栋建筑、每栋建筑内的每套住房进行管理,考虑到业主对每个单元的买卖变更,该模块还应该包括住房房产所有权的管理。该模块具体分为:建筑图纸管理、户型图纸管理、房产所有权管理等。
(5)人事管理模块
该模块主要是针对物业管理部门内部的工作人员的,实现对物业管理人员、保安/保洁人员的管理。包括:员工信息录入、查询、工资管理、员工考勤记录和员工考核记录这几个子模块。
(6)收费管理模块
该模块主要实现对已经入住的住户进行费用(物业管理费、水费、电费和煤气费)缴纳的各方面管理,具体包括以下几个部分:收费类别设置、收费项目设置、计量单位设置、表设置、用户抄表、应收款和收款单等。
2、系统开发流程
采用B/S模型的多层框架结构开发的小区物业管理系统,MVC模式主要对应应用服务器的部分,前端响应用户的请求,后端负责与数据库服务器之间的数据变换,中间为应用逻辑层,负责具体业务的处理。现依据Struts框架的3个基本组成部分:视图、模型和控制器,简要描述系统的设计过程[4]。
(1)视图设计
应用系统的用户界面通常由JSP页面组成。在系统的六个模块中,各类信息的添加、删除、修改和浏览都通过JSP页面进行表现。系统在处理每个数据表示主要是用两个JSP页面进行表示:一个页面用于数据的添加、删除、修改,另一个页面用于数据的浏览。
(2)构建模型
Struts应用框架通常预先为每个应用所需要的输入表单创建一个ActionForm Bean。如果这些bean定义在ActionMapping配置文件中,Struts控制器Servlet将自动执行这些预先设定的操作。因此,在系统开发中,首先为每个模块建立相应的ActionForm Bean,再根据每个模块的实际功能为每个Bean定义用户操作状态和视图中所需要显示数据信息的参数,视图可以通过操作状态的不同进行不同的界面表示。
(3)构建控制器
在Struts应用框架中,中心控制器(ActionServlet)接受所有来自客户端的请求,并根据系统的配置文件Struts-config.xml制定用户HTTP请求到其他Action对象的路径。中心控制器是由Struts框架本身所提供,在系统开发中我们无须对ActionServlet进行再开发,而负责具体业务处理的Action类则是系统开发的重点。
在视图、模型、控制器对象设计完成后,需要编辑两个配置文件:web.xml和struts-config.xml,通过它们配置Struts系统中各个模块之间的交互。
Struts框架在系统开发中的应用
小区物业管理系统是一个复杂的大型Web应用系统,为了能够清楚地描述Struts在系统开发中的应用,本文将以收费管理模块中用户成功登入系统并进行数据录入和查询这一应用为例进行较详尽的说明。
1、分析应用需求
在该应用中,主要事件包括:
(1)提供用户登录界面,提示用户输入用户名和密码,并能够对用户在客户端输入的数据进行简单的数据格式验证。若登录成功,转入主操作界面,否则给出错误提示信息,重新登录。
(2)由主操作界面转入物业管理费录入界面,用户在表单中输入相关信息(用户ID、日期),提交表单。若提交表单成功,则转入确认界面,显示用户输入的信息。
(3)由主操作界面转入查询界面,用户输入相关信息后,查询出某段时间内该用户的物业管理费用。
(4)用户退出系统,返回主菜单页面。
2、该应用的具体设计
2.1 数据库设计
针对该应用,需在数据库中创建两张表:PORPERTY_TABLE和USER_TABLE,各表结构如下:
表1 USER_TABLE
字段
类型
说明
UserName
char(25)
记录登录到系统的用户名
Password
char(25)
记录登录用户的登录密码
表2 PORPERTY_TABLE
字段
类型
说明
OwnerID
char(8)
记录唯一表示每个用户的ID
Date
datetime(8)
记录缴费日期
RAre
float(8)
记录用户的房屋面积
Charge
float(8)
记录应该缴纳的物业管理费
FeeState
char(20)
显示用户是否缴费
2.2 设计模型组件
在Struts框架中,模型组件负责完成业务逻辑。在该应用中,模型组件包括一个实用类DbConnect和两Jave Bean:UserBean和PorpertyBean。
实用类DbConnect负责建立和数据库的连接,所提供的connectToDb()方法具体来实现和数据的连接并返回这个连接。UserBean代表用户信息,包括UserName和Password这两个属性。PorpertyBean代表物业费用信息,包括OwnerID、Data、OwnerName等几个属性。这两个JavaBean提供了相应的get/set方法,此外还负责查询以及向数据库中对应的表添加/查询记录。
2.3 用户界面设计
用户界面是Web应用和用户的窗口,既可以接受用户的输入信息也可以向用户输出信息。表3列出了该应用中用到的用户界面及其说明。
表3 用户界面及其说明
界面
说明
Welcome界面(index.jsp)
显示欢迎光临信息,提供到登入界面的链接
登入界面(logon.jsp)
提示输入用户名和密码
主操作菜单界面(mainmenu.jsp)
提供系统所有操作菜单
物业收费数据录入界面(input.jsp)
提示输入有关物业费用相关信息
收费确认界面(confirmation.jsp)
根据用户录入的信息返回该用户物业费用的所有信息(如:应缴的费用,是否已缴费等)
物业费查询界面(search.jsp)
提供用户输入相关查询条件
显示查询结果界面(display.jsp)
根据用户查询条件显示查询结果
为保持该应用中所有界面风格的一致性,在设计上述这些界面的过程中,我们除了使用标准的JSP<include>语句外,还使用了Struts的Titles框架来创建复合式的JSP页面,使所有界面具有相同的页头和页脚。
2.4、设计ActionForm
ActionForm Bean用于在视图组件和控制器组件之间传递HTML表单数据。通常每个HTML表单对应一个ActionForm Bean,每个ActionForm的validate( )方法用于实现对用户输入数据进行格式和语法检查。在该应用中包含三个ActionForm Bean:LogonForm、InputForm和SearchForm。
2.5、设计Action和Action映射
在Struts框架中,Action实现各个事件的流程控制,Action映射决定Action与其他web组件之间的关联关系。表4列出了该应用中用到的Action、每个Action的入口(调用Action的组件)、传递给Action的ActionForm以及每个Action把请求转发到的目标组件即出口。
表4 该应用中的Action
Action
入口
ActionForm
出口
LogonAction
logon.jsp
LogonForm
mainmenu.jsp
InputAction
input.jsp
InputForm
confirmation.jsp
SearchAction
search.jsp
SearchForm
display.jsp
LogoffAction
mainmenu.jsp
无
index.jsp
图3给出了该应用中Action组件与其它组件的映射关系图。
图3 Action映射图
上述所有Action组件需要在Struts的配置文件struts-config.xml中配置其映射关系。
应用Struts框架的优点
(1)整个物业管理系统包括上百个文件,若采用传统的结构,要弄清楚某个视图是使用什么模型来处理逻辑是件很复杂的事。而采用Struts框架来开发的应用系统,依靠JSP和Struts-config.xml以及它们间的统一命名规则却很容易地进行系统流程的查勘、修改和理解。只要根据视图Form表单的Action,在配置文件中找到同名的Action定义,就可以得知其路径以及相应的FormBean。
(2)Struts中所有逻辑处理都封装在class内,视图部分不再介入逻辑的处理,计算和显示清楚地分开了,在JSP页面上没有出现处理过程,在Servlet或商业逻辑中没有数据格式。并且基于Struts框架开发出的JSP代码也很简洁,JSP页面中不含有Java代码,只含有Script和使用Struts标签库的HTML,页面开发人员不必为修改视图而必须先理解模型,很大程度上提高程序开发效率。
结束语
Struts是一个实现良好的MVC框架,在现代软件开发中,越来越多的应用于大型Web应用系统的开发。基于Struts框架的小区物业管理系统的顺利开发,也证实了Struts框架是一种非常优秀的J2EE/MVC实现方式。该物业管理系统将为小区物业管理部门提供一个全新的工作环境,给物业管理的日常工作带来了极大的方便,提高了工作效率,具有很好的推广价值和应用前景。