基于JSP网上书店系统的设计与实现_第1页
基于JSP网上书店系统的设计与实现_第2页
基于JSP网上书店系统的设计与实现_第3页
基于JSP网上书店系统的设计与实现_第4页
基于JSP网上书店系统的设计与实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

学习文档仅供参考学习文档仅供参考学习文档仅供参考学习文档仅供参考学习文档学习文档仅供参考TOC\o"1-5"\h\z概要2前言2\o"CurrentDocument"第1章概述3开发背景错误!未定义书签。JAVA简介错误!未定义书签。\o"CurrentDocument"SQL简介3错误!错误!未定义书签。系统组成:错误!未定义书签。系统要求配置错误!未定义书签。\o"CurrentDocument"第3章详细设计8数据库设计9数据库需求分析9数据库逻辑结构设计11人机一体化设计133.2.1后台管理部分133.2.2前台部分13\o"CurrentDocument"第4章系统测试29\o"CurrentDocument"数据库连接29检测网站运行速度29\o"CurrentDocument"第5章总结32\o"CurrentDocument"参考文献33致谢34随着Internet技术的发展,人们的日常生活已经离不开网络。未来社会人们的生活和工作将越来越依赖于数字技术的发展,越来越数字化、网络化、电子化、虚拟化。Internet的发展历程以及目前的应用状况和发展趋势,可以充分地相信网络技术将极大的改变我们的生活和工作方式,甚至社会的价值观也会发生某种变化。本设计尝试用JAVA在网络上架构一个网上书店管理系统,以到达对网上书店的各项基本管理。本文从理论和实践两个角度出发,对一个网上书店管理系统进行设计与实现分析。关键词:网上书店管理JAVA、人刖百传统书店分布广泛,在市场有很多传统书店。这类书店占据了87%以上的图书市场;由于电子商务的迅速发展,网上书店国内目前并不少见,在google搜索引擎中输入“网上书店”搜索就有8970000项结果。但是因为信誉度的问题,只有当当、卓越少数几家网上书店真正实现全国范围的网上售书。因此,如果顾客想通过网络购书通常只有两种选择,当当、卓越或者是本地的网上书店;而其他购书方式,这类购书方式主要以出版社和书友会邮购为主,大约占据市场份额的7%。邮购通常是向出版社或者书友会,优点是图书种类齐全,缺点是速度慢,而且提高了购书成本。学校团购优点是因为集体购买可能图书的价格会较低,缺点是缺少自主性。传统书店分布广泛,符合顾客传统的消费习惯,信任度较高。但是对购买者来说需要花费很多交通以及挑选的时间,加上需要固定店铺,成本高,图书价格较高,另外如果店铺规模较小,书籍种类不能保证。这样就促使网上书店越来越成为可能。网上购书,具有价格低廉、高效、方便、种类齐全的特点,同时对于经营企业来说,由于不需要店铺,从而把成本降到了最低。但是传统的网上购书网站,使用的是快递和邮递相结合的方式送书,当顾客距离不在同一城市时,不可防止地继承了传统邮购方式的种种缺点。第1章概述1-1开发背景网上商城类似于现实世界当中的商店,差异是利用电子商务的各种手段,达成从买到卖的过程的虚拟商店,从而减少中间环节,消除运输成本和代理中间的差价,造就对普通消费,和加大市场流通带来巨大的发展空间。尽能的还消费者以利益,带动公司发展和企业腾飞,引导国民经济稳定快速发展,推动国内生产总值。且具有如下优势:★永不关门:每天24小时,每周7天。都可以进行商品的浏览与购买,工作时间可以随时与客服进行交流,解决购物中遇到的困难。★信息量大:更多的了解,增加了您的选择空间。★客户无限:全球的任何人都可以通过Internet访问您的商店,不受空间限制。★服务优质:网上商店,不但可以完成普通商店可以进行的所有交易,同时它还可以通过多媒体技术为用户提供更加全面的商品信息。★成本低廉:由于省去了店面费用,所以总体的成本降低很多,所以表现在消费品上的价格也会相对传统店面廉价很多。同时因为是大批量取货后分销的形式,所以价格优势比较明显。而网上书城则顾名思义,是网站式购书平台。提供高质量,更快捷,更方便的购书方式。网上书城不仅可用于图书的在线销售、下载,也有音碟、影碟的在线销售,版权交易、图书馆的采购、团购等功能的实现,你可以在线分享你喜欢的图书、音像、图书资讯等给你的好友。而且网站式的书城对图书的管理更加合理化,信息化。售书的同时还具有书籍类商品管理、购物车、订单管理、会员管理等功能,非常灵活的网站内容和文章管理功能。我国的网上书店虽然从数量上取得了一定的进展,但从售量而言却不尽人意,目前,国内尚无一家在网上零售领域形成绝对领先优势的网上书店。发展比较好的寥寥无几,比较成功的有当当书店〔:〃dangdang〕。1-2JAVA简介它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在电脑网络上的广■*■iiAdii■/■*■iiAdii■/HlrHlU^a^r^rr^j<』m・,r•〜ifiti^hpw«ntmntlonuuuLkraiainaQ.t--一、.一Pn^i・・i«ir-.tlllf]*LWylHiypiTlfflEiftHrt,putilxn^l小心rRbts祖r〃C-fO^mflFkMnMn«-rgmom:阔应用前景,于是改造了Oak,以Java”的名称正式发布。Java编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针〔以引用取代〕、运算符重载〔operatoroverloading〕、多重继承〔以接口取代〕等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在JavaSE1.5版本中,Java又引入了泛型编程〔GenericProgramming〕、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java不同于一般的编译执行电脑语言和解释执行电脑语言。它首先将源代码编译成二进制字节码〔bytecode〕,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了-次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广阔软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java平台是基于Java语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。1-3SQL简介SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以到达目的,这也意味着用SQL语言可以写出非常复杂的语句。结构化查询语言(StructuredQueryLanguage〕最早是旧M的圣约瑟研究实验室为其关系数据库管理系统SYSTEMR开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从旧M公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、DB2、Informix、SQLServer这些大型的数据库管理系统,还是像VisualFoxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。美国国家标准局(ANSI〕与国际标准化组织〔ISO〕已经制定了SQL标准。ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。ANSI同时也是ISO和InternationalElectrotechnicalCommission(IEC〕的成员之一。ANSI发布与国际标准组织相应的美国标准。1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。ANSI随之发布的相应标准是ANSISQL-92。ANSISQL-92有时被称为ANSISQL。尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循ANSISQL标准。SQLServer使用ANSISQL-92的扩展集,称为T-SQL,其遵循ANSI制定的SQL-92标准。SQL语言包含3个部分:数据定义语言DataDefinitionLanguage(DDL〕,定义:definition/例如:CREATE、DROP、ALTER等语句。数据操彳^语言DataManipulationLanguage(DML],操彳make/例如:INSERT〔插入〕、UPDATE〔修改〕、DELETE〔删除〕语句。数据控制语言DataControllingLanguage〔DCL〕,控制:control/例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。SQL语言包括三种主要程序设计语言类别的语句:数据定义语言〔DDL〕,数据操作语言〔DML〕及数据控制语言〔DCL〕。SQL是用于访问和处理数据库的标准的电脑语言。学习文档学习文档仅供参考学习文档学习文档仅供参考第2章需求分析2-1在Windows平台下配置JSP运行环境为了使系统能够正常运行JSP和相关程序,必须先配置好能够使用JSP的WEB艮务器。各种能使用Servlet技术的WEE®务器中,运用得最多的是Tomcat服务器,如果仅是为了用于测试程序,Tomcat的配置则显得太复杂了,本文推荐使用Resin服务器,Resin据称是最快的Servlet运行平台,不过限于单站点,对传统的一些网关支持不是很好,因此对于商业网站而言,不是最好的选择,不过如果仅是为了测试Servlet,这个Resin的安装可谓有点傻瓜化。Resin比较新的版本是,但目前实际用的版本的比较多,Resin可到官方站点下载:://caucho/download/本文使用的是版本,文件位置:如果你的电脑上已装好JDK直接把下载的resin包解压到D:盘根目录解压后即为服务器的目录,把本文的源程序jspweb文件夹也放在D:盘根目录,即是D:\jspweb为网站根目录,打开〔是一份XMLB式的配置文件〕,找到doc这里改为D:\jspweb,然后运行,在浏览器输入,看到了“我是JSP!”的字样了吧,你的Servlet服务器就这样配置成功了,为了能编译Servlet类,还需要做的事情是:把D:\resin-2.1.13\lib加入到windows的CLASSPATH环境变量中。2-2JSP、AS可口PHPK术之比较JSP与ASPPHP技术都是目前网上最流行的在服务器端运行的脚本技术,JSP能用JavaBeans技术封装,到达商业逻辑的目的,ASPX寸应之的是COMfi件,因此两者都能用于开发商业逻辑,PHP则更像于一个纯脚本,仅适合于普通的网站开发,而不能用作商业逻辑而被冠以“PersonHomePage”的名称,这是最贴切不过的了。JSP与ASPf比,JSP具有跨平台、安全、强大的可伸缩性的特点,而果硬要挑一些毛病,JSP相对别的脚本更加难掌握,因为精通JSP必须精通Java语言,对于中小型项目,我们要考虑开发人员、开发速度、开发成本等问题,在这方面ASP和PHP会比JSP更容易胜出。值得一提的是,ASP的最新版本与原来的ASP性质完全是不同的,它和JSP一样,都是一种编译性的脚本,本身完全与强大的Net框架结合,完美的支持Xml的各种应用,与昔日的ASP不可同日而语,但是无论是ASP还是,它都摆脱不了Windows平台本身,这是AS屋个致命的缺点。2-3JSP语法基础2-3-1嵌入了JAVA®言的HTM仪件把下面网页保存为:这就成了一个最简单的JSP页面了,其中是声明输出的文件类型为text/html,字符编码是gb2312,在JSP中里的内容表示的是JSP编译时的一些选项或向客户端发送的头信息的JSP指令,里的内容就是Java语言,如果有必要,更改适当设定,还可以使用javascript作为脚本,不过实际应用中很少有人这样做。2-3-2request、out&response--与访问者的交互接收客户端的请求和向客户端返回信息是动态网页最常做的事情,在JSP中,主要通过request、response、out三大对象实现这些功能。request对象的作用是接收用户通过URL或通过表单向发服务器发送请求信息和与用户电脑相关的一些信息。response对象用于网页传回用户端的回应。out用于传送回应的输出,即向客户端返回信息。把上面的例子稍作修改:保存为在浏览器上输入:“://localhost:8080/j1.jps?msg=我是JSP'看一下效果,这和的结果一样吧?但它输出的是客户端返回的信息,这在意义上完全不同于前者。2-3-3session--保持访问者的会话状态会话状态维持是Web应用开发者必须面对的问题。有多种方法可以用来解决这个问题,如使用Cookies、隐藏的表单输入域,或直接将状态信息附加到URL中。JavaServlet提供了一个在多个请求之间持续有效的会话对象,该对象允许用户存储和提取会话状态信息,JSP也内置了这个对象。Session最基本的用法是:创建一个会话session.putValue("名称","值");获得一个会话的值session.getValue("名称");2-3-4JSP其它基本内置对象JSP有九大内置对象,除了上述四种以外,还包括:pageContext网页的属性是在这里管理applicationServlet正在执行的内容学习文档仅供参考学习文档仅供参考学习文档仅供参考学习文档仅供参考configServlet的构架部件pageJSP网页本身exception针对错误网页,未捕捉的例外这些基本的内置对象是构成JSP页面的重要因子第3章详细设计本系统采用三层架构设计,它的工作原理如图3-1所示业务处理层用户界面层数据存信层业务处理层用户界面层数据存信层Q图3-1三层架构模型采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层。数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。数据库需求分析针对一般在线书店的需求,得出如下需求信息。?用户分为游客和已注册用户。?订单分为单张详细订单和总订单。?一个用户可以购买多本图书。?一个用户对应一张订单。?一个列表对应多张订单。针对本系统功能分析,总结出如下的需求信息。?用户,包括数据项:用户ID、用户名、密码。?图书,包括数据项:图书编号、图书名、价格、图书介绍?订单列表,包括数据项:订单编号、图书编号、购书数量?订单,包括数据项:订单编号、用户编号、下单时间。从本系统中规划出的实体有:用户实体、图书实体、订单实体、订单列表实体实体之间关系的E-R图如图3-5所示。图3-5实体关系E-R图用户信息实体的E-R图如图3-6所示图书实体的E-R图如图3-7所示。订单实体的E-R图如图3-8所示。订单列表实体的E-R图如图3-9所示图3-6图书实体E-R图图3-7用户实体E-R图图3-8订单实体E-R图订单列表图3-9订单列表实体E-R图数据库逻辑结构设计在线书店数据库中各个表的设计结果如下面的标和所示表3.1为图书信息列表book。IDint4自动编号,主键booknameint4书名bookclassvarchar255图书类别authorvarchar100yes图书作者publishfloat8yes出版社bookNovarchar100yes书号Contenttext16yes内容介绍pricetinyint1yes价格Amountint4yes总数量Leav_numberint4yes库存量pictureint4yes封面reg_timedatetime8yes入库时间3.2shop_use^字段名数据类型长度允许空说明

IDint4自动编号,会员编号usernamevarchar4no用户名passwordvarchar100no密码Namesint4yes会员级别Sexvarchar50yes名字Addrvarchar50yes地址Phonevarchar25yesPostvarchar25yesEmailvarchar25yes邮箱Retimedatetime8yes注册时间RegIpAddrvarchar20yes注册ip表3.3为订单表,记录订单信息ordersIDint4yes自动编号,订单编号order_idint4yes会员编号user_idint4yes图书编号quantityint4yes订购数量submit_timedatetime8yes提交订单时间consignmentTimedatetime8yes交货时间totalpricefloat8yes总价contentvarchar20yes备注ipAddrvarchar20yes用户ipisPayoffint11yes是否付款isSaleint11yes是否发货,记录订单列表信息allorder。表3.4订单列表allorder字段名数据类型长度允许空说明IDint4自动编号,卡类型编号orderIDint11yes订单号BookNoint11yes书号Amountint11yesbookadmin表3.5管理员信息表bookadmin字段名数据类型长度允许空说明AdminUservarchar20管理员用户名AdminPassvarchar50yes管理员密码,记录图书分类信息bookclass。表3.6图书分类表bookclass字段名数据类型长度允许空说明IDint4自动编号,卡类型编号Classnamevarchar30yes图书类别第4章详细设计4.1系统概述4.1.1用户界面部分图书选购〔可按分类查找图书,或者通过关键字进行查询〕。购物车功能。查看图书详细信息。用户注册。用户登录。查看用户的订单信息。修改用户个人信息。4.1.2管理界面部分现有图书管理:修改,删除,查看。用户管理:查看,修改,删除。订单管理:查看订单清单,更新订单付款,出货状态,删除订单。添加新图书。添加图书分类学习文档学习文档仅供参考学习文档学习文档仅供参考4.2详细代码及说明这是一个以客户为中心的交易平台,系统,因此需要检验每个用户的合法性,管理用户登录的样的功能。类中定义了个private属性和他们对应的setX()/getX()execute()getSql()操作。private属性分别是:privateStringusername;privateStringpasswd;privatebooleanisadmin;privatelonguserid=0;重要操作:主要介绍execute〔〕execute()操作功能:从数据库中查询用户信息。返回值:boolean型,如果取值成功返回设计思路:获得数据库连接对象Statement对象》调用句。程序主干部分代码:只有成为了系统的合法用户才能够使用这个login.java正是要完成这方法和默认构造函数和//登录用户名//登录密码//是否管理员登录//用户ID号truegetSql(),否则,返回false。Connection对象,ResultSet对象和方法获得sql语句»执行sql语publicbooleanexecute()throwsException{try{con=DataBase.getConnection();stmt=con.createStatement();rs=stmt.executeQuery(getSql());}catch(Exceptione){e.printStackTrace();}while(rs.next()){if(!isadmin){userid=rs.getLong("id");}flag=true;}该类主要负责图书的管理,包括图书的修改,查询,删除和添加等。op_book类有以下属性:privatebookabooks=newbook();//新的图书类privatejavax.servlet..ServletRequestrequest;//建立页面请求//对接收到的数据//显示图书列表向量数//显示的页码//每页显示的图书数//对接收到的数据//显示图书列表向量数//显示的页码//每页显示的图书数//页面总数//查询的记录getX()/setX()方法):是否正确privateVectorbooklist;组privateintpage=1;privateintpageSize=5;privateintpageCount=0;privatelongrecordCount=0;总数publicStringsqlStr="";op_book类有以下方法(省去了属性对应的book_search();完成图书查询,包括分类,关键字查询。delete();负责图书的删除。getOnebook();主要完成图书的单本查询,用于支持页面的“查看详细信息”。insert();负责图书的添加。to_String();把字符串以“ISO8859-1”编码形式输出,使页面正常显示。update();负责修改图书信息。

getRequest();负责接受页面传递过来的参数,分解并将参数存放到abooks对象中。重要操作:主要介绍getRequest()getRequest()方法功能:负责从页面接受表单数据并分解,设置abooks对象相应属性。参数设计:页面传递的Request对象,其中包括表单数据。返回值:boolean型,true表示成功,否则返回false。设计思想:获取页面传递的Request对象—》分解Request对象—》获取表单参数值—》把参数值设置成图书对象abooks相对应的属性值。程序主干代码:publicbooleangetRequest(javax.servlet.newrequest){ServletRequestrequest=newrequest;Stringrequest.getParameter("BookName");BookNameabooks.setBookName(to_String(BookName));Stringrequest.getParameter("author");authorabooks.setAuthor(to_String(author));Stringpublishrequest.getParameter("publish");;publicbooleangetRequest(javax.servlet.newrequest){ServletRequestrequest=newrequest;Stringrequest.getParameter("BookName");BookNameabooks.setBookName(to_String(BookName));Stringrequest.getParameter("author");authorabooks.setAuthor(to_String(author));Stringpublishrequest.getParameter("publish");;abooks.setPublish(to_String(publish));Stringrequest.getParameter("bookclass");bookclassabooks.setBookClass(bc);Stringbooknorequest.getParameter("bookno");abooks.setBookNo(to_String(bookno));Stringabooks.setBookNo(to_String(bookno));String picture =request.getParameter("picture");abooks.setPicture(to_String(picture));price =newFloat(request.getParameter("price")).floatValue();abooks.setPrice(price);amount = newInteger(request.getParameter("amount")).intValue();abooks.setAmount(amount);String Content =request.getParameter("Content");abooks.setContent(to_String(Content));3:op_user.java:为了使用上的方便,我们把对用户的管理,包括用户的添加,删除,修改,查询等集合成一个管理类。该类具有以下属性:privateuseruser=newuser();用户对象privateprivateuseruser=newuser();用户对象private请求privateVectoruserlist;privateintpage=1;privateintpageSize=8;privateintpageCount=0;privatelongrecordCount=0;privateStringmessage="";privateStringusername="";javax.servlet..ServletRequest// 新的request;//建立页面//显示用户列表向量数组//显示的页码//每页显示的图书数//页面总数// 查询的记录总数// 出错信息提示//注册后返回的用户名privatelonguserid=0; //注册后返回的用户ID该类具有的主要方法〔省去了属性相关的privatelonguserid=0; //注册后返回的用户ID该类具有的主要方法〔省去了属性相关的getX()/setX()操作〕:add():负责用户的添加。delete():负责删除指定 ID的用户。get_alluser(): 取出书店所有用户的信息。getGbk(): 返回指定字符串的GB磔码。getUserinfo(): 负责取得用户的详细信息。update(): 负责修改用户资料。getRequest():获取表单数据,并分解存储。我们把业务逻辑和对订单以及和订单列表的管理集成到了该类当中。该类具有以下属性:privatejavax.servlet..ServletRequestrequest;//建立页面请求privateSessionsession;//privatebooleansqlflag=true;//privateVectorpurchaselist;//privateVectorallorder;//privateVectororder_list;//privateintbooknumber=0;//privatefloatall_price=0;//privatebooleanisEmpty=false;//privateintleaveBook=0;//privateStringorderId="";//privatebooleanisLogin=true;//privateintpage=1;//privateintpageSize=15;//privateintpageCount=0;//privatelongrecordCount=0;//该类的主要操作〔省去了属性相关的页面的session;对接收到的数据是否正确显示图书列表向量数组订购单列表订单清单列表购书总数量购书总价钱库中的书数量是否够购买的数库存数量用户订单号用户是否登录!显示的页码每页显示的订单数页面总数查询的记录总数getX()/setX()操作〕addnew():负责向购物车中添加新购买的图书。delete():负责从数据库中删除指定ID的订单。modiShoper():负责修改购物车中已选的图书。delShoper():负责删除购物车中的物品。getAllorder():负责从数据库中的订单列表中查询指定用户的订单列表。getGbk():获得指定字符串的GB媪码。getOrder():获得单个订单对象。payout():提交购物车,把订单插入到数据库中。update():该方法负责当用户付款后,把数据中对应订单的是否付款标记修改成已付状态。重要操作:主要介绍addnew()addnew()方法功能:负责向购物车中添加一条新记录。参数设计:页面传递的request对象。返回值:boolean类型,成功返回true,否则返回false。设计思路:从页面获得表单数据〔request对象中〕》获得图书编号等参数值—》判断购买数量是否合法—》如果是可以操作,否则不能操作—》判断是否第一次购买—》如果是第一次购买,按第一次购买操作—》否则查询购买列表,找是否有相应项,有则直接修改数量—》否则添加新记录。函数代码:publicbooleanaddnew(ServletRequestnewrequest)throwsException{request=newrequest;StringID=request.getParameter("bookid");StringAmount=request.getParameter("amount");longbookid=0;intamount=0;try{bookid=Long.parseLong(ID);amount=Integer.parseInt(Amount);}catch(Exceptione){returnfalse;}if(amount<1)returnfalse;session=request.getSession(false);if(session==null){returnfalse;}purchaselist=(Vector)session.getAttribute("shopcar");StringsqlStr="selectleav_numberfrombookwhereid="+bookid;try{con=DataBase.getConnection();stmt=con.createStatement();rs=stmt.executeQuery(sqlStr);if(rs.next()){if(amount>rs.getInt(1)){leaveBook=rs.getInt(1);isEmpty=true;returnfalse;}}DataBase.closeResultSet(rs);DataBase.closeStatement(stmt);DataBase.closeConnection(con);}catch(SQLExceptione){returnfalse;}allorderiList=newallorder();iList.setBookNo(bookid);iList.setAmount(amount);booleanmatch=false;//是否购买过该图书if(purchaselist==null){//第一次购买purchaselist=newVector();purchaselist.addElement(iList);}else{//不是第一次购买for(inti=0;i<purchaselist.size();i++){allorderitList=(allorder)purchaselist.elementAt(i);学习文档学习文档仅供参考学习文档仅供参考学习文档仅供参考if(iList.getBookNo()==itList.getBookNo()){itList.setAmount(itList.getAmount()+iList.getAmount());purchaselist.setElementAt(itList,i);match=true;break;}//ifnamematches结束"/for循环结束if(!match)purchaselist.addElement(iList);}session.setAttribute("shopcar",purchaselist);returntrue;}1:界面头和界面尾设计为了提高代码的重用性,我把客户界面部分相同的头和尾作成两个独立的块,分别命名为head.inc和tail.inc。这两个文件是单纯的html代码,在jsp页面中只要通过以下语句就可以实现对两个文件的调用:<%@includefile=''"%<%@includefile=''"%他们的效果如下列图4-1:慎度斗后在式式IVF错归血书店啦:需跻林试学电,:3E33ES9电子卑小:.’惮如醒迎看丫出R.qnmet图4-1界面头和尾部分显示效果用户登录界面login.jsp代码如下:<%@pagecontentType="text/html;charset=gb2312"%><%@pagesession="true"%><linkrel="stylesheet"href="css.css"type="text/css"><jsp:useBeanid="login"scope="page"class="bookshop.run.login"/><%Stringmesg="";if(request.getParameter("username")!=nullif(&&!request.getParameter("username").equals("")){Stringusername=request.getParameter("username");Stringpasswd=request.getParameter("passwd");username=newString(username.getBytes("ISO8859-1"));passwd=newString(passwd.getBytes("ISO8859-1"));login.setUsername(username);login.setPasswd(passwd);//out.print(username+passwd);if(login.execute()){session.setAttribute("username",username);Stringuserid=Long.toString(login.getUserid());session.setAttribute("userid",userid);response.sendRedirect("booklist.jsp");%><%}else{mesg="登录出错!";}}%>2:用户登录模块的设计。为了检验用户是否合法,所以需要输入用户名和密码来验证用户的合法性,用户登录模块刚好完成这样的一个功能。该模块需要用到login.java(见4.4.31)这个bean。需要设计一个表单让用户输入信息。效果图如下:图4-2

JiWMr»T»IVEJiWMr»T»IVE图4-2用户登录界面3.在线购书功能模块设计。在该模块用户可以看见书店现有的样子,用户可以查找书通过分类,关键字查找。户可以购买图书,页可以查看图书的详细资料,还可以跳转到其他的模块,例如查看购物车,查看订单信息等。在这个模块中我们要用到JavaBean有,,其中我把导航条抽出来单独作为一个模块:sub.inc左边的查找框也单独设计成一个模块:left.inc两个纯粹的html代码部分,在jsp页面中直接调用。效果如下列图4-3所示:在墀密BI在墀密BI的曲4Il二单+更I在**七I空苒⑥«e>ii♦・⑷rjiiii在罐vfhijp Q*3询W站号。=愕金,口 *J— *Asa*』话—••提・・flW*H0,*由幺―・・址说M峰/11TL 二0k川百・一£H出:事JE 1M孰f 巾IMMB・口]@骞HRaiiJI| *J步工O僻鼻电F15店田芍历赳史曾物人,本篇IS书奸美,驻,本篇IS书奸美,驻翎!历史史就的用甘・国,戋神于I共刖;M・共七v[1^|啊书言怵导崂苦H与例方.导加旅解救海拜*0期*1中国历史文通t至三册,工甄国[即£>也汽世卑少触艮甘♦常讨I"」l川的项鲁人世空盘代史TH5-EW8世期当相史“斜At帼:■作者金花手

蜘呻号现不和1M.1^$甘Nii*

mrtd等*nts露出装社的也择踮史中国*利东吗n»ayx<t电出版元亘网g节史中国工利飞M.U转耳11文化电出钺壮元当蚩,就史北现图书恒飘。西连日W化出无li元曲式砧先中国F-利-26,0蛇式■;1型化电出徐壮元sa<中国mw;x.iasja电出酬元询可电子二业出20.0注五;1映位无生二:要ir变比

呵3明文-当内卤妁页硒tMWFyHkj-fe娴亦=图4-3在线购书模块效果显示在线购书页面模块booklist.jsp代码如下:<%@pagecontentType="text/html;charset=gb2312"%><meta-equiv="Content-Type"content="text/html;charset=gb2312"><%@pageimport="java.util.*"%><%@pageimport="bookshop.book.bookclass"%><%@pagesession="true"%><%@pageimport="bookshop.book.book"%><jsp:useBeanid="book"scope="page"class="bookshop.book.book"/><jsp:useBeanid="book_list"scope="page"class="bookshop.run.op_book"/><jsp:useBeanid="classlist"scope="page"class="bookshop.run.op_bookclass"/><%intpages=1;Stringmesg="";if(request.getParameter("page")!=null&&!request.getParameter("page").equals("")){Stringrequestpage=request.getParameter("page");try{pages=Integer.parseInt(requestpage);}catch(Exceptione){mesg="你要找的页码错误!";}book_list.setPage(pages);}%>4:购物车模块页面设计。在购物车这个模块当中用户可以修改购买数量,可以删除已选图书,可以提交购物车,也可以清空购物车,同时也可以继续购书。在这个模块中我们用到了,,三个JavaBean.关于他们的介绍在前面已经罗列出来了这里就不在一一说明了。该模块运行时效果如图4-4所示:图4-4购物车模块显示效果页面核心代码如下shopcar.jsp:<%@pagecontentType="text/html;charset=gb2312"%><meta-equiv="Content-Type"content="text/html;charset=gb2312"><%@pageimport="java.util.*"%><%@pagesession="true"%><%@pageimport="bookshop.book.*"%><%@pageimport="bookshop.run.op_book"%><%@pageimport="bookshop.run.op_buy"%><jsp:useBeanid="book_list"scope="page"class="bookshop.run.op_book"/><jsp:useBeanid="classlist"scope="page"class="bookshop.run.op_bookclass"/><jsp:useBeanid="shop"scope="page"class="bookshop.run.op_buy"/><%Stringuserid=(String)session.getAttribute("userid");if(userid==null)userid="";Stringmodi=request.getParameter("modi");Stringdel=request.getParameter("del");StringpayoutCar=request.getParameter("payout");StringclearCar=request.getParameter("clear");Stringmesg="";if(modi!=null&&!modi.equals("")){if(!shop.modiShoper(request)){if(shop.getIsEmpty())mesg="你要的修改购买的图书数量不足你的购买数量!";elsemesg="修改购买数量出错!";}else{mesg="修改成功";}}elseif(del!=null&&!del.equals("")){if(!shop.delShoper(request)){mesg="删除清单中的图书时出错!";}}elseif(payoutCar!=null&&!payoutCar.equals("")){if(shop.payout(request)){mesg="你的购物车中的物品已提交给本店,你的订单号为"+shop.getOrderId()+"<br>请及时付款,以便我们发货!";session.removeAttribute("shopcar");}else{if(!shop.getIsLogin())mesg="你还没有登录,请先<ahref=login.jsp>登录</a>后再提交”;elsemesg="对不起,提交出错,请稍后重试,shop.payout出错!";}}elseif(clearCar!=null&&!clearCar.equals("")){session.removeAttribute("shopcar");mesg="购物车中的物品清单已清空";}%>5.其他页面显示效果图。w(pasfl'IiItCVJPftiiiUlm&Hfi*>X!!VfflbUiG•uii,@,国凰AO3«mi*fl-7*EgfHij告映・港麻切nwm炉皿电自mwa(3asm♦埴城^jMtpF/lElbn)!MWXfciEi金』¥二口碑官&■”更中W—事兔|国胃・书[懵・温,・M」3也•--,*—g——*T一/胆:期«坦利U里也速加聒誓S“燧加E.5访)Bdl3LU春翦国J领组王|四皿|触斑“晒罚匕TW而]盹0ft]14lllOWnfnullBHV香114IU3Z1STI1null90.1看港面与店在找班次叶云5V书匾埴北:湖前帆(光学.I——■■——■一一-■,■图4-5订单页面显示效果订单页面我们可以看到自己已经提交的所有订单,可以查看订单的状态和详细情况。并色环境以弹出窗口的形式显示订单信息。这种功能主要是通过javascript脚本语言实现的。如:<scriptlanguage="javascript">functionopenScript(url,name,width,height){varWin=window.open(url,name,'width='+width+',height='+height+',resizable=1,scrollbars=yes,menubar=no,status=yes');}functionchecklogin(){if(document.payout.userid.value==""){alert("你还没有登录,请登录后再提交购物清单。");returnfalse;}returntrue;}functioncheck(){if(document.change.amount.value<1){alert("你的购买数量有问题");document.change.amount.focus();returnfalse;returntrue;}</script>学习文档仅供参考学习文档仅供参考学习文档学习文档仅供参考第5章系统测试数据库连接在系统的整个开发工程中,我们最容易碰到的难题是数据库连接这个模块。在JavaBean中连接数据库注意的一些事项有:首先要下载MicrosoftSQLServer2000DriverforJDBC这个包,并安装。把MicrosoftSQLServer2000DriverforJDBC的lib文件夹下的:msbase.jar,mssqlserver.jar,msutil.jar三个文件拷贝到Tomcat安装目录下的commen/lib文件夹下。把msbase.jar,mssqlserver.jar,msutil.jar三个文件的路径添加到CLASSPATH。如果使用的操作系统是Windowsxp在安装SQLServer2000后必须下载SP3补丁并安装,否则打不开1433端口号。在数据库连接中出现问题将会出现异常提示信息:org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)javax.servlet..Servlet.service(Servlet.java:802)rootcausebookshop.run.login.execute(login.java:83)org.apache.jsp.bookshop.admin.adm_005flogin_jsp._jspService(adm_005flogin_jsp.java:72)org.apache.jasper.runtime.JspBase.service(JspBase.java:94)javax.servlet..Servlet.service(Servlet.java:802)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)292)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)javax.servlet..Servlet.service(Servlet.java:802)如图5-1所示:javax.servlet..Servlet.service(Servlet.java:802)如图5-1所示:图5-1数据库连接异常这个时候可能出现的问题是数据库服务器没有开启,或者是没有安装Server2000DriverforJDBC这个包。MicrosoftSQL一、用Ajax提高用户体验由于我的网站上链接字体的大小是根据点击次数决定,所以每次点击都要提交到服务器端并记录次数,再在客户端打开网站链接。这在localhost测试的时候没有发现问题,但是部署到服务器上,会感到明显的等待。解决方法就是用Ajax。用户点击网站链接后就直接打开,再通过Ajax将点击的事件提交到服务器端记录。这样用户感觉不到

温馨提示

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

评论

0/150

提交评论