资源描述:
《论文主体基于web的图书查询系统毕业论文》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
论文主体基于web的图书查询系统毕业论文第1章绪 论1.1研究目的与意义今天科学技术迅速提高,计算机的应用起着越来越重要的作用,采用现代科学技术进行信息处理已受到人们的普遍重视。全面地,迅速的,及时的获得所需要的信息,并进行处理、分析,从而对面临的问题进行判断决策。无论对经济活动、社会活动、科学研究都十分重要。计算机软硬件的日益完善,计算机技术的提高,使得数据管理,数据处理成为可能,并得到很快的发展。随着信息时代的到来,人们对信息的需求越来越大,对信息处理的需求也越来越高。但是由于管理方式的不当,处理数据的能力有限,工作效率低,各种图书信息不能得到充分的利用,造成极大的浪费,使得图书管理工作相对落后。解决这些问题的最好方法是实现管理的自动化,用计算机处理来帮助人们进行图书查询。利用计算机中最为友好、最为方便的Windows界面进入系统,使用鼠标、键盘轻松地完成数据的录入、浏览、查询等操作。大规模应用先进的信息化技术,变革传统意义上的图书管理方式和经营模式已经是大势所趋。图书查询系统就这样应运而生了。现在,我国的大部分的图书馆普遍都用上了图书管理软件,传统的管理方法必然被计算机为基础的信息管理系统所代替,如果这套系统能够用到图书馆的管理,将会改变以前靠手工管理图书信息的状况,可以树立良好的形象,提高工作效率。1.2国内外发展现状随着计算机网络技术在全球的广泛应用,网络化、数字化的信息环境也在加速形成,它改变了过去文献信息资源共享模式,使信息资源共享更加有效和便捷。在我国,图书馆之间的资源共建与共享是20世纪后期贯穿图书馆发展进程的一条主线,经过近2046 年的努力,已进入了一个从量变到质变的跨时空信息资源共享阶段,但与发达国家相比还存在着一定的差距。本文特挑选了地处北美、中欧、东亚的三个典型的西方国家,就其信息资源共享历史、现状等方面与我国图书馆作了一系列比较,以便借鉴这些先进国家的成功经验,更好地实现文献信息资源的共享。图书馆信息资源共享建设管理系统在战后就开始出现,但绝大多数是1965年美国通过了高等教育法以后到1970年之间产生的。这些协作体都是自发组织,绝大多数是地域性的,主要以大学图书馆为中心,也包括了一些公共图书馆。这种新的图书馆协作体,由于当时的技术条件限制,它所起到的资源共享的作用不能和以后的图书馆网络相比。但是这种协作体出现的意义是深远的。因为它是介于市场配置和组织内配置之间的“第三态”的信息资源配置方式,同时也是一种介于政府行为与图书馆个体之间的“中间组织”形式。所以它的出现逐渐取代了以往的图书馆单干的局面,同时也避免了完全由政府包办的局限性,从而开始彻底改变美国图书馆信息资源共享的面貌,为新一代的计算机图书馆书目利用网络的形成奠定了组织基础。比如说,今天的OCLC图书馆网络就是在OhioCollegeLibraryCenter(OCLC)这一地区性的协作体基础上逐渐发展变化过来的。因此,可以说美国图书馆资源共享的发展离不开图书馆协作体的出现、繁荣和有规律的管理系统的建立。日本在20世纪80年代中期以前信息资源共享程度滞后的原因之一是图书馆协会数量多、分散、没有形成规模,但其在1980年的学术审议会上提出的《今后我国学术信息系统的基本策略》报告中已充分认识到了,并提出了“必须建立一个全国性的信息中枢机构”,经过努力研究和摸索,1986年NACSIS的建立使日本图书馆资源共享有了一个飞跃。德国的合作图书馆系统在实现资源共享方面取得成功也得益于德国研究协会对文献资源体系协调的作用。目前我国图书馆存在三大系统即公共图书馆系统、科研图书馆系统、学校图书馆系统,各有各的行政主管部门。文献信息资源共享工作还是以零散、局部、不规范、缓慢、重复方式进行。虽然有各种各样的协会、学会、工作委员会,但都不是具有行政职能的学术机构,没有强有力的政策、法制、法规,没有条块分割的管理制度,最终使协调组织只可建议却无力控制,馆际互借多在系统或行业内进行。所以我国图书馆必须克服过去保守思想,要树立起分工协作的观念,如文献资源协调中心,可参照美国OhioLINK网络中心的模式,设董事会和顾问委员会,由政府统一拨款和采购数据库和管理系统。另外为保证图书馆共享长期存在,需建设图书馆利用共同体,加快图书馆立法实行集中管理。目前国内图书馆的网络信息服务已经开展或即将开展的主要有以下几项服务: 1、WWW服务 46 WWW是目前Internet上最为广泛的信息服务类型,它为全世界用户提供了查找和共享信息的手段,是人们进行动态多媒体交互的最佳方式,也是当前各类图书馆网络信息服务的主要类型。图书馆WWW信息服务,主要形式有:检索查询(包括在线书目查询、期刊目次查询、文献检索、数据库检索、用户资料查询、国际联机检索、光盘检索等),在线图书馆(在线书刊浏览),网上教学(电子教程下载、在线讲座和热点问题讨论等),网络导航,交互信息(图书馆公告、图书馆人才招聘广告、网上问卷调查、读者留言、问题解答等),多媒体资源服务(指音频、视频资源的介绍、在线收听或视频点播VOD等)以及传统信息服务的Web形式(馆藏查询、预约、续借、新书通报和新书推荐等)和定题服务、参考咨询、原文传递和下载服务等。 2、Email服务 Email(Eleceduonic Mail,电子邮件)是Internet上一种重要的信息服务方式,它为世界各地的Internet用户提供了一种极为快速、简单和经济的通讯方法,Email已成为目前利用率最高的Internet应用。图书馆要广泛地开展网络信息服务,开通Email服务是很有必要的一项举措。图书馆可以开通收费的Email服务,用户缴纳一定的费用,就可拥有图书馆专门为他提供的电子邮箱,并通过这个邮箱接受图书馆的电子期刊、电子文献和各类信息等。 3、FTP服务 FTP(File Transfer Protocol,文件传输协议)是Internet上使用非常广泛的一种通讯协议,是Internet上获取信息资源的最主要方式之一,人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料,对大容量文件和数据的传输非常直观、简单,而且传输速度很快。如用户下载同一个文件,在Web服务器上最快为200~300kb/s,而FTP最快可达2~4gb/s以上。FTP服务是图书馆网络信息服务中必不可少的一种类型,图书馆可把本馆的数字化馆藏、特藏、音频、视频等大量文件放在FTP服务器上,供用户下载。 4、BBS服务 BBS(Builetin Board Service, 公告牌服务)是Internet上一种电子信息服务系统,用户可以在上面发布信息、提出看法或进行交流等。图书馆开通BBS,用户可以随时向馆员提问和咨询,进行实时交流,提供在线帮助;也可开办各种讲座、用户教育、发布公告等,既是用户及时获取各种信息的重要场所,也是图书馆及时获得用户反馈信息的绝佳方式。BBS的开通,将使图书馆的网络信息服务跃上一个新的台阶。46 1.3本文结构以下章节阐述的内容依次为:第二章主要对系统开发的语言JSP介绍,第三章对系统的可行性和需求分析。第四章是对系统的概要设计。第五章是对系统的详细设计与实现。第六章是对系统的测试。第2章图书查询系统开发语言简介2.1JSP简介 JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。2.1.1JSP的技术特点该技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器、应用服务器、浏览器和开发工具共同工作。JSP规范是Web服务器、应用服务器、交易系统、以及开发工具供应商间广泛合作的结果。在传统的网页HTML文件(*htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)46 。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无JavaApplet,甚至无Frame。从软件的技术层面看,JSP有如下的特点:1、将内容的生成和显示进行分离使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。2、强调可重用的组件 绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者EnterpriseJavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。3、采用标识简化页面开发Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServerPage技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。4、技术分析JSP的效率和安全性更高JSP的组件(Component)方式更方便JSP的适应平台更广。2.1.2JSP方法与传统静态主页的区别把信息系统纳入Internet/Intranet的框架之后,首先要解决的问题是通过网页访问后台数据库信息。所有应用程序都被分割为页面的形式,用户的交互操作是以提交表单等方式来实现的,这就要求Web站点具有很强的动态数据发布能力。然而,目前Web的服务,仍以提供"静态"主页内容为主。所谓"静态",指的就是站点的主页内容是"固定不变"的,无法根据用户的需求和实际情况做出相应的变化。当浏览器通过Internet的HTTP协议向站点的Web服务器申请主页时,站点服务器就会将已设计好的静态的HTML文件传送给浏览器。若要更新主页的内容,只能用非在线的手动方式更新HTML的文件数据。JSP所设计出的是动态主页,可接收用户提交的信息并做出反应,其中的数据可随实际情况而改变,无须人工对网页文件进行更新即可满足应用需要。例如:当在浏览器上填好表单并提交HTTP请求时,可以要求在站点服务器上执行一个表单所设定的应用程序,而不只是一个简单的HTML文件。该应用程序分析表单的输入数据,根据不同的数据内容将相应的执行结果(通常是数据库查寻的结果集)以HTML的格式传送给浏览器。数据库的数据可以随时变化,而服务器上执行的应用程序却不必更改,客户端得到的网页信息会始终保持新鲜的魅力。46 2.1.3JSP与组件对象的使用上文提到的JDBC就是系统提供的用于访问后台数据库的组件。此外,JSP本身还提供了五个内置的对象。这五个内置对象可被JSP脚本直接使用,它们是:Request取得用户信息,Response传递信息给用户,Server提供访问服务器的方法和属性,Application在一个应用程序的多个主页之间保留和使用某些共同的信息,Session在一个用户的多个主页之间保留和使用某些共同的信息。其中,使用内置对象Request,Response可实现Web的交互功能,使用内置对象Application,Session可解决具有协作机制的应用问题。2.2JDBC简介JDBC是Java的开发者——Sun的Javasoft公司制定的Java数据库连接(JavaDataBaseConnectivity)技术的简称,是为各种常用数据库提供无缝联接的技术。JDBC在Web和Internet应用程序中的作用和ODBC在Windows系列平台应用程序中的作用类似。ODBC(OpenDataBaseConnectivity),称为开放式数据库互联技术,是由Microsoft公司倡导并得到业界普遍响应的一门数据库连接技术。JDBC现在可以连接的数据库包括:xbase、Oracle、Sybase、Aceess以及Paradox等。如果用户是从事软件领域工作的,不可能没有听说过SQL(StructureQueryLanguage:结构化查询语言),它是一种标准化的关系型数据库访问语言。在SQL看来,数据库就是表的集合,其中包含了行和列。JDBC定义了Java语言同SQL数据之间的程序设计接口。 JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。 JavaSoft公司开发了JDBCAPI,JDBCAPI是一个标准统一的SQL数据存取接口。JDBC在Internet中的作用与ODBC在Windows系列中的作用类似。它为Java程序提供了一个统一地操作各种数据库的接口,程序员编程时,可以不关心它所要操作的数据库是哪个厂家的产品,从而提高了软件的通用性,而且在Internet上确实无法预料你的用户想访问什么类型的数据库。只要系统上安装了正确的驱动器组,JDBC应用程序就可以访问其相关的数据库。2.2.1JDBC与JSP这是一种完全的Web数据库访问方案,可把JDBC与J46 SP结合起来,建立提供数据库信息的网页内容,在网页中执行SQL命令,对数据库进行查询、插入、更新、删除等操作。2.2.2访库的技术实现方法JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)使他们能够用纯JavaAPI来编写数据库应用程序[8]。JDBC可连接多种数据库,如SQLServer、Oracle、Informix等。在使用时,首先需在控制面板的ODBC中建立相应的DSN(数据源名)。要选择系统数据源名,指定所用的驱动程序,如"SQLServer",在数据来源名称中输入DSN名,并选定服务器和数据库。使用JDBC访问数据库的设计要领是掌握JSP脚本的几个典型语句,它们是:1、建立连接的对象try{Class.forName(com.mysql.jdbc.Driver);System.out.println(SuccessloadingMysqlDriver!);}catch(Exceptione){kTrace(); System.out.println(ErrorloadingMysqlDriver!); e.printStac}2、用“Open”打开待访问的数据库:Conn.Open“DSN名称”3、设定SQL语句,使用“Execute”命令,即可开始执行访问数据库的动作Set RS=Conn.Execute("SQL语句")其中RS为结果集对象(RecordSets)。4、利用RecordSets对象所提供的属性显示查询结果5、关闭结果集对象,断开与数据库的连接RS.CloseConn.Close2.3脚本语言简介2.3.1JScriptJScript是Microsoft公司对ECMA262语言规范的一种实现。JScript完全实现了该语言规范,并且提供了一些利用MicrosoftInternetExplorer46 的功能的增强特性。JScript是一种解释型的、基于对象的脚本语言。尽管与诸如C++和Java这样成熟的面向对象的语言相比,JScript的功能要弱一些,但对于它的预期用途而言,JScript的功能已经足够大了。JScript不是任何其他语言的精简版(例如,它只是与Java有点模糊而间接的关系),也不是任何事物的简化。不过,它有其局限性。例如,您不能使用该语言来编写独立运行的应用程序,并且该语言读写文件的功能也很少。此外,JScript脚本只能在某个解释器上运行,该解释器可以是Web服务器,也可以是Web浏览器。JScript是一种宽松类型的语言。这意味着您不必显式定义变量的数据类型。此外,在大多数情况下,JScript将根据需要自动进行转换。例如,如果试图将一个数值添加到由文本组成的某项(一个字符串),该数值将被转换为文本。2.4JSP与ASP和PHP的比较2.4.1JSP特点JSP简单的说就是Java,只是它是一个特别的Java语言,加入了一个特殊的引擎,这个引擎将HTTPServlet这个类的一些对象自动进行初始化好让用户使用,而用户不用再去操心前面的工作。同时这个引擎又引入了3、必须重启服务器,配置才能生效。4、编写测试文件(.JSP),内容如下:<%@pagecontentType="text/html;charset=GB2312"%><%@pagelanguage="java"import="java.sql.*"%><%Connectioncon=null;try{46 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=libaray","sa","sa");Stringsql="CREATETABLEme(me_idINTEGER,me_nameVARCHAR(50))";intflag=-1;Statementstate=con.createStatement();flag=state.executeUpdate(sql);state.close();if(flag==0){out.println("chenggong!");}else{out.println("shibai!");}}catch(SQLExceptionsqle){out.println(sqle.getMessage());}%>运行结果为“chonggong!”,表示与数据库连接了,插入表成功。若结果为“失败”,表示插表入失败,可以根据输出的异常信息分析错误。4.1.3在tomcat上建立自己的工程在本地D:ProgramFilesApacheSoftwareFoundationTomcat5.5confCatalinalocalhost路径下新建一个byshj.xml文件,并添加以下代码:46 此配置文件主要作用:建立一个工程,设置工程文件的存放路径,并指明工程使用的数据库资源(jdbc/libaray);4.2模块设计模块是数据说明、可执行语句等程序对象的集合,是单独命名的而且可通过名字来访问,如,过程,函数、子程序、宏等都可作为模块。模块化就是把程序划分为若干个模块,将系统的总功能分为若干个子功能,最后把这些子模块综合起来组成一个整体,完成指定的功能满足问题的要求。根据前面对需求的分析,依据系统功能设计原则,图书查询系统的功能模块划分如图4.1所示。图书查询系统图书查询模块管理员模块管理员密码修改修改图书信息删除图书添加图书管理员注册管理员登陆图书视图的显示按关键字查询按图书分类ID查询图4.1系统功能模块图1、管理员模块作为图书管理系统的系统管理员,具有以下功能:登陆,注册功能;图书信息的维护功能,主要包括添加、更新、删除图书信息等;管理员对自己的密码的修改功能。2、读者模块读者可以随意访问查询系统网站,具有以下功能:图书关键字查询;图书分类查询;所有图书信息的查询。46 4.3本章小结本章主要针对系统的数据库进行设计,对tomcat服务器中配置数据库连接池的配置进行详细讲解,并且最终能够连接数据库。画出了系统的功能模块图,对系统的功能有了很好的掌握,为系统的详细设计打下基础。46 第5章图书查询系统详细设计与实现5.1管理员登录页面模块设计与实现此模块涉及到的JSP文件如下:login.jsp。管理员把在登录页面提交到logon.jsp页面进行检查。若出现提示框“用户名或密码有误,请重新输入!”,则登陆失败,返回登录界面。否则用户身份通过了验证,此时把用户身份信息记录到了SESSION对象中,并且跳转到了管理员页面,访问的是manager.jsp文件。在进入该页面时,对管理员身份进行验证,若SESSION对象中信息为空,则跳转到eorror.html。登陆界面如图5.1所示。图5.1管理员登录页面其部分代码如下:Stringaccount=request.getParameter("account");Stringpassword=request.getParameter("pass");Stringsql="select*frommanagerwheremanager_account='"+account+"'";StringerrMessage="";ManagerDaomanagerDao=newManagerDao();Manager[]managers=null;try{managers=(Manager[])managerDao.selectByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}if(managers==null){out.print("");}else{if(managers[0].getManager_pass().equals(password)){session.setAttribute("Manager",account);46 response.sendRedirect("manager.jsp?action=sy");}elseout.print("");}5.2管理员主页面模块设计与实现这个页面是管理员对图书进行管理的窗口。它由manager.jsp和foot.jsp两个部分组成。管理员可以查看所以图书信息,并可以对图书做增删改操作。管理员退出可以通过logout.jsp实现。如图5.2所示。图5.2管理员主页面5.3管理员注册页面模块设计与实现此模块涉及到的JSP文件如下:regist.jsp注册表单页面,通过regist.jsp后台页面进行检查,若显示提示信息“用户名已存在!”,则需要重新注册,在用户身份验证通过后,通过SESSION对用户身份信息进行记录。然后进入系统,访问的是manager.jsp页面。在manager.jsp页面对登录身份进行验证,若SESSION信息为空,则跳转到eorror.html。如图5.3所示。46 图5.3管理员注册页面此模块除了对用户输入的用户名验证和两次密码的验证,还有一种特殊的验证功能。Ajax+servlet技术对用户输入的用户名进行是否存在的验证,这里需要java文件ajax.java和JavaScript文件regist.js。把ajax.java编译成servlet。并在工程所在的文件夹E:byshjWEB-INF下的web.xml中配置此ajaxservlet。如图5.4所示。图5.4管理员注册页面的Ajax+servlet验证注册部分代码:Stringaccount=request.getParameter("account");Stringpass1=request.getParameter("pass1");Stringpass2=request.getParameter("pass2");Stringsql="select*frommanagerwheremanager_account='"+account+"'";ManagerDaomanagerDao=newManagerDao();Manager[]managers=null;try{managers=(Manager[])managerDao.selectByQueryString(sql);}46 catch(Exceptione){errMessage=e.getMessage();}if(managers!=null){out.print("");}else{sql="insertintomanager(manager_account,manager_pass)values('"+account+"','"+pass1+"')";try{managerDao.insertByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}session.setAttribute("Manager",account);out.print("");}5.4管理员添加图书页面模块设计与实现此模块涉及到的JSP文件有manager.jsp。这个页面是只有通过了SESSION验证后才能显示。主要涉及到得是SQL的Insert语句。首先获取表单提交过来的数据。因为提交过来的数据全是字符串,所以要对有些字符串转化为相应的整型,浮点型,日期型数据,然后插入到数据库的图书表中。系统添加图书信息页面如图5.5所示。46 图5.5管理员添加图书页面其部分代码如下:Stringtype=request.getParameter("type");if(type.equals("tj")){BookDaobookDao=newBookDao();Stringbook_isdn=request.getParameter("book_isdn");Stringbook_name=request.getParameter("book_name");Stringbook_location=request.getParameter("book_location");Intbook_class_id=(newInteger(request.getParameter("book_class_id"))).intValue();Stringbook_author=request.getParameter("book_author");Stringbook_pub=request.getParameter("book_pub");Stringbook_pubdate=request.getParameter("book_pubdate");floatbook_price=(newFloat(request.getParameter("book_price"))).floatValue();Stringbook_rdate=request.getParameter("book_rdate");Stringbook_remark=request.getParameter("book_remark");Stringsql="insertintobook(book_isdn,book_name,book_location,book_class_id,book_author,book_pub,book_pubdate,book_price,book_rdate,book_remark)values('"+book_isdn+"','"+book_name+"','"+book_location+"','"+book_class_id+"','"+book_author+"','"+book_pub+"','"+book_pubdate+"','"+46 book_price+"','"+book_rdate+"','"+book_remark+"')";try{bookDao.insertByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}out.print("");5.5管理员修改密码页面模块设计与实现此模块涉及到的JSP文件有manager.jsp。这个页面是只有通过了SESSION验证后才能显示。只有当管理员输入正确的原始密码才能进行密码的修改。如图5.6所示。图5.6管理员修改密码页面功能实现代码如下:Stringtype=request.getParameter("type");if(type.equals("al")){ManagerDaomanagerDao=newManagerDao();Stringoldpass=request.getParameter("oldpass");Stringnewpass1=request.getParameter("newpass1");Stringnewpass2=request.getParameter("newpass2");Stringsql="select*frommanagerwheremanager_account='"+manager_account+"'";try{managers=(Manager[])managerDao.selectByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}if(managers[0].getManager_pass().equals(oldpass)){sql="updatemanagersetmanager_pass='"+newpass1+"'wheremanager_account='"+manager_account+"'";try{managerDao.updateByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}out.print("");46 }elseout.print("");}5.6管理员管理图书页面模块设计与实现此模块涉及到的JSP文件有manager.jsp。这个页面是只有通过了SESSION验证后才能显示。此部分主要通过“select*frombook”语句查询所有图书,然后显示出来。如图5.7所示。图5.7管理员管理图书信息页面其部分代码如下:BookDaobookDao=newBookDao();Stringsql="select*frombook";try{books=(Book[])bookDao.selectByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}5.7管理员更新图书信息页面模块设计与实现此模块涉及到的JSP文件有manager.jsp。这个页面是只有通过了SESSION验证后才能显示。主要涉及到SQL的Update语句的使用,对表单提交的数据进行图书更新。更新图书信息页面如图5.8所示。46 图5.8管理员更新图书信息页面其部分代码如下:intid=(newInteger(request.getParameter("id"))).intValue();BookDaobookDao=newBookDao();Stringbook_isdn=request.getParameter("book_isdn");Stringbook_name=request.getParameter("book_name");Stringbook_location=request.getParameter("book_location");Intbook_class_id=(newInteger(request.getParameter("book_class_id"))).intValue();Stringbook_author=request.getParameter("book_author");Stringbook_pub=request.getParameter("book_pub");Stringbook_pubdate=request.getParameter("book_pubdate");floatbook_price=(newFloat(request.getParameter("book_price"))).floatValue();Stringbook_rdate=request.getParameter("book_rdate");Stringbook_remark=request.getParameter("book_remark");Stringsql="updatebooksetbook_isdn='"+book_isdn+"',book_name='"+book_name+"',book_location='"+book_location+"',book_class_id="+book_class_id+",book_author='"+book_author+"',book_pub='"+book_pub+"',book_pubdate='"+book_pubdate+"',book_price="+book_price+",book_rdate='"+book_rdate+"',book_remark='"+book_remark+"'wherebook_id="+id;46 try{bookDao.updateByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}out.print("");}5.8图书查询系统主页面模块设计与实现此模块涉及到的JSP文件有index.jsp。游客可以任意登陆,不需要身份验证。主要包含图书分类的查询和关键字的查询功能。不过“图书分类”栏目是从数据库的图书分类表中读取出来,如图5.9所示。图5.9图书查询系统主页面其部分代码如下:StringerrMessage="";Stringaction=request.getParameter("action");Stringskind=request.getParameter("chaxun");Stringkeyword=request.getParameter("keyword");Book[]books=null;Bookclass[]bookclasses=null;BookclassDaobookclassDao=newBookclassDao();Stringsql="select*frombook_class";try{bookclasses=(Bookclass[])bookclassDao.selectByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}以上代码主要是实现左边图书的分类栏的显示。该模块的前台验证读者输入信息的JavaScript代码如下:functionchecksearch(thisform){if(thisform.keyword.value==""){alert("关键字不能为空哦!");thisform.keyword.focus();46 returnfalse;}returntrue;}5.9查询结果页面模块设计与实现此模块涉及到的JSP文件有index.jsp。读者可以任意登陆,不需要身份验证。它是图书分类的查询和关键字的查询结果的显示页面,主要技术是SQL的模糊查询。如图5.10所示。图5.10查询结果页面其部分代码如下:if(action.equals("cx")){BookDaobookDao=newBookDao();sql="";if(skind.equals("book_name")){sql="select*frombookwherebook_namelike'%"+keyword+"%'";}elseif(skind.equals("book_auth")){sql="select*frombookwherebook_authorlike'%"+keyword+"%'";}elseif(skind.equals("book_pub")){sql="select*frombookwherebook_publike'%"+keyword+"%'";}elseif(skind.equals("book_pubdate")){sql="select*frombookwherebook_pubdate='%"+keyword+"%'";}elseif(skind.equals("book_isbn")){sql="selcet*frombookwherebook_isdn='%"+keyword+"%'";}try{books=(Book[])bookDao.selectByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}5.10游客浏览图书信息页面模块46 此模块涉及到的JSP文件有view.jsp。读者可以任意查看,不需要身份验证。主要是通过图书ID条件查询图书信息,然后显示出来。如图5.11所示。图5.11图书视图页面其部分代码如下:if(request.getParameter("id")!=null){intid=(newInteger(request.getParameter("id"))).intValue();Stringsql="select*frombookwherebook_id="+id;BookDaobookDao=newBookDao();try{books=(Book[])bookDao.selectByQueryString(sql);}catch(Exceptione){errMessage=e.getMessage();}}5.11本章小结本章介绍了系统的详细设计。对系统的每个功能模块进行了详细说明,介绍了各个模块的实现的技术方法,并展示了各个模块的实现代码。其中涉及到的主要技术有SQL的查询、修改、更新、删除语句。该系统基本实现主要的功能。符合功能需求。46 第6章系统测试6.1测试目的为了检验系统运行的可靠性与稳定性,保证系统中各项功能能够实现,特制定如下测试计划。本测试计划主要用于发现系统开发过程中出现和各种不妥判之处,发现软件设计中的错误。6.2测试计划主要是根据系统流程图,首先测试管理员模块,主要测试的模块有登陆模块,注册模块,对图书的增、删、改、查模块,此外还有修改管理员修改密码功能模块。然后测试图书查询模块,这部分46 主要是测试图书关键字段的查询和图书分类ID查询功能。图书关键字段功能测试是测试根据输入的不同的字段的关键字,查看是否能够出现预料中的结果。6.3测试内容6.3.1系统环境模块测试本测试是为了检测系统环境模块,数据连接是否正确,数据能否正确,并进行仔细核对。6.3.2系统各模块测试模块能否正确运行关系到系统设计成败的关键,所以有必要专门对这几个模块进行严格的测试。以弥补设计过程中的不足,及早发现和修改问题。1、管理员注册模块Ajax+servlet功能测试,点击“检测用户名是否存在”按钮,就可以检测用户名。如图6.1、图6.2、图6.3所示。图6.1帐号为空信息图6.2帐号已存在提示信息46 图6.3帐号可用提示信息填写正确的密码例如:“husen”,其中有javascript对帐号验证和两次输入的密码的一致性验证,这里没有用图片展示。如果注册成功,就会弹出“注册成功!”提示框。点击“确定”进入管理员界面,如图6.4所示。图6.4注册进入的管理员界面2、管理员登陆模块输入注册测试中注册成功的帐号和密码,若可以进入系统,说明登陆模块成功。若登陆出错,说明登陆模块出现问题。3、添加图书模块按照要求填写书籍信息,如图6.5所示。46 图6.5添加图书信息界面点击“添加”链接,如果成功在图书管理中可以看到图书信息,如图6.6所示。图6.6添加后图书显示界面4、修改图书模块点击“大学体育”图书的“修改”按钮,出现修改图书界面,如图6.7所示。图6.7更新图书信息界面填入要修改的信息,这里把作者改为“husen”,点击“修改“就可以了。如图6.8所示。46 图6.8更新图书信息后的显示界面在这里可以看到作者名字改变了。5、删除图书模块点击“计算机基础教程”的“删除”按钮,会出现“您真的要删除吗”的提示框。点击“确定”,图书就删除了。如图6.9、图6.10所示。图6.9删除提示框图6.10删除后图书信息显示界面6、管理员修改密码模块在这里需要管理员输入正确的原始密码才能修改密码,当输入错的密码会出现“原始密码错误”的提示框,否则修改就成功了,如图6.11所示。46 图6.11修改密码界面7、图书查询模块这里在下拉框中选择了“按书名查询”,输入了“运筹”两个字。点击“查询”出现了查询结果。如图6.12,图6.13所示。图6.12图书查询界面图6.13图书查询结果界面8、图书视图功能模块点击查询结果中图书的ISDN,就可以看到图书的详细信息了,如图6.14所示。图6.14图书视图界面46 6.4测试结果测试表明软件实现了所需要的基本功能,测试中出现的一些小问题不足以影响整个系统工作,可在短期内解决。但是系统没有对用户输入的信息进行后台验证。当用户使用屏蔽JavaScript工具跳过前台JavaScript验证,就会出现输入格式的错误信息进入数据库。6.5本章小结本章对系统测试的过程和结果进行了说明。在系统的实施过程中,设计完程序后,调试是主要工作,如有不足之处应及时改正。在测试过程中可以采用人机结合的方式不断发现问题、解决问题。在软件使用的时候,还要注意软件的安全性。46 参考文献[1]夏邦贵,刘凡馨.SQLServer数据库开发经典实例经解[M].机械工业出版 社,2006:180~360页.[2]张洪伟.JSP网络开发技术与整合应用[M].北京:清华大学出版社,2006:160~280页.[3]杨易.JSP网络编程技术与实例[J].人民邮电出版社,2005:210~333页.[4]王征.JavaScript网页特效案例大全[M].北京:清华大学出版社,2006:78~269页.[5]张金霞.HTML网页设计参考手册[J].北京:清华大学出版社,2006:18~66页.[6]陈刚.CSS标准网页布局开发指南[M].北京:清华大学出版社,2007:40~177页.[7]黎文峰,李素青.Dreamweaver8完美网页设计[M].中国青年出版社, 2007:138~268.[8]叶核亚,陈立.Java2程序设计实用教程[Z].电子工业出版社,2007:225~379页.[9]张基温,陶利民.Java程序设计开发与习题[M].清华大学出版社,2006:111~169页.[10]朱福喜,唐晓军.Java程序设计技巧与开发[M].人民邮电出版社,2007.:50~90页[11]Craig.S.Mullins.DatabaseAdministration:TheCompleteGuidetoPracticesandProcedures[J].InternationalJournalofAccountingInformationSystems,2006,2(3):97~105.[12]BraynBasham.HeadFirstServlets&JSP[J].SoutheastUniversityPress,2007:230~330页.46 附录HeadFirstServlets&JSPJSPProfileJSP(JavaServerPages)isinitiatedbySunMicrosystems,Inc.,withmanycompaniestoparticipateintheestablishmentofadynamicwebpagetechnicalstandards.JSPtechnologysomewhatsimilartoASPtechnology,itisinthetraditionalHTMLwebpagedocument(*.htm,*.html)toinserttheJavaprogrammingparagraph(Scriptlet)andJSPtag(tag),thusJSPdocuments(*.jsp).UsingJSPdevelopmentoftheWebapplicationiscross-platformthatcanrunonLinux,isalsoavailableforotheroperatingsystems.JSPtechnologytousetheJavaprogramminglanguagepreparedbythecategoryofXMLtagsandscriptlets,toproducedynamicpagespackageprocessinglogic.Pagealsovisitbytagsandscriptletsexistintheservicessideoftheresourcesoflogic.JSPpagelogicandwebpagedesignanddisplayseparation,supportreusablecomponent-baseddesign,Web-basedapplicationdevelopmentisrapidandeasy.WebserverinthefaceofvisitsJSPpagerequest,thefirstimplementationoftheproceduresof,andthentogetherwiththeresultsoftheimplementationofJSPdocumentsinHTMLcodewiththereturntothecustomer.InserttheJavaprogrammingoperationofthedatabasecanbere-orientedwebsites,inordertoachievetheestablishmentofdynamicpagesneededtofunction.JSPandJavaServlet,isintheimplementationoftheserver,usuallyreturnedtotheclientisanHTMLtext,aslongastheclientbrowserwillbeabletovisit.JSP1.0specificationofthefinalversionislaunchedinSeptember1999,Decemberhasintroduced1.1specifications.AtpresentrelativelynewisJSP1.2norms,JSP2.0normsofthedrafthasalsobeenintroduced.JSPpagesfromHTMLcodeandJavacodeembeddedinoneofthecomponents.TheserverwasinthepagesofclientrequestsaftertheJavacodeandthenwillgeneratetheHTMLpagestoreturntotheclientbrowser.JavaServletJSPisthetechnicalfoundationandlarge-scaleWebapplicationdevelopmentneedsofJava46 ServletandJSPsupporttocomplete.JSPwiththeJavatechnologyeasytouse,fullyobject-oriented,andaplatform-independentandsecure,mainlyforallthecharacteristicsoftheInternet.JSPtechnologystrength(1)timetoprepare,runeverywhere.AtthispointJavabetterthanPHP,inadditiontosystems,thecodenottomakeanychanges.(2)themulti-platformsupport.Basicallyonallplatformsofanydevelopmentenvironment,inanyenvironmentfordeploymentinanyenvironmentintheexpansion.ComparedASP/PHPlimitationsareobvious.(3)astrongscalability.FromonlyasmallJardocumentscanrunServlet/JSP,tothemultipleserversclusteringandloadbalancing,tomultipleApplicationfortransactionprocessing,informationprocessing,aservertonumerousservers,JavashowsatremendousVitality.(4)diversificationandpowerfuldevelopmenttoolssupport.ThisissimilartotheASP,Javaalreadyhavemanyverygooddevelopmenttools,andmanycanbefree,andmanyofthemhavebeenabletorunonavarietyofplatformsunder.JSPtechnologyvulnerable(1)andthesameASP,Javaistheadvantageofsomeofitsfatalproblem.Itispreciselybecauseinordertocross-platformfunctionality,inordertoextremestretchingcapacity,greatlyincreasingthecomplexityoftheproduct.(2)Java'sspeedisclasstocompletethepermanentmemory,soinsomecasesbytheuseofmemorycomparedtothenumberofusersisindeeda"minimumcostperformance."Ontheotherhand,italsoneedsdiskspacetostoreaseriesof.Javadocumentsand.Class,aswellasthecorrespondingversionsofdocuments.JSPsixbuilt-inobjects:request,response,out,session,application,config,pagecontext,page,exception.Requestfor:Theobjectofthepackageofinformationsubmittedbyusers,bycallingtheobjectcorrespondingwaytoaccesstheinformationpackage,namelytheuseofthetargetuserscanaccesstheinformation.Responseobject:Thecustomer'srequestdynamicresponsetotheclientsentthedata.sessionobject46 1.Whatisthesession:sessionobjectisabuilt-inobjectsJSP,itinthefirstJSPpagesloadedautomaticallycreate,completetheconversationofmanagement.Fromacustomertoopenabrowserandconnecttotheserver,toclosethebrowser,leavingtheendofthisserver,knownasaconversation.Whenacustomervisitsaserver,theservermaybeafewpageslinkbetweenrepeatedly,repeatedlyrefreshapage,theservershouldbethroughsomekindofwaytoknowthisisthesameclient,whichrequiressessionobject.2.sessionobjectID:Whenacustomer'sfirstvisittoaserverontheJSPpages,JSPenginesproduceasessionobject,andassignedaStringtypeofIDnumber,JSPengineatthesametime,theIDnumbersenttotheclient,storedinCookie,thissessionobjects,andcustomersontheestablishmentofaone-to-onerelationship.Whenacustomertoconnecttotheserveroftheotherpages,customersnolongerallocatedtothenewsessionobject,until,closeyourbrowser,theclient-serverobjecttocancelthesession,andtheconversation,andcustomerrelationshipdisappeared.Whenacustomerre-openthebrowsertoconnecttotheserver,theserverforthecustomertocreateanewsessionobject.aplicationtarget1.Whatistheapplication:Servershavelaunchedaftertheapplicationobject,whenacustomertovisitthesitebetweenthevariouspageshere,thisapplicationobjectsarethesame,untiltheserverisdown.Butwiththesessiondifferenceisthatallcustomersoftheapplicationobjectsarethesame,thatis,allcustomerssharethisbuilt-inapplicationobjects.2.applicationobjectscommonlyusedmethods:(1)publicvoidsetAttribute(Stringkey,Objectobj):Objectspecifiedparameterswillbetheobjectobjaddedtotheapplicationobject,andtoaddthesubjectofthedesignationofakeywordindex.(2)publicObjectgetAttribute(Stringkey):accesstoapplicationobjectscontainingkeywordsfor.outtargetsoutasatargetoutputflow,usedtoclientoutputdata.outtargetsfortheoutputdata.Cookie1.WhatisCookie:46 CookieisstoredinWebserverontheuser'sharddrivesectionofthetext.CookieallowaWebsiteontheuser'scomputertostoreinformationonandthengetbacktoit.Forexample,aWebsitemaybegeneratedforeachvisitorauniqueID,andthentoCookieintheformofdocumentsstoredineachuser'smachine.IfyouuseIEbrowsertovisitWeb,youwillseeallstoredonyourharddriveontheCookie.Theyaremostoftenstoredinplaces:c:windowscookies(inWindow2000isintheC:DocumentsandSettingsyourusernameCookies)Cookieis"keywordkey=valuevalue"topreservetheformatoftherecord.2.TargetsthecreationofaCookie,CookieobjectcalledtheconstructorcancreateaCookie.Cookieobjectconstructorhastwostringparameters:CookieCookienameandvalue.Cookiec=newCookie("username","john");3.IftheJSPinthepackagegoodCookieobjecttosendtotheclient,theuseoftheresponseaddCookie()method.Format:response.addCookie(c)4.Savetoreadtheclient'sCookie,theuseoftheobjectrequestgetCookies()methodwillbeimplementedinallclientcametoanarrayofCookieobjectsintheformoforder,tomeettheneedtoremovetheCookieobject,itisnecessarytocompareanarraycycleEachtargetkeywords.46 JSP简介JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。JSP的1.0规范的最后版本是1999年9月推出的,12月又推出了1.1规范。目前较新的是JSP1.2规范,JSP2.0规范的征求意见稿也已出台。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。JSP技术的强势(1)一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改。(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。46 (4)多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。JSP技术的弱势(1)与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。(2)Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的.java文件和.class文件,以及对应的版本文件。JSP六种内置对象:request,response,out,session,application,config,pagecontext,page,exception..request对象:该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交信息。response对象:对客户的请求做出动态的响应,向客户端发送数据。session对象1、什么是session:session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。2、session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。aplication对象1、什么是application:46 服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。2、application对象常用方法:(1)publicvoidsetAttribute(Stringkey,Objectobj):将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。(2)publicObjectgetAttribute(Stringkey):获取application对象中含有关键字的对象。out对象out对象是一个输出流,用来向客户端输出数据。out对象用于各种数据的输出。Cookie1、什么是Cookie:Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。如果您使用IE浏览器访问Web,您会看到所有保存在您的硬盘上的Cookie。它们最常存放的地方是:c:windowscookies(在Window2000中则是C:DocumentsandSettings您的用户名Cookies)Cookie是以“关键字key=值value“的格式来保存纪录的.2、创建一个Cookie对象,调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。Cookiec=newCookie(“username”,”john”);3、JSP中如果要将封装好的Cookie对象传送到客户端,使用response的addCookie()方法。格式:response.addCookie(c)4、读取保存到客户端的Cookie,使用request对象的getCookies()方法,执行时将所有客户端传来的Cookie对象以数组的形式排列,如果要取出符合需要的Cookie对象,就需要循环比较数组内每个对象的关键字。46