电子商务网站开发--小型网上书店课程设计(JSP)(含完整源代码)18254.docx
完整的简单jsp网上书店详细实例电子商务网站开发-小型网上书店课程设计(JSP)其中包括的详细需求、业务分析、数据库、源代码我们使用JSPP和Javaa Beann来构建一个个网上书店。介介绍的例子可可以分成两大大部分,第一一部分是普通通程序,用于于客户在网上上选购图书,第第二部分是管管理程序,用用于在服务器器端处理客户户的定单。客客户端程序由由以下几个部部分构成:defaultt.jsp:会员登录界界面(首页);checkloogon.jjsp:检测测登录代码和和密码是否一一致,根据由由JavaBBean返回回的结果显示示不同的信息息。BuyerBeean:会员员的合法性检检验所用的BBean;booklisst.jspp:给登录会会员显示当前前书店中可供供选择的图书书;addcartt.jsp:将所选的图图书加入购物物车;shoppinngcartt.jsp:查看购物车车的内容;本例的数据库采采用Acceess(.MMDB数据库库),对数据据库的访问采采用便于理解解的JDBCC-ODBCC方式,在使使用本例前先先在本地数据据库建立一个个ODBC数数据源:boookstoore。设置步骤如下:(1)在开始->设置->>控制面版(WWin98、NNT4.0)中中选取“数据源(OODBC)”;在Winn 20000 Proffessioonal和SServerr中分别位于于“开始->设设置->控制制面版->管管理工具”和“开始->程程序->管理理工具”下。(2)启动“数数据源(ODDBC)”配置程序,界界面如图155-1所示。图15-1 ODBC数数据源管理界界面(3)在图155-1中“系统DSNN”选项下单击击“添加”按钮,来添添加一个系统统的数据源(DDSN),则则出现如图115-2所示示数据源驱动动程序选择界界面:图15-2 数据源驱动动程序选择界界面(4)在图155-2中选择择“Microosoft Accesss Driiver (*.mdbb)”单击“完成”加载Acccess数据据库的驱动,则则出现如图115-3所示示数据库ODDBC安装界界面:图15-3 数据库ODDBC安装界界面(5)在图155-3中单击击“选择(S)”按钮,启动动一个类似资资源管理器的的界面来选择择数据库,如如图15-44所示,在图图15-4所所示的界面中中选择boookstorre.mdbb。图15-4 数据库选择择界面15.1 会会员登录做一个网上书店店,在顾客开开始购书之前前,必须要记记录用户的一一些信息以便便用户在不同同的分类、不不同的页面购购书时,最后后能够去收款款台统一结帐帐,而且网上上书店同时有有许多人在选选购图书,也也要求对不同同的顾客进行行区分,我们们可以要求顾顾客在购书之之前进行注册册成为会员,以以后只用会员员代码和密码码即可登录。为了便于说明现现在的电子商商务网站,由由JSP做页页面表现,由由Java Bean做应用用逻辑的结构构,在本例中中将会员登录录程序分成两两大部分:一一、Javaa Bean用于对对数据库的操操作,验证用用户名和密码码是否正确;二、JSPP页面部分,用用于供用户会会员代码和密密码以及显示示验证结果。15.1.1 会员登录录Java Bean我们网上书店中中的会员信息息的库结构如如图15-55所示:图15-5 会员信息库库其中membeerID 是是主键,用于于区分不同的的会员,新会会员注册时只只能使用没有有被使用的用用户代码。在验证时我们只只要使用验证证用户的meemberIID和其pwwd是否一致致即可判断该该用户是否合合法,如果合合法则其登录录次数加1。下面是用户验证证部分的Jaava Bean的代码码清单15-1 BuyeerBeann.Javaa/* *BuyyerBeaan.Javva 11.10.22001 *Copyriight ©© 20000, 20011 by cuuug lllp.*本Bean中中有两个seet方法和两两个get 方法:*setMemmberIDD() 对BuyeerBeann中的memmberIDD属性进行赋赋值;*setPwdd()对BuyerrBean中中的 pwdd 属性进行行赋值; *gettLogonntimess() 取该会员员登录的次数数*getMennberNaame()获获得该会员的的真实姓名,用用于显示欢迎迎信息。*main()方法用于于将BEANN作为一个 Appliicatioon进行测试试时使用,正正式发布时可可以删除。 */packagee cuugg;import Java.sql.*;public classs BuyeerBeann privatte Strring mmemberrID = null ; /会员IIDprivatte Strring mmemberrName = nulll; /会员姓姓名privatte Strring ppwd = null;/密码privatte intt logoontimees = -1;/登录的的次数privatte staatic SStringg strDDBDrivver = “sun.jdbc.odbc.JdbcOOdbcDrriver”; /JJDBC驱动动privatte staatic SStringg strDDBUrl = “jddbc:oddbc:boookstoore”; /数数据源 ,privatte Connnectiion coonn =nnull; /连连接privatte RessultSeet rs = nulll;/结果集集publicc BuyeerBeann ()/加载JJDBC-OODBC驱动动try Classs.forrName(strDBBDriveer );/捕获异异常catchh(Javaa.langg.ClasssNotFFoundEExcepttion ee)Systtem.errr.priintln(“BuyeerBeann():” + e.ggetMesssage();/获得登录录次数,登录录的会员的名名字也在该方方法调用时获获得publicc int getLoogontiimes()Strinng strrSql = nulll;tryconnn = DrriverMManageer.gettConneectionn(strDDBUrl);Stattementt stmtt = coonn.crreateSStatemment();strSqll = “SSelectt logoonTimees,memmbernaame frrom buuyerInnfo whhere mmemberrID = ” + membberID + “ and ppwd =” + ppwd + “”;rs = stmtt.execcuteQuuery(sstrSqll);whille (rss.nextt()/ 登录的次数数loggontimmes = rs.geetInt(“logoonTimees”);/会会员姓名 meemberNName = rs.ggetStrring(“mmemberrname”); rs.cclose();/如果果是合法会员员则将其登录录次数加1if (logonntimess != -1 ) strrSql = “Upddate bbuyerIInfo sset loogonTiimes = logoonTimees +1 wheree membberID = ” + memmberIDD + “”;stmmt.exeecuteUUpdatee(strSSql);stmtt.closse();connn.closse();/捕获异异常catchh(SQLEExcepttion ee)Systtem.errr.priintln(“BuyeerBeann.getLLogonttimes():” + e.geetMesssage();returrn loggontimmes ;/设置meemberIID属性;publicc voiid settMembeerID(SStringg ID)this.membeerID = ID;/设置pwwd 属性publicc voidd settPwd(SStringg passsword)this.pwd = passsword;/获得该会会员的真实姓姓名,必须在在取该会员登登录的次数之之后才能被赋赋予正确的值值publicc Striing geetMembberNamme()returrn memmberNaame;/测试Beean中的各各个方法是否否能够正常工工作publicc staatic vvoid mmain(SStringg argss)BuyerrBean buyerr = neew BuyyerBeaan();buyerr.setMMemberrID(“aabcd”);buyerr.setPPwd(“11234”);Systeem.outt.prinntln(bbuyer.getLoogontiimes();Systeem.outt.prinntln(bbuyer.getMeemberNName();在BuyerBBean中用用了packkage cuug; 在发布到到WEB SSERVERR时,可以用用JAR(JJDK中带的的打包工具)把把编译后的BBuyerBBean.cclass 打包成JAAR文件在服服务器的环境境变量claasspatth中给予指指定,或者在在服务器cllasspaath环境变变量指定的目目录下建一个个cuug文文件夹,把BBuyerBBean.cclass放放到cuugg目录下。15.1.2 会员登录录htm与JJSP会员登录要由两两个部分来完完成,第一个个页面用于会会员输入其IID和密码,当当然首页还可可以加一些广广告等的其它它信息,在本本例中略过。清单15-2 defaault.hhtm<contenntTypee=”texxt/htmml;chaarset=gb23112”><HTML><! Copyrright © 19999 cuuug,liuu.à<HEAD><TITLE>>CUUG ON LIINE BOOOK STTORE MEMBBER LOOGIN</TITLEE></HEAD>><BODY bbgcoloor=”whhite”>><H1 aliign=”ccenterr”>CUUUG 网上书书店</H11><H2 aliign=”ccenterr”>会员登登录页</HH2><P>&nbssp;</PP><P>&nbssp;</PP><CENTERR><FORM MMETHODD=POSTT ACTIION=”ccheckllogon.jsp”>><BR><font ssize=55 coloor=”grreen”>>请输入会员代号号和密码: <br>会员代码:<iinput TYPE=”textt” namme=memmberIDD > <<BR>密  p;&nbssp;&nbbsp;码:<inpput TYYPE=”ppasswoord” nname=ppwd >> <BR>><br> <IINPUT TYPE=submiit namme=subbmit VValue=”登录”></font>></FORM>></CENTEER></BODY>></HTML>>在本例中提供了了一个文本框框供用户输入入会员代号和和登录密码,其其运行结果如如图15-66所示,当会会员输入其代代码和密码后后调用cheeckloggon.jssp 来验证证该网络用户户是否是合法法会员。图15-6 会员登录页页在checkllogon.jsp 中中接收从deefaultt.htm中中由用户所填填的会员代码码和密码,把把它传给BuuyerBeean,由BBuyerBBean判断断该用户的会会员代码和密密码的正确性性,若正确显显示欢迎信息息;若不正确确,则提供一一个重新登录录的链接。Checkloogon.jjsp的源代代码如下:清单15-3 checcklogoon.jspp<!DOCTYYPE HTTML PUUBLIC “-/WW3C/DDTD HTTML 4.0 Traansitiional/EN”>><% pagge lannguagee=”Javva” ccontenntTypee=”texxt/htmml;chaarset=GB23112”%><jsp:usseBeann classs=”cuuug.BuuyerBeean” iid=”buuyer” scopee=”pagge”></jsp:uuseBeaan><HTML><HEAD><META nname=”CCHECKLLOGON” ><TITLE>>CUUG ONN LINEE BOOKK STORRE MMEMBERR LOGIIN</TITLEE></HEAD>><BODY BBGCOLOOR=”#FFFFFFFF”><H1 aliign=”ccenterr”>CUUUG 网上书书店</H11><%Stringg membberID = reqquest.getPaarametter(“mmemberrID”);Stringg pwd = reqquest.getPaarametter(“ppwd”);buyer.setMeemberIID(memmberIDD);buyer.setPwwd(pwdd);%> <% int logonnTimess = buuyer.ggetLoggontimmes() ; if (logonnTimess > 0)sessiion.puutValuue("meemberIID",meemberIID);%><H2 aalign=”centter”><<%= buuyer.ggetMemmberNaame() %>欢迎你你第<%= loggonTimmes +11%>次来到到CUUG网上上书店</HH2><H2 aalign=”centter”><<A hreef=”boooklisst.jspp”>进入书书店</A>></H2>><% elsee%><H2 allign=”ccenterr”>对不起起,<%= membeerID %>你的用户户名和密码不不一致</HH2><H2 allign=”ccenterr”><A href=”defaault.hhtm”>重重新登录</A></HH2><% %> </BODY>></HTML>>登录正确时的结结果如图155-7所示,错错误时的结果果如图15-8所示。图15-7 用户登录正正确(会员aabcd的真真实姓名是ccuug0001)图15-8 用户登录错错误15.2 选选书会员登录之后,合合法的用户将将可以看到本本书店中可供供选择的图书书,并且将他他感兴趣的书书放入“购物车”,在去“收银台”结帐之前,该该用户可以放放弃购买其购购物车中的任任何一本书。在在此处我们用用BookBBean来获获取图书的信信息,在Boooklisst.jspp中显示这些些书。在会员选书部分分,我们仍用用Java Bean来来操作数据库库,用jspp来做页面表表现。15.2.1 选书Javva Beaan图书信息的表结结构如图155-9所示,为为了便于说明明,在本例中中pricee也设置成了了Strinng型,在实实际应用中应应该设置成货货币或浮点型型:图15-9 图书信息的的表结构其中,bookkISBN是是主键,区分分不同的图书书。Javaa Beann要根据不同同的图书的bbookISSBN来获得得其相应的书书名、作者、出出版社、价格格、简介等信信息。同时JJava BBean还要要有列出书店店中所有图书书的信息的功功能。清单15-4 BookkBean.Javaa/* *BuyyerBeaan.Javva 11.10.22001 *Copyriight ©© 20000, 20011 by cuuug ,lllp.*本Bean中中的各个方法法的功能介绍绍如下:*setBoookISBNN():设置置图书的编号号,同时根据据编号更新相相应的书名、作作者、出版社社、价格*和和简介*getBoookListt() 取得书库库中全部书的的书名、出版版社、价格、作作者等信息;*getBoookISBNN() 取得当前前图书的编号号 ; *geetBookkName()取得当前图图书的书名;*getBoookAutthor()取得当前图图书的作者;*getPuublishher()取得当前图图书的出版社社信息;*getPrrice()取得当前图图书的价格;* getInntroduuce()取取得当前图书书的简介信息息。*main()方法用于于将BEANN作为一个 Appliicatioon进行测试试时使用,正正式发布时可可以删除。 */packagee cuugg;import Java.sql.*;public classs BookkBean privatte Strring bbookISSBN = null;/图书编编号privatte Strring bbookNaame = null;/书名privatte Strring bbookAuuthor = nulll;/作者privatte Strring ppublissher = nulll;/出版社社privatte Strring iintrodduce = nulll;/简介privatte Strring pprice = nulll;/价格privatte staatic SStringg strDDBDrivver = "sun.jdbc.odbc.JdbcOOdbcDrriver""privatte staatic SStringg strDDBUrl = "jddbc:oddbc:boookstoore"privatte Connnectiion coonn =nnull;privatte RessultSeet rs = nulll;publicc BookkBean()/加载驱驱动try Classs.forrName(strDBBDriveer );catchh(Javaa.langg.ClasssNotFFoundEExcepttion ee)Systtem.errr.priintln("BookkBean ():" + e.ggetMesssage();/取当前书书库中全部图图书信息publicc ResuultSett getBBookLiist()Strinng strrSql = nulll;try/建立立与数据库的的连接connn = DrriverMManageer.gettConneectionn(strDDBUrl);Stattementt stmtt = coonn.crreateSStatemment();strSSql = "Seleect boookISBBN,boookNamee,bookkAuthoor,pubblisheer,priice frrom boookInffo "rs = stmtt.execcuteQuuery(sstrSqll);/捕获异异常catchh(SQLEExcepttion ee)Systtem.errr.priintln("BookkBean.getBoookLisst():"" + e.getMeessagee();returrn rs ;/根据图书书的编号给图图书的其他信信息赋值privatte vooid geetBookkInfo(Strinng ISBBN)Strinng strrSql = nulll;bookNName = nulll;bookAAuthorr = nuull;publiisher = nulll;introoduce = nulll;pricee = nuull;try/建立立和数据库的的连接connn = DrriverMManageer.gettConneectionn(strDDBUrl);Stattementt stmtt = coonn.crreateSStatemment();strSSql = "Seleect * from bookIInfo wwhere bookIISBN = '" + ISBNN + "''"rs = stmtt.execcuteQuuery(sstrSqll);whille (rss.nextt()boookNamee = rss.getSStringg("boookNamee");boookAuthhor = rs.geetStriing("bbookAuuthor"");pubblisheer = rrs.gettStrinng("puublishher");inttroducce = rrs.gettStrinng("inntroduuce");priice = rs.geetStriing("pprice"");/捕获异异常catchh(SQLEExcepttion ee)Systtem.errr.priintln("BookkBean.getBoookLisst():"" + e.getMeessagee();/给图书的的编号赋值,同同时调用函数数给图书的其其他信息赋值值publicc voiid settBookIISBN (Strinng ISBBN)this.bookIISBN = ISBNN;getBoookInffo(boookISBNN);/取图书编编号publicc Strring ggetBoookISBNN ()returrn boookISBNN ;/取书名publicc Striing geetBookkName()returrn boookNamee ;/取作者信信息publicc Striing geetBookkAuthoor()returrn boookAuthhor;/取出版社社信息publicc Striing geetPubllisherr()returrn pubblisheer;/取图书简简介publicc Striing geetIntrroducee()returrn inttroducce ;/取图书价价格publicc Striing geetPricce()returrn priice;/将Beaan作为一个个appliicatioon进行测试试用publicc staatic vvoid mmain(SStringg argss)BookBBean bbook = new BookBBean ();book.setBoookISBBN("7-5053-5316-4");Systeem.outt.prinntln(bbook.ggetBoookNamee();Systeem.outt.prinntln(bbook.ggetBoookAuthhor();Systeem.outt.prinntln(bbook.ggetPubblisheer();Systeem.outt.prinntln(bbook.ggetInttroducce();Systeem.outt.prinntln(bbook.ggetPriice();tryResuultSett tmpRRS = bbook.ggetBoookListt();whille (tmmpRS.nnext()Sysstem.oout.prrintlnn(tmpRRS.gettStrinng("boooknamme");tmpRRS.cloose();/捕获异异常catchh(Exceeptionn e)Systtem.errr.priintln("mainn()" + e.geetMesssage();15.2.2 选书JSPP会员正确登录之之后,即可进进入书店进行行选书,我们们已经在chheckloogon.jjsp中将会会员的代码(mmemberrID)放入入系统的seessionn中,为了保保证用户只能能从主页面登登录进入书店店,我们在给给会员显示可可供选择的图图书之前,先先检查sesssion中中是否有meemberIID的合法值值,如果没有有则提示用户户先去登录。清单15-5 bookklist.jsp<!DOCTYYPE HTTML PUUBLIC "-/WW3C/DDTD HTTML 4.0 Traansitiional/EN">><% pagge lannguagee="Javva" immport="Javaa.sql.*" coontenttType="textt/htmll;charrset = gb23312"%>><jsp:usseBeann classs="cuuug.BoookBeaan" idd="boook" sccope=""page""></jssp:useeBean>><HTML><HEAD><META hhttp-eequiv="Conttent-SStyle-Type"" conttent=""text/css">><TITLE>>CUUG Boook Sttore OOn Linne -meember:<%= ssessioon.gettValuee("memmberIDD") %>></TITLEE><SCRIPTT langguage="JavaaScrippt"><!-functioon opeenwin(str)windoow.opeen("adddcartt.jsp?isbn="+strr, "shoppiingcarrt","wwidth=300,hheightt=200,resizzable=1,scrrollbaars=2"");returnn;/-></SCRIPPT></HEAD>><BODY BBGCOLOOR="#FFFFFFFF"><H1 aliign="ccenterr">CUUUG 网上书书店</H11><% if (sesssion.getVaalue(""membeerID") = nnull|"".eqquals(sessiion.geetValuue("meemberIID")%> <H22 aliggn="ceenter"">请先登录录,然后再选书书</H2>> <H22 aliggn="ceenter""><A hhref=""defauult.httm">登录录</A><</H2><%else%><table widthh="1000%" boorder="1" ccellsppacingg="0" bordeercoloor="#99999FFF"> <tr> <tdd><fonnt collor="#3333FFF">书名名</fonnt></ttd> <tdd><fonnt collor="#3333FFF">作者者</fonnt></ttd> <tdd><fonnt collor="#3333FFF">出版版社</foont></td> <tdd><fonnt collor="#3333FFF">定价价</fonnt></ttd> <tdd>&nbssp;</ttd> </tr>><% RessultSeet rs = boook.gettBookLList(); whiile(rss.nextt() SStringg ISBNN = rss.getSStringg("boookISBNN");%> <tr> <tdd><a href="bookkinfo.jsp?iisbn=<%= ISBBN%>">><%= rrs.gettStrinng("boookNamme")%>></A><</td> <tdd><%= rs.geetStriing("bbookAuuthor"")%></td> <tdd><%= rs.geetStriing("ppublissher")%></ttd> <tdd><%= rs.geetStriing("pprice"")%></td> <tdd><a hhref=''Javasscriptt:opennwin(""<%= IISBN %>")'>>加入购物车车</a><</td> </tr>> <% %> </tablee><table alignn="cennter" bordeer="0""> <tboddy> <tr> <tdd><a hhref=""shopppingcaart.jssp"><ffont ccolor="#00000FF">>查看购物车车</fonnt></aa></tdd> <tdd></tdd> </tr>> </tboody> </tablee><p>&nbssp;</pp><%></BODY>></HTML>>已经登录过的会会员和没有登登录过的会员员进入该页面面是的结构分分别如图155-10和图图15-111所示:正确确登录的会员员的会员代码码在浏览器的的标题栏显示示为:memmber:“会员代码”。图15-10 会员abbcd正确登登录图15-11 会员未登登录直接来选选书在本例中利用JJavaSccript语语句定义了一一个函数来将将所调用另外外的一个jssp来处理把把书加入购物物车的操作:<SCRIPTT langguage="JavaaScrippt"><!-functioon opeenwin(str)windoow.opeen("adddcartt.jsp?isbn="+strr, "shoppiingcarrt","wwidth=300,hheightt=200,resizzable=1,scrrollbaars=2"");returnn;/-></SCRIPPT>该函数用于打开开addcaart.jssp并切将图图书编号作为为参数传给aaddcarrt.jspp。addcartt.jsp利利用Cookkie来保存存所选购的图图书信息,CCookiee相当于一个个购物车。为为了与其他的的Cookiie变量区分分,每个写入入Cookiie的图书编编码前面都加加上“ISBN”作为标志,向向购物车中加加入图书的代代码如下:清单15-6 addccart.jjsp<!DOCTYYPE HTTML PUUBLIC "-/WW3C/DDTD HTTML 4.0 Traansitiional/EN">><% pagge lannguagee="Javva" coontenttType="textt/htmll;charrset=GGB23122"%><%/*Cookiie信息处理理*/*增加Coookie*/if (reqquest.getPaarametter("iisbn")!=nulll)Cookiie coookie=nnew Coookie("ISBNN"+reqquest.getPaarametter("iisbn"),"1");cookiee.setMMaxAgee(30*224*