梁俊杰,曾显峰,黄晓君,何花燕
(广东外语外贸大学南国商学院,广州 510545)
基于B/S的毕业论文管理系统实现关键技术研究
梁俊杰,曾显峰,黄晓君,何花燕
(广东外语外贸大学南国商学院,广州 510545)
为了实现高校毕业论文管理水平的高效化和网络化,采用ASP.NET开发技术,设计基于B/S模式的毕业论文管理系统。着重解析系统开发中的几个关键技术:数据库访问、AJAX无刷新技术、防止脚本注入式攻击等技术。在实际的开发过程中证明,这些关键技术的应用,显著地提高大学生毕业论文管理系统的实用性能和安全性能。
毕业论文;B/S模式;AJAX;注入式攻击
毕业论文/设计是培养学生运用综合知识与技能,独立完成的一个项目活动,是教学活动的重要组成部分之一。随着本校的教学规模逐渐增加,每年的毕业之际,需要处理的毕业论文的信息量成倍地增加。而校外实习的学生同时要进行毕业论文的设计,学生与导师在毕业论文选题、评阅、指导方面存在时间空间的冲突,传统的毕业论文管理方式已经不能满足当前的实际需要,迫切需要找到一个适合我校的高效管理毕业论文的方法。在广东省“大创”项目基金的支持下,项目小组设计并完成了基于B/S模式的毕业论文管理系统,系统实现了毕业管理工作的绝大部分需求功能,如毕业论文的上传与下载、学生信息查询、导师在线评阅、选题管理、公共发布等功能。本系统借助了网络平台,不但让学生与教师可以进行有效的沟通,学生可以及时地了解有关毕业论文的相关动态,而且使论文的上传查看、信息的管理、用户的管理和数据库的管理等工作更加简便。利用实用性和操作性强的毕业论文管理系统来管理毕业论文,既提高了管理的工作效率,也降低了管理的成本,进而实现高校毕业论文管理水平的高效化和网络化。
大学生毕业论文管理系统的主要使用对象是毕业季学生、论文导师、系部管理员和系统管理员。系统根据角色划分为学生模块、教师模块、管理员模块及公共模块[1],本系统总体功能如图1所示。
(1)登录模块
登录模块是大学生毕业论文管理系统的一个公共模块,采用统一登录界面使登录保持简单和独立性。学生、指导老师、管理员通过统一的等级界面验证身份,采用C#ADO.NET技术验证用户登录,根据用户身份选项识别以进入不同的页面。为了防止SQL注入式攻击,系统在登录过程中采用危险字符清除函数。增加验证码验证模块,以此降低用户密码被暴力破解的可能性。具体功能如图2所示。
(2)学生模块
图1 系统功能结构图
学生模块包括五个基本功能:信息查看、选题提交、收发留言、密码修改、论文上传下载。本模块的核心功能是文档上传下载功能。当学生选题通过时才能获取论文上传的权限。本系统利用FileUpload控件进行文件上传操作,默认情况下,上传文件大小限制为4MB,本系统通过设置httpRuntime元素的maxRequestLength属性来允许上载10MB的文件,且文件上传在编码时限制了上传文档的格式和文件的大小,只接受doc、pdf、txt格式且大小不能超过10MB的文档。通过调用PostedFile属性获得一个与上传文件相关的HttpPostedFile对象属性以此进行上传,提交后文档将被保存在预先设置的文件路径,数据库只保存文件的文件名和存放路径等信息。模块具体实现界面如图3所示。
图2 系统登录页面
图3 学生模块页面
(3)管理员模块
本系统设置多个管理员,按权限分为系统管理员和系部管理员两个级别。系统管理员拥有最高管理权限,负责宏观管理系统。系部管理员权限在系统管理员之下,负责日常事务处理。管理员模块包括七个基本功能,分别是学生信息查询、学生管理、教师管理、论文导师分配、公告发布、选题管理以及留言管理[2],其中学生信息查询和论文导师分配为关键功能。
学生信息查询功能通过对Paper数据库student表进行模糊查询,将得到数据储存到SqlDataSource中,在前台绑定GridView进行数据显示。系统通过获取ListBox数据确定论文导师,以此更新后台数据库student表,实现论文导师分配功能。模块具体实现界面如图4所示。
图4 系统管理员页面
(1)访问和操作数据库
当系统成功连接数据库后,就可以通过Command命令来对数据库发出具体的操作指令,例如对数据库进行增加、删除、查询、更改等操作。Command对象有三个执行方法,分别是ExecuteNonQuery、Execute Reader和ExecuteScalar。ExecuteNonQuery多用于执行增加、删除、更新数据。返回受影响的行数。ExecuteReader为执行查询语句,给SqlDataReader对象一个可以访问查询到的结果的渠道。ExecuteScalar的返回值类型多为int类型。它返回的多为执行select查询。登录功能本质就是查询数据库操作,下面以本系统登录功能为例,演示查询数据库操作,具体代码如下:
(2)ADO.NET并发更新冲突的解决
①并发更新冲突的产生原因
ADO.NET并发更新冲突是使用ADO.NET对数据库中数据进行操作时最常见的问题之一,出现根本原因是两个或更多的用户尝试同时向同一条记录的一个或多个字段提交冲突的值。ADO.NET通过把数据的副本读取至客户端,断开连接的方式减少服务器负载,提高系统性能,但容易引起多个用户同时修改一条记录产生数据并发异常。
②并发更新冲突解决方法
用户A和用户B同时对后台数据库修改了相同的数据行,出现了并发更新冲突。假设用户A先执行了update操作并成功将数据更新提交到后台数据库,需要解决的是后面提交修改的用户B如何处理并发更新冲突。并发更新冲突解决原则应是以最新的数据更新为准,解决方案应是用户B不考虑用户A的修改,直接将数据提交到后台数据库中。具体的操作方法是调用用户B的datatable.Merge方法把当前数据库的新值合并到datatable的原始表中去,实现被修改的行的原始值与当前数据库匹配,接着调用DataAdapter.Update使用用户A提交的数据更新数据库[3],通过直接将数据提交到后台数据库解决并发更新冲突。
(3)AJAX无刷新技术
AJAX无刷新技术能够异步取回服务器端的数据,不会在等待状态限制用户,也不会打断用户的操作,提高网站的响应且不会因为PostBack使整页重新加载,实现Web页面的局部更新,使用户不需要每次都刷新页面来查看更新的部分数据,改善了用户页面操作体验[4]。
本系统管理模块多处用到了此技术,如学生信息查询模块。系统通过利用AJAX控件的UpdatePanel(局部更新面板)控件,与ScriptManager(脚本管理员)控件配合使用,用简单的代码就实现了异步通信功能。管理员无论使用模糊查询或精确定位查询,当查询条件有所变化,AJAX无刷新技术能在下方的表格实时更新数据,而不需要再次刷新。系统利用UpdatePanel控件实现局部更新时,必须初始化一个回发动作,配合使用AJAX的Timer控件能够每隔一段时间自动完成一次完整或局部页面的刷新,但需要注意的是Timer控件可能会增加Web应用程序的负载。因此,在引入自动回发前加入Timer控件十分必要,但间隔时间设置太短将会导致页面回发频率增加,加大服务器流量,因此应尽可能把间隔时间设置得长一些。
(4)防止脚本注入式攻击技术
本系统通过使用MD5加密、替换单引号和权限隔离的方法防止SQL注入式攻击,然而当用户登录时,还可能存在恶意脚本攻击的问题,例如,如果用户在表单中输入