王 丹
(辽宁省交通高等专科学校,辽宁 沈阳 110122)
目前还有很多高校进行串调课时,仍然是教师填写申请单,然后需要分别到教研室、院系办公室和教务处签字,教务处再根据教室的使用情况进行调整,这样不仅效率低下,而且浪费了很多人力、物力。随着互联网的普及,开发一套网上串调课系统,教师在办公室或家里,就可以通过网上串调课系统进行申报,而教研室、系部和教务处等相关部门,也可以从网上进行审批,从而解决了上述的问题。
本系统采用当前比较流行的网络开发语言Java、基于MVC模式的Struts框架以及为了系统扩展的多层架构设计模式。下面针对本系统所采用的技术以及本系统的设计和实现进行说明。
MVC(Model-View-Controller)模式是由模型、视图和控制器组成的,被广泛地应用于大型可扩展的Web软件开发中,为交互式应用程序开发提供了结构化设计模型。基于“分而治之”的思想,使用户视图(View)、控制器(Controller)与模型(Model)分离开来,结构清晰,不仅能够有效地存储和展现数据对象中的功能模块,同时又大大降低了模块之间的耦合度。
在MVC模式中,传统的输入、处理和输出被映射到3个方面,即表现、业务和控制。模型由应用程序数据和业务规则组成,它是应用程序的核心,控制数据访问和数据更新。视图负责模型内容的表现,它从模型接收数据并决定数据显示形式。当模型发生变化时,它将通知视图保持数据的一致性。控制器负责受影响的模型和视图的动作和事件,它接收客户端请求并将它们映射到模型的实现操作,并返回结果到视图。在MVC处理中,每个客户端输入请求首先由控制器接收,控制器决定哪个模型处理它,然后,模型根据业务逻辑处理请求。最后,视图显示用户结果。
Struts是在J2EE平台上应用日益广泛的Web应用程序框架。Struts框架实现了模型—视图—控制器(MVC)设计模式,它将Model,View和Controller分别映射到Web应用系统中的组件,通过在Web页面中使用Struts框架定义的标签,实现页面表示层与数据层的分离,从而使页面更加简洁、易于管理。
模型包含业务逻辑,并与永久性存储进行交互,以存储、重新检索和操作数据。视图负责将结果返回给用户。在Struts中,视图层是使用JSP实现的。控制器处理来自用户的所有请求,并选择合适的视图返回。在Struts中,控制器的工作是由Action Servlet完成的。当Action Servlet收到请求时,将所有请求值捆绑到Java Bean类中,该类扩展了Struts Action Form类。决定要调用哪个Action类来处理请求。验证用户输入的数据。Action类在模型组件的帮助下处理请求。该模型与数据库交互并处理请求。在完成请求处理之后,Action类将一个Action Forward返回给控制器。
传统的客户/服务器(Client/Server,C/S)体系结构,在软件伸缩性、可管理性、安全性、软件重用性和资源形态上都难以满足要求。架构3层式软件开发体系结构,将数据处理逻辑或业务逻辑从两层结构中提取出来,形成中间业务层,中间层可能运行在不同于客户机的其他机器上,经过合理的任务划分与物理部署后,可使得整个系统的工作负载更趋均衡,从而提高整个系统的运行效率。
由于Struts框架很好地实现了MVC的设计模式,本系统设计中,以Struts所框架作为基础,连接前台显示层和后台的业务层。在业务层和数据之间,本系统专门设计了数据访问对象(Data Access Object,DAO)层,把业务层和数据库具体操作分开,这样不仅提高了开发效率,并且易于维护。
本系统共划分了5层:HTML/JSP/Servlet为操作界面显示层;Struts Action为逻辑控制层;业务对象为业务层;DAO数据访问层;关系数据库。
在技术结构设计的基础上,对串调课系统的业务进行分析,得出了串调课系统结构,如图1所示。
图1 系统结构
串调课系统从用户操作界面的角度分为5部分:登录、基本信息、串调课管理、系统管理和消息管理,它们分别通过Struts Action与业务对象进行交互。由于登录部分的业务对象放在了系统管理中,因此在系统结构图中,业务对象少于操作界面层。
由于Structs Action设计非常固定,而数据库设计符合第三范式即可,因此下面主要从操作界面、业务对象和数据访问3方面的实现,进行详细说明。
B/S结构的操作界面基本是Html/JSP/Servlet,其中JSP是最常用,并且是最多的。JSP的各种标签,如按钮、文本框、下拉框等,为了保持它们的界面风格统一,本系统采用自定义标签,定义属性文件,当然也可以采用Struts提供的一些标签。
在系统中,除了对界面风格提供了属性配置文件外,并为了最大限度地减少JSP页面中的Java代码,对JSP页面中的操作进行了封装。现在以基本信息中内部职员为例进行说明,建立一个内部职工信息页面:personlist.jsp,该网页包含3个通用网页:common.jsp,list_tool_top.jsp和list_data.jsp。
common.jsp页面中导入了常用类、Struts标签、自定义标签、页面CSS样式文件、JavaScript函数文件和共同变量等。list_tool_top.jsp包含了查询、删除、保存、修改、排序等通用操作的逻辑处理,界面操作按钮、分页和操作类型的标签等。list_data.jsp文件主要用于数据显示的功能。
personlist.jsp除了包含上述3个文件外,还需要定义本功能模块Action的target。因此,personlist.jsp作为一个完整功能模块的数据操作界面,需要编写的代码行数仅有10行左右。
业务对象(Business Object,BO)是对真实世界的实体软件抽象,它包含数据和行为,它们对应着数据库中的一条或多条记录,尽管不同业务之间的差距非常大,但是它们都共享一些公共的属性,例如版本号、描述、操作者、操作时间、表名、列数等。
在本系统中由于涉及多个业务对象:如系部、专业、内部职员、串调课等,因此定义了一个抽象父类Base Business Object,它包含了业务对象所用到的公共属性,所有的业务对象都必须继承此父类。如果涉及后续串调课系统的调整或内容增加,还可以对该类进行扩充。
由于在本系统中,由于所有的业务对象都需要访问数据库,因此在本系统中引用了DAO设计模式,DAO模式提供了访问关系型数据库系统所需的所有操作接口,DAO模式将底层数据访问操作与高层业务逻辑分离开,对上层提供面向对象的数据访问接口。
本系统设计了Data Access Object类,它封装了所有的数据库的操作,并且使用连接池,提高系统的性能。并且通过读取配置文件,可以设置不同的数据库驱动,连接不同的数据库,例如SQL Server,Oracle,MySQL等,使系统具有了通用性,在不同的数据库之间实现无缝转换。
本串调课系统虽然是一个相对简单的网络应用系统,但它的最大特点是不仅采用了当前非常流行的网络开发技术,并且应用了MVC和DAO等多种设计模式,把串调课系统的具体业务和网络应用通用功能进行了区分,并对通用功能进行了封装,形成了一个通用框架,不仅易于维护,还可实现代码重用,可以对类似网络应用系统开发作为参考和借鉴。