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

下载本文档

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

文档简介

./摘要JAVA语言是目前Internet上大型的WEB应用程序开发时使用得最热门的编程语言,本文描述了JAVA和JSP技术的特点以及在互联网上的使用情况,介绍这两种技术的重要编程方法和两者之关的联系,并完成一个基于这种技术的网上书店系统。[关键字]JAVA,JavaBeans,Servlet,JSP,网络编程,电子商务,网上书店目录前言3第1章概述41.1JSP简介和运行原理41.2开发背景5第2章需求分析62.1系统组成:62.2系统要求配置6第3章系统设计73.1数据库设计73.1.1数据库需求分析73.1.2数据库逻辑结构设计10第4章详细设计124.1系统概述124.1.1用户界面部分124.1.2管理界面部分124.2详细代码及说明124.2.1实现bookshop.run包124.2.2客户界面设计与实现20第5章系统测试275.1数据库连接275.2检测运行速度27第6章总结30参考文献31致32前言随着计算机、网络、通信技术的发展和日益融合,以及Internet的普及应用,包括电子商务〔EC、视频会议、网上书店等在的一些应用已开始引起社会的关注,并逐步走进人们的日常生活。JSP是Sun公司推出的一种开发技术,Sun公司借助自己在Java上的不凡造诣,又把人们引进JSP时代,JSP即JavaServerPage,它可以在Servlet和JavaBean的支持下,完成功能强大的Web应用程序。所以,在我的毕业设计中,我采用了JSP作为开发工具,构建了一个能实现简单的电子商务的小型动态商务——网上书店销售系统。通过这次的毕业设计,我了解了目前流行的动态商务的构成和运作原理,掌握了用JSP构建动态的相关知识和技术原理,锻炼了自己的动手实践能力。在这次毕业设计过程中,我得到了指导老师杜雪平老师的悉心指导。在此,我对你表示衷心的感!第1章概述1-1JAVA语言简介Java是一种简单易用、完全面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具。自从1995年正式问世以来,Java的快速发展已经让整个Web世界发生了翻天覆地的变化。在早期,Java比较多的用在浏览器上,插入到网页中<即是JavaApplet程序>,成为最灵活、最强大的网页多媒体的载体,但由于Java虚拟机相对于个人电脑而言,有占用资源大,安全性相对较差等缺点,Applet逐渐的被后起之秀Flash所替代,但随着JavaServlet的推出,Java在电子商务方面开始崭露头角,最新的JSP<JavaServerPage>技术的推出,更是让Java成为基于Web的应用程序的首选开发工具,目前的Java技术已成为所有大型电子商务项目的必然选择。1-2开发背景我国的网上书店虽然从数量上取得了一定的进展,但从售量而言却不尽人意,目前,国尚无一家在网上零售领域形成绝对领先优势的网上书店。发展比较好的寥寥无几,比较成功的有当当书店〔.dangdang.。伴随着电子商务技术的不断成熟,电子商务的功能也越来越强大,注册用户可以在网上搜索购买到自己想要的各种商品,初步让人们体会到了足不出户,便可随意购物的快感。我的毕业设计也就正是一个电子商务系统的开发网上商品销售系统。JAVA技术简介2-1在Windows平台下配置JSP运行环境为了使系统能够正常运行JSP和相关程序,必须先配置好能够使用JSP的WEB服务器。各种能使用Servlet技术的WEB服务器中,运用得最多的是Tomcat服务器,如果仅是为了用于测试程序,Tomcat的配置则显得太复杂了,本文推荐使用Resin服务器,Resin据称是最快的Servlet运行平台,不过限于单站点,对传统的一些网关支持不是很好,因此对于商业而言,不是最好的选择,不过如果仅是为了测试Servlet,这个Resin的安装可谓有点傻瓜化。Resin比较新的版本是3.x,但目前实际用的2.x版本的比较多,Resin可到官方站点下载:.caucho./download/本文使用的是版本,文件位置:如果你的电脑上已装好JDK,直接把下载的resin包解压到D:盘根目录解压后即为服务器的目录,把本文的源程序jspweb文件夹也放在D:盘根目录,即是D:\jspweb为根目录,打开D:\resin-2.1.13\conf\resin.conf〔是一份XML形式的配置文件,找到doc这里改为D:\jspweb,然后运行D:\resin-2.1.13\bin\httpd.exe,在浏览器输入localhost:8080/j1.jsp,看到了"我是JSP!"的字样了吧,你的Servlet服务器就这样配置成功了,为了能编译Servlet类,还需要做的事情是:把D:\resin-2.1.13\lib加入到windows的CLASSPATH的环境变量中。2-2JSP、ASP和PHP技术之比较JSP与ASP、PHP技术都是目前网上最流行的在服务器端运行的脚本技术,JSP能用JavaBeans技术封装,达到商业逻辑的目的,ASP对应之的是COM组件,因此两者都能用于开发商业逻辑,PHP则更像于一个纯脚本,仅适合于普通的开发,而不能用作商业逻辑而被冠以"PersonHomePage"的名称,这是最贴切不过的了。JSP与ASP相比,JSP具有跨平台、安全、强大的可伸缩性的特点,而果硬要挑一些毛病,JSP相对别的脚本更加难掌握,因为精通JSP必须精通Java语言,对于中小型项目,我们要考虑开发人员、开发速度、开发成本等问题,在这方面ASP和PHP会比JSP更容易胜出。值得一提的是,ASP的最新版本ASP.NET与原来的ASP性质完全是不同的,它和JSP一样,都是一种编译性的脚本,本身完全与强大的Net框架结合,完美的支持Xml的各种应用,与昔日的ASP不可同日而语,但是无论是ASP还是ASP.NET,它都摆脱不了Windows平台本身,这是ASP一个致命的缺点。2-3JSP语法基础2-3-1嵌入了JAVA语言的HTML文件把下面网页保存为:j1.jsp这就成了一个最简单的JSP页面了,其中是声明输出的文件类型为text/html,字符编码是gb2312,在JSP中里的容表示的是JSP编译时的一些选项或向客户端发送的头信息的JSP指令,里的容就是Java语言,如果有必要,更改适当设定,还可以使用javascript作为脚本,不过实际应用中很少有人这样做。2-3-2request、out&response--与访问者的交互接收客户端的请求和向客户端返回信息是动态网页最常做的事情,在JSP中,主要通过request、response、out三大对象实现这些功能。request对象的作用是接收用户通过URL或通过表单向发服务器发送请求信息和与用户计算机相关的一些信息。response对象用于网页传回用户端的回应。out用于传送回应的输出,即向客户端返回信息。把上面的例子稍作修改:保存为j2.jsp在浏览器上输入:"localhost:8080/j1.jps?msg=我是JSP"看一下效果,这和j1.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所示。图3-1三层架构模型采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层。3.1数据库设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。3.1.1数据库需求分析针对一般在线书店的需求,得出如下需求信息。用户分为游客和已注册用户。订单分为单详细订单和总订单。一个用户可以购买多本图书。一个用户对应一订单。一个列表对应多订单。针对本系统功能分析,总结出如下的需求信息。用户,包括数据项:用户ID、用户名、密码。图书,包括数据项:图书编号、图书名、价格、图书介绍。订单列表,包括数据项:订单编号、图书编号、购书数量。订单,包括数据项:订单编号、用户编号、下单时间。从本系统中规划出的实体有:用户实体、图书实体、订单实体、订单列表实体。订购用户订购用户订单列表订单图书11 NN图3-5实体关系E-R图用户信息实体的E-R图如图3-6所示。图书实体的E-R图如图3-7所示。订单实体的E-R图如图3-8所示。订单列表实体的E-R图如图3-9所示。图书图书图书编号图书名称分类编号封面图3-6图书实体E-R图用户用户用户名密码用户编号E-mail图3-7用户实体E-R图订单订单订单编号用户编号图书编号订购数量图3-8订单实体E-R图订单列表订单列表订单号用户编号图书编号是否付款图3-9订单列表实体E-R图3.1.2数据库逻辑结构设计在线书店数据库中各个表的设计结果如下面的标和所示。表3.1为图书信息列表book。表3.1图书信息表book字段名数据类型长度允许空说明IDint4自动编号,主键booknameint4书名bookclassvarchar255图书类别authorvarchar100yes图书作者publishfloat8yesbookNovarchar100yes书号Contenttext16yes容介绍pricetinyint1yes价格Amountint4yes总数量Leav_numberint4yes库存量pictureint4yes封面reg_timedatetime8yes入库时间表3.2为用户信息列表shop_user。表3.2用户信息表shop_user字段名数据类型长度允许空说明IDint4自动编号,会员编号usernamevarchar4no用户名passwordvarchar100no密码Namesint4yes会员级别Sexvarchar50yes名字Addrvarchar50yes地址Phonevarchar25yesPostvarchar25yes邮编Emailvarchar25yesRetimedatetime8yes注册时间RegIpAddrvarchar20yes注册ip表3.3为订单表,记录订单信息orders。表3.3订单信息表orders字段名数据类型长度允许空说明IDint4yes自动编号,订单编号order_idint4yes会员编号user_idint4yes图书编号quantityint4yes订购数量submit_timedatetime8yes提交订单时间consignmentTimedatetime8yes交货时间totalpricefloat8yes总价contentvarchar20yes备注ipAddrvarchar20yes用户ipisPayoffint11yes是否付款isSaleint11yes是否发货表3.4为订单列表,记录订单列表信息allorder。表3.4订单列表allorder字段名数据类型长度允许空说明IDint4自动编号,卡类型编号orderIDint11yes订单号BookNoint11yes书号Amountint11yes数量表3.5书店管理员信息表,记录管理员信息bookadmin。表3.5管理员信息表bookadmin字段名数据类型长度允许空说明AdminUservarchar20管理员用户名AdminPassvarchar50yes管理员密码表3.6图书分类信息表,记录图书分类信息bookclass。表3.6图书分类表bookclass字段名数据类型长度允许空说明IDint4自动编号,卡类型编号Classnamevarchar30yes图书类别第4章详细设计4.1系统概述4.1.1用户界面部分图书选购〔可按分类查找图书,或者通过关键字进行查询。购物车功能。查看图书详细信息。用户注册。用户登录。查看用户的订单信息。修改用户个人信息。4.1.2管理界面部分现有图书管理:修改,删除,查看。用户管理:查看,修改,删除。订单管理:查看订单清单,更新订单付款,出货状态,删除订单。添加新图书。添加图书分类。4.2详细代码及说明4.2.1实现bookshop.run包1:login.java这是一个以客户为中心的交易平台,只有成为了系统的合法用户才能够使用这个系统,因此需要检验每个用户的合法性,管理用户登录的login.java正是要完成这样的功能。类中定义了个private属性和他们对应的setX<>/getX<>方法和默认构造函数和execute<>getSql<>操作。private属性分别是:privateStringusername; //登录用户名privateStringpasswd; //登录密码privatebooleanisadmin; //是否管理员登录privatelonguserid=0; //用户ID号重要操作:主要介绍execute〔execute<>操作功能:从数据库中查询用户信息。返回值:boolean型,如果取值成功返回true,否则,返回false。设计思路:获得数据库连接对象Connection对象,ResultSet对象和Statement对象――》调用getSql<>方法获得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;}………}2:op_book.java该类主要负责图书的管理,包括图书的修改,查询,删除和添加等。op_book类有以下属性:privatebookabooks=newbook<>; //新的图书类privatejavax.servlet.http.HttpServletRequestrequest;//建立页面请求privatebooleansqlflag=true; //对接收到的数据是否正确privateVectorbooklist; //显示图书列表向量数组privateintpage=1; //显示的页码privateintpageSize=5; //每页显示的图书数privateintpageCount=0; //页面总数privatelongrecordCount=0; //查询的记录总数publicStringsqlStr="";op_book类有以下方法<省去了属性对应的getX<>/setX<>方法>: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.http.HttpServletRequestnewrequest>{………request=newrequest;StringBookName=request.getParameter<"BookName">;abooks.setBookName<to_String<BookName>>;Stringauthor=request.getParameter<"author">;abooks.setAuthor<to_String<author>>;Stringpublish=request.getParameter<"publish">;;abooks.setPublish<to_String<publish>>;Stringbookclass=request.getParameter<"bookclass">;abooks.setBookClass<bc>;Stringbookno=request.getParameter<"bookno">;abooks.setBookNo<to_String<bookno>>;Stringpicture=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>;StringContent=request.getParameter<"Content">;abooks.setContent<to_String<Content>>;……..}3:op_user.java: 为了使用上的方便,我们把对用户的管理,包括用户的添加,删除,修改,查询等集合成一个管理类。该类具有以下属性:privateuseruser=newuser<>; //新的用户对象privatejavax.servlet.http.HttpServletRequestrequest;//建立页面请求privateVectoruserlist; //显示用户列表向量数组privateintpage=1; //显示的页码privateintpageSize=8; //每页显示的图书数privateintpageCount=0; //页面总数privatelongrecordCount=0; //查询的记录总数privateStringmessage=""; //出错信息提示privateStringusername=""; //注册后返回的用户名privatelonguserid=0; //注册后返回的用户ID该类具有的主要方法〔省去了属性相关的getX<>/setX<>操作:add<>:负责用户的添加。delete<>:负责删除指定ID的用户。get_alluser<>:取出书店所有用户的信息。getGbk<>:返回指定字符串的GBK编码。getUserinfo<>:负责取得用户的详细信息。update<>:负责修改用户资料。getRequest<>:获取表单数据,并分解存储。4:op_buy.java我们把业务逻辑和对订单以及和订单列表的管理集成到了该类当中。该类具有以下属性:privatejavax.servlet.http.HttpServletRequestrequest;//建立页面请求privateHttpSessionsession;//页面的session;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;//查询的记录总数该类的主要操作〔省去了属性相关的getX<>/setX<>操作addnew<>:负责向购物车中添加新购买的图书。delete<>:负责从数据库中删除指定ID的订单。modiShoper<>:负责修改购物车中已选的图书。delShoper<>:负责删除购物车中的物品。getAllorder<>:负责从数据库中的订单列表中查询指定用户的订单列表。getGbk<>:获得指定字符串的GBK编码。getOrder<>:获得单个订单对象。payout<>:提交购物车,把订单插入到数据库中。update<>:该方法负责当用户付款后,把数据中对应订单的是否付款标记修改成已付状态。重要操作:主要介绍addnew<>addnew<>方法功能:负责向购物车中添加一条新记录。参数设计:页面传递的request对象。返回值:boolean类型,成功返回true,否则返回false。设计思路:从页面获得表单数据〔request对象中》获得图书编号等参数值—》判断购买数量是否合法—》如果是可以操作,否则不能操作—》判断是否第一次购买—》如果是第一次购买,按第一次购买操作—》否则查询购买列表,找是否有相应项,有则直接修改数量—》否则添加新记录。函数代码:publicbooleanaddnew<HttpServletRequestnewrequest>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;}4.2.2客户界面设计与实现1:界面头和界面尾设计。为了提高代码的重用性,我把客户界面部分相同的头和尾作成两个独立的块,分别命名为head.inc和tail.inc。这两个文件是单纯的html代码,在jsp页面中只要通过以下语句就可以实现对两个文件的调用:<%includefile=’’/bookshop/inc/head.inc"%><%includefile=’’/bookshop/inc/head.inc"%>他们的效果如下图4-1:图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">!=null&&!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图4-2用户登录界面3.在线购书功能模块设计。 在该模块用户可以看见书店现有的样子,用户可以查找书通过分类,关键字查找。户可以购买图书,页可以查看图书的详细资料,还可以跳转到其他的模块,例如查看购物车,查看订单信息等。在这个模块中我们要用到JavaBean有,,三个JavaBean。对于他们的介绍我已经在前面介绍了这里就不在一一罗列了。详情见4.2和4.3 其中我把导航条抽出来单独作为一个模块:sub.inc左边的查找框也单独设计成一个模块:left.inc两个纯粹的html代码部分,在jsp页面中直接调用。效果如下图4-3所示:图4-3在线购书模块效果显示在线购书页面模块booklist.jsp代码如下:<%pagecontentType="text/html;charset=gb2312"%><metahttp-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"%><metahttp-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="你要的修改购买的图书数量不足你的购买数量!"; else mesg="修改购买数量出错!"; }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.其他页面显示效果图。图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章系统测试5.1数据库连接在系统的整个开发工程中,我们最容易碰到的难题是数据库连接这个模块。在JavaBean中连接数据库注意的一些事项有:1首先要下载MicrosoftSQLServer2000DriverforJDBC这个包,并安装。2把MicrosoftSQLServer2000DriverforJDBC的lib文件夹下的:msbase.jar,mssqlserver.jar,msutil.jar三个文件拷贝到Tomcat安装目录下的commen/lib文件夹下。3把msbase.jar,mssqlserver.jar,msutil.jar三个文件的路径添加到CLASSPATH中。4如果使用的操作系统是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.http.HttpServlet.service<HttpServlet.java:802>rootcause bookshop.run.login.execute<login.java:83> org.apache.jsp.bookshop.admin.adm_005flogin_jsp._jspService<adm_005flogin_jsp.java:72> org.apache.jasper.runtime.HttpJspBase.service<HttpJspBase.java:94> javax.servlet.http.HttpServlet.service<HttpServlet.java:802> org.apache.jasper.servlet.JspServletWrapper.service<JspServletWrapper.java:324> org.apache.jasper.servlet.JspServlet.serviceJspFile<JspServlet.java:292> org.apache.jasper.servlet.JspServlet.service<JspServlet.java:236> javax.servlet.http.HttpServlet.service<HttpServlet.java:802>如图5-1所示:图5-1数据库连接异常这个时候可能出现的问题是数据库服务器没有开启,或者是没有安装MicrosoftSQLServer2000DriverforJDBC这个包。5.2检测运行速度一、用Ajax提高用户体验由于我的上字体的大小是根据点击次数决定,所以每次点击都要提交到服务器端并记录次数,再在客户端打开。这在localhost测试的时候没有发现问题,但是部署到服务器上,会感到明显的等待。解决办法就是用Ajax。用户点击后就直接打开,再通过Ajax将点击的事件提交到服务器端记录。这样用户感觉不到任何延时。

二、将逻辑移到客户端的javascript中在开始的时候,"标签高亮"和"手气不错"的功能都是提交到服务器端操作,然后返回结果的。后来,我发现其实很多逻辑是可以移到客户端,由javascript来实现的。Javascript非常强大,可以完成很多复杂的逻辑。将逻辑移到客户端的javascript中,可

温馨提示

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

最新文档

评论

0/150

提交评论