基于MySql的实验室预约管理系统设计_第1页
基于MySql的实验室预约管理系统设计_第2页
基于MySql的实验室预约管理系统设计_第3页
基于MySql的实验室预约管理系统设计_第4页
基于MySql的实验室预约管理系统设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子信息工程专业专业综合课程设计基于MySql的实验室预约管理系统设计学院(系):信息与通信工程学院专业:电子信息工程姓名学号:指导教师:完成日期:2016年11月17日大连民族大学-PAGEII-目录摘要 11设计概述 11.1 开发背景 11.2 B/S模式 11.3 主要技术 21.3.1Ajax简介 21.3.2Cookie简介 31.3.3JSP介绍 41.4 项目环境及工具 51.4.1运行环境 51.4.2开发工具 51.4.3映射工具 61.5 系统总体结构图 62总体设计 72.1数据库设计 72.1.1学生信息表 72.1.2教师信息表 72.1.3管理员信息表 82.1.4班级信息表 82.1.5实验信息表 92.1.6实验室信息表 92.1.7教师安排实验信息表 102.1.8实验室预约信息表 102.1.9实验报告上传信息表 122.2系统功能实现 132.2.1用户登录 132.2.2学生用户 132.2.3教师用户 202.2.3管理员用户 242.3部分核心代码 272.3.1Ajax部分代码 272.3.2数据库连接部分代码 282.3.3上传文件部分代码 292.3.4下载文件部分代码 303系统测试 323.1功能测试 323.1.1链接测试 323.1.2设计语言测试 323.1.3数据库测试 323.2性能测试 323.2.1连接速度测试 323.2.2压力测试 333.3可用性测试 333.3.1内容测试 333.3.2整体界面测试 333.4安全性测试 334总结 33参考文献 35-PAGE1-摘要 该系统是基于大学规模扩大和学生人数不断增加的前提下设计的。由于随着大学和社会对大学生动手能力的要求提高,传统的由老师预约带学生做实验的现象已经不再适合当今大学生。该系统针对此现状通过网页的形式在学生、教师、管理员三种用户下运行。 学生用户下:学生可以单独预约,自己进行学习实验和研究性实验,实验完成报告可以马上提交;教师用户下:老师可以为班上学生预约整个实验室,也可以单独预约,对学生的实验报告进行批改;管理员用户下:管理员可以对教师学生信息进行管理,还可以对实验室信息进行增删该查。关键词:实验预约;数据库;网站-PAGE36-1设计概述开发背景在传统试验中,由老师替班级预约实验,然后整个班级在老师的带领下进行相应的实验,这样就导致学生的动手机会仅仅局限于实验的要求。在自己有想法,想进行研究性试验时,根本无法接触相应的实验器材,就更谈不上实验了。传统的实验模式,导致了这样的一个现象,在某段时间实验室的使用率非常高,实验室的有限甚至导致一些班级的实验推后;而在某段时间之中,实验室几乎无人利用。这样的现象造成资源的分配利用不合理。本系统的初衷就是针对此现状,实现以学生,教师,管理员三种用户模式登录系统,学生可以预约教师安排的实验,可以在实验室空余的时候预约自己的研究性实验。教师用户也有相应的功能,而且学生的实验报告可以在线提交由老师审阅。方便了实验教学。综上所述,这样的实验预约系统可以实现资源的更加合理利用。B/S模式本系统采用B/S模式,下面对B/S进行简单介绍。B/S结构图B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser英['braʊzə]美['braʊzɚ]),如NetscapeNavigator或InternetExplorer,服务器安装SQLServer、Oracle、MYSQL等数据库。浏览器通过WebServer同数据库进行数据交互。B/S模式具有如下优点:(1)B/S模式具有很强的开放性。(2)B/S模式的结构易于扩展(3)B/S模式具有更强的信息系统集成性(4)由于Web的平台无关性,BS模式结构可以任意扩展,可以从一台服务器、几个用户的工作组级扩展成为拥有成千上万用户的大型系统。(5)B/S模式借助Internet强大的信息发布与信息传送能力可以有效地解决企业内部的大量不规则的信息交流。(6)在B/S模式下,集成了解决企事业单位各种问题的服务,而非零散的单一功能的多系统模式,因而它能提供更高的工作效率。主要技术考虑到系统的复杂性,以及知识的有限性,该系统未采用框架技术。采用的标准是html、css,JSP,使用的语言是javascript,运用到ajax、cookie等一些知识。逻辑业务层采用的是java语言编写。数据库采用MySql数据库。以下对这些技术做一些简介。1.3.1Ajax简介Ajax并不是一个新生的语言,它是一系列语言的结合体:HTML/XHTML、CSS、DOM、XML、XSLT、XMLHttp、JavaScript。可以说Ajax涉及的知识面的确是很广的,在Web开发中为我们提供了很方便的交互式用户体验模式。以往我们浏览网页的原理是由Client向Server提交页面申请,再由Server将申请通过HTTP传回给Client生成浏览页面:使用Ajax后的工作原理如下图,可见通过Ajax在用户交互方面有了很大改进,用户可以不用为提交了Form而长时间等待服务器应答,而且通过Ajax也可以开发出华丽的Web交互页面。Ajax具有以下优点:(1)优点:减轻服务器的负担,按需取数据,最大程度的减少冗余请求

(2)局部刷新页面,减少用户心理和实际的等待时间,带来更好的用户体验

(3)基于xml标准化,并被广泛支持,不需安装插件等

(4)进一步促进页面和数据的分离1.3.2Cookie简介Cookie使用HTTPHeader传递数据。Cookie机制定义了两种报头:Set-Cookie报头和Cookie报头。Set-Cookie报头包含于Web服务器的响应头(ResponseHeader)中,Cookie报头包含在浏览器客户端请求头(ReguestHeader)中。Cookie的运行过程如图所示,具体分析如下Cookie的运行过程图(1)客户端在浏览器的地址栏中键入Web服务器的URL,浏览器发送读取网页的请求。(2)服务器接收到请求后,产生一个Set-Cookie报头,放在HTTP报文中一起回传客户端,发起一次会话。(3)客户端收到应答后,若要继续该次会话,则将Set-Cook-ie中的内容取出,形成一个Cookie.txt文件储存在客户端计算机里。(4)当客户端再次向服务器发出请求时,浏览器先在电脑里寻找对应该网站的Cookie.txt文件。如果找到,则根据此Cookie.txt产生Cookie报头,放在HTTP请求报文中发给服务器。(5)服务器接收到包含Cookie报头的请求,检索其Cookie中与用户有关的信息,生成一个客户端所请示的页面应答传递给客户端。浏览器的每一次网页请求,都可以传递已存在的Cookie文件,例如,浏览器的打开或刷新网页操作。1.3.3JSP介绍 (1)JSP简介JSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]

是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。它实现了Html语法中的java扩展(以<%,%>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。JSP(JavaServerPages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。 (2)JSP原理 如JSP原理图所示,JSP执行原理如下:第一次执行:①客户端通过电脑连接服务器,因为是请求是动态的,所以所有的请求交给WEB容器来处理②在容器中找到需要执行的*.jsp文件③之后*.jsp文件通过转换变为*.java文件④*.java文件经过编译后,形成*.class文件⑤最终服务器要执行形成的*.class文件第二次执行:①因为已经存在了*.class文件,所以不在需要转换和编译的过程JSP原理图项目环境及工具1.4.1运行环境(1)操作系统:windows。(2)系统类型:64位操作系统。(3)运行内存(RAM):6.00GB。1.4.2开发工具(1)Dreamweaver全称AdobeDreamweaver,简称“DW”,中文名称"梦想编织者",是美国MACROMEDIA公司开发的集网页制作和管理网站于一身的所见即所得网页编辑器,DW是第一套针对专业网页设计师特别发展的视觉化网页开发工具,利用它可以轻而易举地制作出跨越平台限制和跨越浏览器限制的充满动感的网页。本项目使用此编辑器制作前端页面。(2)EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。在本项目中,此工具主要用于sevlet以及jsp页面的一些代码编写,以及项目的运行发布。1.4.3映射工具ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析和重放。本项目采用ngrok映射工具,将内网映射,实现在外网访问项目的功能。系统总体结构图整个项目是建立在学生,教师,管理员三个用户模式上的,每个用户模式对应如下功能。2总体设计2.1数据库设计本系统对应数据库名称为lab_book,一共建有9个数据表,分别为class_name、lab_cr_name、lab_name、man_info、stu_info、stu_tea_book_info、tea_anpai、tea_info、upload。2.1.1学生信息表(1)表名称:stu_info,该表用来存储学生的基本信息,供登录时验证所用。(2)字段介绍:id数据表主健,自动增长name学生姓名字段identity身份信息,学生为studentsex学生性别class学生所在班级名称,如电子136班psw学生登录系统时所用密码username对应学生的学号email学生常用邮箱 2.1.2教师信息表 (1)表名称:tea_info,该表存储的时教师个人基本信息。 (2)字段介绍 教师信息表的字段含义与学生信息表(stu_info)字段含义相同,此处不在赘述。2.1.3管理员信息表 (1)表名称:man_info,该表存储的时管理员的个人信息。 (2)字段介绍 管理员信息表的字段含义与学生信息表(stu_info)字段含义相同,此处不在赘述。2.1.4班级信息表 (1)表名称:class_name,该表用来存储有班级与教师的对应信息,也就是教师所在的任课班级记录,这个表的操作由管理员完成。功能界面里请选择班级的select标签。其异步加载的数据就是从这个表中通过tea_username获取的对应班级。 (2)字段介绍id数据表主健,自动增长class_name班级名称tea_username教师的用户名,不是教师姓名2.1.5实验信息表 (1)表名称:lab_name,该表是用来存储实验与教师的对应信息。学生用户登录,进行实验的预约时,功能界面里请选择实验名称的select标签。其异步加载的数据就是从这个表中通过class字段获取的对应实验名称,即lab_name字段信息。 (2)字段介绍id数据表主健,自动增长lab_name实验名称,由教师添加class班级名称tea_username教师的用户名2.1.6实验室信息表 (1)表名称:lab_cr_name,该表用来存储实验室信息。该表的数据是有管理员添加的,字段中的实验名称指的是当前学校所可用的实验室,该表是为了ajax加载数据所建的。 (2)字段介绍id数据表主健,自动增长lab_cr_name实验名称,由管理员添加2.1.7教师安排实验信息表 (1)表名称:tea_anpai,该表存储的是教师为学生安排的实验信息。 (2)字段介绍id数据表主健,自动增长lab_week实验对应的星期lab_cr_name实验所在的教室名称lab_name实验名称lab_tea实验对应的教师lab_addr实验地址xingqi实验对应的星期jieshu实验对应的第几节课username用户名(暂未使用)name姓名(暂未使用)class实验对应的班级名称2.1.8实验室预约信息表 (1)表名称:stu_tea_book_info,教师和学生所预约的实验信息都会详细的存储在这张表里面,实验信息的查询修改就是遍历这张表的数据信息。 (2)字段介绍id数据表主健,自动增长name预约此实验的用户姓名identity预约此实验的用户身份sex预约此实验的用户性别class预约此实验的用户所在班级username预约此实验的用户学号或者用户名lab_week所预约实验的实验周数lab_cr_name所预约实验的实验室名称lab_name所预约实验的实验名称lab_tea所预约实验的实验教师lab_addr所预约实验的实验地址jieshu所预约实验的实验节数(第几节)xingqi所预约实验的实验星期(星期几)for_class如果是教师预约,此字段为教师为那个班级预约实验的班级名称2.1.9实验报告上传信息表 (1)表名称:upload,存储的是上传实验报告时用户以及报告的一些信息。在实验报告下载界面,将从此表中获取文件的存放路劲以及文件的文件名等,这样才能实现文件的下载。 (2)字段介绍id数据表主健,自动增长filename上传的实验报告的文件名称,包括后缀名savename上传成功后保存的文件名称(文件同名处理后的文件名)floader1保存文件所在的第一级文件夹名称floader2保存文件所在的第二级文件夹名称stu_username上传实验报告的学生学号stu_class上传实验报告的学生的班级lab_name上传的实验报告对应的实验名称date上传时间tea_username上传的实验报告所对应的教师用户名postfix上传的文件的后缀名称tea_name上传的实验报告所对应的教师姓名2.2系统功能实现2.2.1用户登录 用户登录界面是login.jsp,运行截图如图(1.1)所示。 登录界面主要部分为学号,密码输入框,身份选择是一个select.提供学生、教师、管理员三个选项进行选择,登录按钮是一个submit。提交表单到loginServlet进行处理。在loginServlet查询数据库信息与表单数据进行匹配,匹配成功则登录成功,跳转到index界面(index界面是后台整个系统的一个框架页面)。同时在loginServlet中将对成功登录的用户信息用session进行保存,方便后续操作的调用。图(1.1)2.2.2学生用户如图(1)所示,学生用户模式分为实验预约,班级预约实验,预约信息修改,实验报告管理,登录密码修改5个功能。下面将对5个功能分别解释。(1)实验室预约实验室预约界面为Stu_book.jsp,运行截图如图(2.1)所示。图(2.2)页面分为上下两个div,上面的div主要是下拉框以及一些输入框,预约前进行选择,实验周数位1到18周,实验名称下拉框数据为管理员所添加此处采用ajax动态加载数据库中的数据到此下拉框。实验名称为所在班级对应实验,其中数据也是ajax动态加载。任课教师与实验地址为选填内容,如果为学生自己预约的研究性实验,可以不填写,如果为实验教师安排实验,其内容将填写为老师安排的实验信息。下面的div里面放的是一个table,并放有84个checkbox;选择每个checkbox就可以选择了对应的实验周数以及星期。上面的div里面的三个seclect框设置有下拉事件,用javascript对其值得改变做判断,如果改变了,就动态获取数据库的内容,如果数据库里面有相对应的记录,则checkbox为选中状态,且不可编辑,前面的“未选择”利用innerHTML换为已选择,字体设为红色,这些都是由ajax技术实现。点击预约信息,在javascript获取选择的实验信息,将影藏的div的display属性设为“display”,显示当前选择的信息,供预约用户方便查看。体检预约按钮是一个button,它以如下方式提交数据document.form1.action="${pageContext.request.contextPath}/seize?method=post";document.form1.submit();seize是一个servlet,以post方式提交,在此servlet中,将通过getParameter接收表单数据,其中周数与星期信息,全部设置在checjbox的id里面,以影藏表单hidden传递。通过session获得保存的用户信息,然后写入数据库,弹出“Success“提示预约成功,页面跳转到当前页面。(2)班级预约实验班级预约实验界面是Class_book.jsp,运行截图如图(2.2)所示该页面只是一个查询页面,查询的是对应班级的老师的实验安排,学生不能对其进行修改,只能查看。它的实现就是对数据表的一个遍历(以下的查看功能都是一种数据遍历,不再赘述),得到对应班级的实验数据,动态创建表格显示数据图(2.2)(3)预约信息修改预约信息修改界面为Stu_info_change.jsp页面,运行截图如图(2.3)所示。图(2.3)该页面也是一个查询页面,它的功能是对学生自己预约的实验信息进行查看修改删除。修改与删除都有对应的Servlet进行处理。点击修改,将在数据表格的下面显示一个影藏的div,并且获取此行的数据传入相应的text中显示,点击确认修改实现数据的更新,删除以url的方式传递对应行数据在数据表中对应的id传入相应的Servlet进行处理,以id为搜索条件,删除对应行数据。实现预约数据的删除url传递方式如下:href="${pageContext.request.contextPath}/DelServlet?method=post&id=<%=id%>"(4)实验报告管理实验报告管理界面为stu_labreport_upload.jsp,运行截图如图(2.4)所示。图(2.4)先测试一个文件上传的表单提交,发现文件表单正文如下:通过httpWatch测试,查看表单的请求数据正文部分如下图所示:由上图发现正文部分是由多个部件组成,每个部件对应一个表单字段,每个部件都有自己的头信息。头信息下面是空行,空行下面是字段的正文部分。多个部件之间使用随机生成的分隔线隔开。文本字段的头信息中只包含一条头信息,即Content-Disposition,这个头信息的值有两个部分,第一部分是固定的,即form-data,第二部分为字段的名称。在空行后面就是正文部分了,正文部分就是在文本框中填写的内容。文件字段的头信息中包含两条头信息,Content-Disposition和Content-Type。Content-Disposition中多出一个filename,它指定的是上传的文件名称。而Content-Type指定的是上传文件的类型。文件字段的正文部分就是文件的内容。通过以上分析明白了文件上传所需要的数据。本项目实验报告的提交由FileUpload包完成,上传过程主要分为三步:得到工厂类、通过工厂创建解析器、解析request得到FileItem集合。文件的存储位置一般当在WEB-INF下面,这样可以保证安全性。文件以write方法写入。同时将文件名,保存的文件名,文件夹名,文件后缀,以及上传者信息存入对应的数据表,方便文件下载时使用。上传成功的文件可以马上下载以及删除。上传主要解决问题如下:文件绝对路径处理因为浏览器的差异,IE浏览器存在上传文件为绝对路径,不利于保存和读取,所以必须要对此种情况进行处理,处理方式一般为找到路径最后一个“/”的位置,此处加入赋至index,截取index+1的位置,这样就可以得到真实的文件名称。同名文件处理通常我们会把用户上传的文件保存到uploads目录下,但如果用户上传了同名文件就会出现覆盖的现象。处理这一问题的手段是使用UUID生成唯一名称,然后再使用“_”连接文件上传的原始名称。例如用户上传的文件是“我的一寸照片.jpg”,在通过处理后,文件名称为:“891b3881395f4175b969256a3f7b6e10_我的一寸照片.jpg”,这种手段不会使文件丢失扩展名,并且因为UUID的唯一性,上传的文件同名,但在服务器端是不会出现同名问题的。也就避免了文件覆盖的问题。目录打散一个目录下不应该存放过多的文件,一般一个目录存放1000个文件就是上限了,如果在多,那么打开目录时就会很“卡”。你可以尝试打印C:\WINDOWS\system32目录,你会感觉到的。也就是说,我们需要把上传的文件放到不同的目录中。但是也不能为每个上传的文件一个目录,这种方式会导致目录过多。所以我们应该采用某种算法来“打散”!打散的方法有很多,例如使用日期来打散,每天生成一个目录。也可以使用文件名的首字母来生成目录,相同首字母的文件放到同一目录下。日期打散算法:如果某一天上传的文件过多,那么也会出现一个目录文件过多的情况;首字母打散算法:如果文件名是中文的,因为中文过多,所以会导致目录过多的现象。我们这里使用hash算法来打散:a:获取文件名称的hashCode:inthCode=name.hashCode();;b:获取hCode的低4位,然后转换成16进制字符;c:获取hCode的5~8位,然后转换成16进制字符;d:使用这两个16进制的字符生成目录链。例如低4位字符为“5”这种算法的好处是,在uploads目录下最多生成16个目录,而每个目录下最多再生成16个目录,即256个目录,所有上传的文件都放到这256个目录下。如果每个目录上限为1000个文件,那么一共可以保存256000个文件。本项目中上传的实验报告就存放在三级文件夹之中。(5)登录密码修改登录密码修改界面为pwd_change.jsp,运行截图如图(2.5)所示。图(2.5)密码修改就是在servlet中得到登录者的学号,然后得到表单数据中的新密码以及原密码。匹配原密码成功后更新密码为新密码。2.2.3教师用户如图(1)所示,教师用户模式也分为实验预约,预约信息修改,实验安排管理,实验报告管理,登录密码修改5个功能。下面将对5个功能分别解释。(1)实验预约实验预约界面为tea_book.jsp,运行截图为图(3.1)所示。实验预约功能实现与学生的实验预约差不多,不同的是可以选择实验班级,实验班级是由管理员添加,下拉框中是教师对应的实验班级。也是通过ajax实现。图(3.1)(2)预约信息修改预约信息的修改界面为tea_info_change.jsp页面。运行截图为图(3.2)所示图(3.2)此页面信息的修改与学生实验室预约信息修改界面功能实现没有多大的区别,只是针对不同的数据表进行操作,此处不再赘述。(3)实验安排管理实验安排管理界面为tea_man_labname.jsp。运行截图为图(3.3)所示。图(3.3)实验安排管理是教师为任课班级安排实验的一个功能界面,在这个界面中,能查询出教师自己预约的班级实验,对其进行修改与删除,点击右上角的“增加实验信息”添加实验,点击后在查询表的下面会显示影藏的div,div第一个为一个select,里面只能选择的是教师所任课班级。对应班级有敢理员管理。点击确认添加将数据写入数据库之中。(4)实验报告管理实验报告管理操作界面为tea_lab_report_manager.jsp和tea_lab_reportResult.jsp,运行截图如图(3.4)和图(3.5)所示。此处之所以用到了两个jsp页面,是因为在数据表中的字段缺失问题。在第一个jsp页面,由教师选择任课班级,从功能上来说,这样是为了查询出每个班级所提交的实验报告,从实现技术上来说,是为了将表单提交一次到下个jsp页面进行接收,因为此处如果没有这样的提交跳转,在一个页面上就目知识水平前而言只能用ajax,这样导致jsp页面代码过多,造成诸多不好。在tea_lab_reportResult.jsp里面接收的数据将作为搜素条件查询数据表,然后遍历,以表格的形式显示出有用的信息,在这个页面上所示的上传时间并不是上传的时候传入的时间。因为这一字段的数据类型为“timestamp”,“timestamp”列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。在tea_lab_reportResult.jsp页面里面可以删除/下载上传的文件。其中下载的实现思路如下:点击下载链接时将在对应的javascript函数中执行下面语句:window.location.href="${pageContext.request.contextPath}/stu_downloadServlet?method=post&id="+id+"&filename="+filename+"&lab_name="+lab_name+"&upload_time="+upload_time+"&lab_tea="+lab_tea+"&floader1="+floader1+"&floader2="+floader2+"&savename="+savename+"";此语句把下载文件所需要的数据传入stu_downloadServlet中进行处理。在stu_downloadServlet中以“getParameter”获取传入的参数。在下载文件时需要设置两个请求头和一个数据流,如下:Content-Type请求头设置此请求头的语句如下:StringcontentType=this.getServletContext().getMimeType(filesrc);response.setHeader("Content-Type",contentType);其实设置此请求头是为了通过文件名称获取文件的mime类型Content-Disposition头设置语句如下StringcontentDisposition="attachment;filename="+framename;response.setHeader("Content-Disposition",contentDisposition);数据流此处的数据流为文件的输入流,为FileInputStream,是为了后面把此输入流中的数据写入到绑定了响应端的输出流之中,以实现下载。下载时是由一个需要注意的地方,就是下载文件名称的编码问题,其代码将在后文贴出。图(3.4)图(3.5)(5)登录密码修改:与学生密码修改实现方式相同,此处不在赘述。2.2.3管理员用户如图(1)所示,管理员用户模式分为班级管理,实验室管理,教师信息管理,学生信息管理4个功能。下面将对4个功能分别解释。班级管理班级管理实现界面为man_addclass.jsp页面和man_addclass2.jsp两个页面,运行截图如图(4.1),图(4.2)所示。图(4.1)图(4.2)此处功能的实现用到两个jsp页面的原因是为了进行一次重定向。这是由于数据表中字段建立不完整导致的。在man_addclass.jsp页面中有一个输入框,其后面有一个影藏的输入框。运用实时监听技术。当在第一个输入框中输入对应教师的用户名,通过ajax查询数据表,如果存在这样的用户,将在后面的输入框显示其名字,否则显示“用户名不存在”。点击查询按钮, 将在man_addclassServlet中进行处理,获取参数,写入session中进行保存,然后重定向到man_addclass2.jsp;重定向语句如下response.sendRedirect("JSP/man_addclass2.jsp"); 在man_addclass2,jsp页面循环遍历数据得到教师对应班级信息,可以对其进行修改删除,以及增加实验班级信息。实验室管理实验室管理界面为man_addlabCalssromm.jsp,运行截图如图(4.3)所示。图(4.3)实验室管理界面是管理员管理实验室的一个功能界面,可以修改,删除,添加,功能实现与以上修改,删除,添加大致相同,不再赘述。教师信息管理教师信息管理界面man_tea_m.jsp,运行截图如图(4.4)所示。图(4.4)查找教师功能是为了从大量的数据之中方便查找。实现过程为后台获取输入的教师用户名,传入servlet中查询相应的教师信息以表格方式显示出来,供管理员修改。其他功能实现不再赘述。学生信息管理学生信息管理界面为man_stu_m.jsp,运行截图如(4.5)所示。图(4.5)功能的实现与教师信息管理大致相同,不再赘述。2.3部分核心代码2.3.1Ajax部分代码 (1)获取XMLHttpRequest对象 functioncreatXMLHttpRequest(){ try{ returnnewXMLHttpRequest();//大多数浏览器 }catch(e){ try{ returnActiveXobject("Msxml2.XMLHTTP");//IE6.0 }catch(e){ try{ returnActiveXobject("Microsoft.XMLHTTP");//IE5.5以及更早版本 }catch(e){ alert('不知道您用的什么浏览器'); throwe; } } } }(2)ajaxGET请求代码varxmlhttp1=creatXMLHttpRequest(); //打开链接 xmlhttp1.open("GET","/LabBook/labclassServlet",true); //发送请求 xmlhttp1.send(null); //注册监听事件 xmlhttp1.onreadystatechange=function(){ //双重判断 if(xmlhttp1.readyState==4&&xmlhttp1.status==200){ vartext=xmlhttp1.responseText; //执行代码 }(3)ajaxPOST请求代码//获取XMLHttpRequest对象 varxmlhttp=creatXMLHttpRequest(); //打开链接,设置post请求,给出请求url,true代表异步请求 xmlhttp.open("POST","/LabBook/tea_serch_stu",true);//设置请求头Content-Type xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送请求,给出请求头 xmlhttp.send("xuehao="+xuehao_id1); //给xmlhttp的onreadystatechange注册监听事件 xmlhttp.onreadystatechange=function(){ //双重判断 if(xmlhttp.readyState==4&&xmlhttp.status==200){ //获取响应信息值 vartext=xmlhttp.responseText; //执行代码 } }2.3.2数据库连接部分代码 try{ Class.forName(driver); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } Statementstmt=null; Connectionconn=null; try{ conn=DriverManager.getConnection(url,user,pwd); stmt=conn.createStatement(); Stringsql="";//根据需要编写 stmt.executeUpdate(sql); //此处如果为查询代码也可以写作stmt.executeQuery(sql); //下面为自行代码 }catch(SQLExceptione){ e.printStackTrace(); }2.3.3上传文件部分代码(1)后台代码try{ List<FileItem>FileItemList=sfu.parseRequest(request); FileItemlab_tea_select=FileItemList.get(0); FileItemlab_name_select=FileItemList.get(1); FileItemreport_file=FileItemList.get(2); //普通表单,得到其职 Stringlab_tea=lab_tea_select.getString("utf-8"); Stringlab_name=lab_name_select.getString("utf-8"); //文件表单 Stringfilename=report_file.getName();//获取文件的名字 /* *文件绝对路径处理 */ intindex=filename.lastIndexOf("\\");//找到最后一个/的位置,如果不存在返回-1 if(index!=-1){ filename=filename.substring(index+1); } /* *取出文件后缀 */ intindexpostfix=filename.lastIndexOf("."); if(indexpostfix!=-1){ postfix=filename.substring(indexpostfix+1); } /* *同名文件处理 */ UUIDuuid=UUID.randomUUID(); Stringsavename=stu_username+uuid.toString().substring(0,8) +filename;//保存的文件名 /* *目录打散 *1.得到文件名的hash值 *2.将得到的值转换为16进制 *3.取出16进制的前两位创建两层目录 */ inthascode=savename.hashCode(); Stringhash=Integer.toHexString(hascode); /** *创建目录,文件放在WEB-INF下 */ //1.得到files文件的真实路径 Stringroot=this.getServletContext().getRealPath( "/WEB-INF/labreport_Files/"); //获取hash的前两个字符,与root连接接在一起,得到一个完整的路径 charfile1=hash.charAt(0); charfile2=hash.charAt(1); Filedirfile=newFile(root,file1+"/"+file2); //创建目录链 dirfile.mkdirs(); //创建目标文件 Filedestfile=newFile(dirfile,savename); //保存文件 try{ report_file.write(destfile); }catch(Exceptione){ e.printStackTrace(); } (2)前台核心代码 enctype="multipart/form-data"2.3.4下载文件部分代码 (1)下载文件部分代码 /* *两个头一个流 *1.Content-Type *2.Content-Disposition *3.流:下载文件的数据 */ //下载的文件路径以及文件名(保存的文件名) Stringfilesrc=this.getServletContext().getRealPath( "/WEB-INF/labreport_Files/")/LabBook_files/"+floader1+"/"+floader2+"/"+savename; //下载文件 Stringframename=filenameEncoding(filename,request); StringcontentType=this.getServletContext() .getMimeType(filesrc);//通过文件名称获取MIME类型 StringcontentDisposition="attachment;filename="+framename; //一个流 FileInputStreaminput=newFileInputStream(filesrc); //设置头 response.setHeader("Content-Type",contentType); response.setHeader("Content-Disposition",contentDisposition); //获取绑定了响应端的流 ServletOutputStreamoutput=response.getOutputStream(); IOUtils.copy(input,output);//把输入流中的数据写入到输出流中。 input.close(); (2)下载文件名称编码核心代码publicstaticStringfilenameEncoding(Stringfilename,HttpServletRequestrequest)throwsIOException{ Stringagent=request.getHeader("User-Agent");//获取浏览器 if(agent.contains("Firefox")){ BASE64Encoderbase64Encoder=newBASE64Encoder(); filename="=?utf-8?B?" +base64Encoder.encode(filename.getBytes("utf-8")) +"?="; }elseif(agent.contains("MSIE")){ filename=URLEncoder.encode(filename,"utf-8"); }else{ filename=URLEncoder.encode(filename,"utf-8"); } returnfilename; }3系统测试 系统测试在软件生存周期中占有重要地位,这不仅是因为测试阶段占用的时间和比较长,而且它直接影响着软

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论