JSP 开发实例网上书店_第1页
JSP 开发实例网上书店_第2页
JSP 开发实例网上书店_第3页
JSP 开发实例网上书店_第4页
JSP 开发实例网上书店_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、15 JSP开发实例网上书店电子商务(ElectronicCommerce)简称为EC,它包含两个方面的内容:子方式和商贸活动。电子商务指的是利用简单、快捷、低成本的子通信方式,买卖双方不见面地进行各种商贸活动。现在人们所研究的子商务主要是以EDI(电子数据转换)和Internet来完成的。电子商务可以分为两个层次:较低层次的电子商务如子商情、电子贸易和子合同等;较高级 的是利用Internet进行全部的贸易活动。同现实世界的商务活动类似,高级的子商务也涉及很多方面,除了买家、卖家外,要有银行或金融机构、政府机构、认证机构等的加入才行。但是,由于参与子商务的各方在物理上是互不谋面的,整个电子商

2、务过程并不是现实世界商务活动的翻版,它需要网上银行、在线电子支付等条件和数据加密、电子签名等技术。 随着电子商务的发展,出现不少网上书店,它们正逐步改变着书籍交易的方式。本书前面介绍了Eclipse与Tomcat集成开发Web应用程序的方法,本章将以一个网上书店的例子介绍如何在Eclipse下基于JSP开发Web应用程序。15.1项目需求分析 需求分析是成功实施网上书店系统的基础,只有弄清楚用户的需求,才能真正开发出满足用户需求的系统,也才能够真正让整个系统发挥其相应的作用。接下来对该系统的总体需求做一个分析,读者在实际开发过程中,可以对本系统的需求继续完善。由于网上书店系统对权限和保密性的要

3、求比较高,所以很重要的一项就是进行用户管理和设置权限。 (1)用户登录。进入系统前,用户需要输入正确的用户名和密码。输入的信息与数据库中的数据进行比较后,系统判断用户能否进入并获得相应的权限。 (2)修改用户信息。用户登录系统后,可以修改自己的注册信息,包括用户名、密码、Email、地址和话等。 (3)管理员用户。管理员是一个特殊的用户,它可以对普通用户、订单、书籍分类等进行管理。 (4)购买书籍。用户首先正确登录,然后浏览书店,找到需要的书籍,并将其放入购物篮。(5)查询购物篮。用户可以查询自己的购物篮以便了解购买了哪些书,并且可以对购买数目进行更改。 (6)浏览书籍概要。点击网页上的书籍就

4、可以浏览书籍概要。 (7)用户注册。用户可以注册一个新的账号,注册新账号需要输入姓名、用户名、密码和银行卡号等信息。 (8)用户退出。用户完成购物后,能够退出该系统。15.2建立数据库 有很多种的数据库可供选择,这里以Access数据库为例。虽然这个数据库不像Oracle、 DB2那么强大,但是它的功能已经能够满足项目的要求。 下面介绍本例中涉及的几个表。15.2.1card_types card_types表(见表15-1)主要包含允许用户用的银行信用卡信息,管理员可以添加 或删除信用卡。 15.2.2categories categories表(见表15-2)包含书的类别,管理员可以添加书

5、籍的类别。15.2.5 items表 items表(见表15-5)用来保存书籍信息。15.2.6 members表 15.3项目开发流程 下面将介绍开发该JSP项目具体步骤。首先新建一个Tomcat项目,取名为BookStore。15.3.1创建功能类 由于这个项目要用到数据库,需要建立与数据库的连接,进而执行查询、插入等操作。可以把这些操作集成到一个单独的类中,这样做可以将功能与显示分开;也可以采用JSP技术,将所有的函数放在同一个JSP页上,然后在每个需要用此函数的页面中包含这个页。 本例采用了前面的方法,将方法放在Common类中。新建一个包(包名为function),然后在其中新建Co

6、mmon类,输入实例15-1的代码。代码中包含对每个方法的注释。在该项目的源代码中,有一个Common.jsp文件,它是这个类的JSP实现。【实例15-1】Common类(Common.java)packagefunction;publicclassCommonpublicCommon()super();publicstaticfinalStringCRLF=rn;publicstaticfinalintUNDEFINT=Integer.MIN_VALUE;publicstaticfinalintadText=1;publicstaticfinalintadDate=2;publicstati

7、cfinalintadNumber=3;staticfinalintadSearch_=4;staticfinalintad_Search_=5;staticfinalStringappPath=/;/以下字符串用于数据库的连接/DBDriver是指定数据库连接的驱动,这里用的是Access数据库的驱动/strConn指定与哪个数据库的连接。这里将BookStore_MSAccess.mdb放在C盘下/读者可以根据需要放在不同的目录,只需要改变DBQ的值即可/DBusername和DBpassword分别是连接数据库的用户名和密码staticfinalStringDBDriver=sun.jd

8、bc.odbc.JdbcOdbcDriver;staticfinalStringstrConn=jdbc:odbc:driver=MicrosoftAccessDriver(*.mdb);DBQ=C:/BookStore_MSAccess.mdb;staticfinalStringDBusername=;staticfinalStringDBpassword=;/*注册驱动器以便建立数据库的连接;在获得数据库连接之前一定要调用的函数*/publicstaticStringloadDriver()StringsErr=;tryjava.sql.DriverManager.registerDriv

9、er(java.sql.Driver)(Class.forName(DBDriver).newInstance();catch(Exceptione)sErr=e.toString(); return(sErr);/*遍历产生的结果集*/publicstaticvoidabsolute(java.sql.ResultSetrs,introw)throwsjava.sql.SQLExceptionfor(intx=1;xrow;x+)rs.next();/*查询数据库,并返回一个结果集*/publicjava.sql.ResultSetopenrs(java.sql.Statementstat,

10、Stringsql)throwsjava.sql.SQLExceptionjava.sql.ResultSetrs=stat.executeQuery(sql);return(rs);/*查询表中的某个特定字段*/publicStringdLookUp(java.sql.Statementstat,Stringtable,StringfName,Stringwhere)java.sql.Connectionconn1=null;java.sql.Statementstat1=null;tryconn1=cn();stat1=conn1.createStatement();java.sql.Re

11、sultSetrsLookUp=openrs(stat1,SELECT+fName+FROM+table+WHERE+where);if(!rsLookUp.next()rsLookUp.close();stat1.close();conn1.close();return;Stringres=rsLookUp.getString(1);rsLookUp.close();stat1.close();conn1.close();return(res=null?:res);catch(Exceptione)return;/*查询表中符合条件的结果的个数*/publiclongdCountRec(ja

12、va.sql.Statementstat,Stringtable,StringsWhere)longlNumRecs=0;try java.sql.ResultSetrs=stat.executeQuery(selectcount(*)from+table+where+sWhere);if(rs!=null&rs.next()lNumRecs=rs.getLong(1);rs.close();catch(Exceptione);returnlNumRecs;/*处理错误,将错误转换成String类型返回*/publicStringproceedError(javax.servlet.http.

13、HttpServletResponseresponse,Exceptione)returne.toString();/*获得表中每个字段的名字*/publicStringgetFieldsName(java.sql.ResultSetrs)throwsjava.sql.SQLExceptionjava.sql.ResultSetMetaDatametaData=rs.getMetaData();intcount=metaData.getColumnCount();StringaFields=newStringcount;for(intj=0;jcount;j+)aFieldsj=metaDat

14、a.getColumnLabel(j+1);returnaFields;/*把查询结果放入Hashtable*/publicjava.util.HashtablegetRecordToHash(java.sql.ResultSetrs,java.util.HashtablersHash,StringaFields)throwsjava.sql.SQLExceptionfor(intiF=0;iFaFields.length;iF+)rsHash.put(aFieldsiF,getValue(rs,aFieldsiF);returnrsHash;/*建立数据库连接*返回一个Connection*

15、/publicjava.sql.Connectioncn()throwsjava.sql.SQLExceptionreturnjava.sql.DriverManager.getConnection(strConn,DBusername,DBpassword); /*将字符串进行编码*/publicStringtoURL(StringstrValue)if(strValue=null)return;if(strVpareTo()=0)return;.URLEncoder.encode(strValue);/*将字符串转换成能在网页上显示的形式*/pu

16、blicStringtoHTML(Stringvalue)if(value=null)return;value=replace(value,&,&);value=replace(value,>);value=replace(value,&+quot;);returnvalue;publicStringgetValueHTML(java.sql.ResultSetrs,StringfieldName)tryStringvalue=rs.getString(fieldName);if(value!=null)returntoHTML(value);catch(java.sql.SQL

17、Exceptionsqle)return;publicStringgetValue(java.sql.ResultSetrs,StringstrFieldName)if(rs=null)|(isEmpty(strFieldName)|(.equals(strFieldName)return;tryStringsValue=rs.getString(strFieldName);if(sValue=null)sValue=;returnsValue;catch(Exceptione)return;/*得到网页上某个参数的值*/publicStringgetParam(javax.servlet.h

18、ttp.HttpServletRequestreq,StringparamName)Stringparam=req.getParameter(paramName); if(param=null|param.equals()return;param=replace(param,&,&);param=replace(param,<,);param=replace(param,&lt;,);returnparam;publicbooleanisNumber(Stringparam)booleanresult;if(param=null|param.equals()returnt

19、rue;param=param.replace(d,_).replace(f,_);tryDoubledbl=newDouble(param);result=true;catch(NumberFormatExceptionnfe)result=false;returnresult;publicbooleanisEmpty(intval)returnval=UNDEFINT;publicbooleanisEmpty(Stringval)return(val=null|val.equals()|val.equals(Integer.toString(UNDEFINT);publicStringge

20、tCheckBoxValue(Stringval,StringcheckVal,StringuncheckVal,intctype)if(val=null|val.equals()returntoSQL(uncheckVal,ctype);elsereturntoSQL(checkVal,ctype);/*创建SQL语句中的判断部分*/publicStringtoWhereSQL(StringfieldName,StringfieldVal,inttype)Stringres=;switch(type)caseadText:if(!.equals(fieldVal)res=+fieldName

21、+like%+fieldVal+%;caseadNumber:res=+fieldName+=+fieldVal+;caseadDate:res=+fieldName+=+fieldVal+;default: res=+fieldName+=+fieldVal+;returnres;publicStringtoSQL(Stringvalue,inttype)if(value=null)returnNull;Stringparam=value;if(.equals(param)&(type=adText|type=adDate)returnNull;switch(type)caseadText:

22、param=replace(param,);param=replace(param,&,&);param=+param+;break;caseadSearch_:casead_Search_:param=replace(param,);break;caseadNumber:tryif(!isNumber(value)|.equals(param)param=null;elseparam=value;catch(NumberFormatExceptionnfe)param=null;break;caseadDate:param=+param+;break;returnparam;/*进行

23、字符串替换*/privateStringreplace(Stringstr,Stringpattern,Stringreplace)if(replace=null)replace=;ints=0,e=0;StringBufferresult=newStringBuffer(int)str.length()*2);while(e=str.indexOf(pattern,s)=0) result.append(str.substring(s,e);result.append(replace);s=e+pattern.length();result.append(str.substring(s);r

24、eturnresult.toString();publicStringgetOptions(java.sql.Connectionconn,Stringsql,booleanisSearch,booleanisRequired,StringselectedValue)StringsOptions=;StringsSel=;if(isSearch)sOptions+=All;elseif(!isRequired)sOptions+=;tryjava.sql.Statementstat=conn.createStatement();java.sql.ResultSetrs=null;rs=open

25、rs(stat,sql);while(rs.next()Stringid=toHTML(rs.getString(1);Stringval=toHTML(rs.getString(2);if(pareTo(selectedValue)=0)sSel=SELECTED;elsesSel=;sOptions+=+val+;rs.close();stat.close();catch(Exceptione)returnsOptions;publicStringgetOptionsLOV(StringsLOV,booleanisSearch,booleanisRequired,Strings

26、electedValue)StringsSel=;StringslOptions=;StringsOptions=;Stringid=;Stringval=;java.util.StringTokenizerLOV=newjava.util.StringTokenizer(sLOV,;,true);inti=0;Stringold=;while(LOV.hasMoreTokens() id=LOV.nextToken();if(!old.equals(;)&(id.equals(;)id=LOV.nextToken();elseif(old.equals(;)&(id.equals(;)id=

27、;if(!id.equals()old=id;i+;if(LOV.hasMoreTokens()val=LOV.nextToken();if(!old.equals(;)&(val.equals(;)val=LOV.nextToken();elseif(old.equals(;)&(val.equals(;)val=;if(val.equals(;)val=;if(!val.equals()old=val;i+;if(pareTo(selectedValue)=0)sSel=SELECTED;elsesSel=;slOptions+=+val+;if(i%2)=0)sOptions

28、+=slOptions;returnsOptions;publicStringgetValFromLOV(StringselectedValue,StringsLOV)StringsRes=;Stringid=;Stringval=;java.util.StringTokenizerLOV=newjava.util.StringTokenizer(sLOV,;,true);inti=0;Stringold=;while(LOV.hasMoreTokens()id=LOV.nextToken(); if(!old.equals(;)&(id.equals(;)id=LOV.nextToken()

29、;elseif(old.equals(;)&(id.equals(;)id=;if(!id.equals()old=id;i+;if(LOV.hasMoreTokens()val=LOV.nextToken();if(!old.equals(;)&(val.equals(;)val=LOV.nextToken();elseif(old.equals(;)&(val.equals(;)val=;if(val.equals(;)val=;if(!val.equals()old=val;i+;if(pareTo(selectedValue)=0)sRes=val;returnsRes;/

30、*验证用户*/publicStringcheckSecurity(intiLevel,javax.servlet.http.HttpSessionsession,javax.servlet.http.HttpServletResponseresponse,javax.servlet.http.HttpServletRequestrequest)tryObjecto1=session.getAttribute(UserID);Objecto2=session.getAttribute(UserRights);booleanbRedirect=false;if(o1=null|o2=null)bR

31、edirect=true;if(!bRedirect)if(o1.toString().equals()bRedirect=true; elseif(newInteger(o2.toString().intValue()iLevel)bRedirect=true;if(bRedirect)response.sendRedirect(Login.jsp?querystring=+toURL(request.getQueryString()+&ret_page=+toURL(request.getRequestURI();returnsendRedirect;catch(Exceptione);r

32、eturn;这是整个项目的惟一一个类,里面定义了一些常用的方法,主要是对数据库的操作,读者可以在代码的注释中了解每个方法的具体功能。下一节将介绍JSP页是如何用这个类的。15.3.2创建登录页面用户每次登录该系统都要输入用户名和密码,然后系统查询数据库并判断该用户是否存在,以及用户权限等信息。在项目目录下新建一个子目录,名字为pages,然后在这个目录下建立index.jsp,并输入实例15-2的代码。【实例15-2】登录页面(index.jsp)BookStore%!StringLoginAction(javax.servlet.http.HttpServletRequestrequest,

33、javax.servlet.http.HttpServletResponseresponse,javax.servlet.http.HttpSessionsession,javax.servlet.jsp.JspWriterout,StringsAction,StringsForm,java.sql.Connectionconn,java.sql.Statementstat)throwsjava.io.IOExceptionStringsLoginErr=;tryfinalintiloginAction=1;finalintilogoutAction=2;StringtransitParams

34、=;StringsQueryString=;StringsPage=;StringsSQL=; intiAction=0;if(sAction.equals(login)iAction=iloginAction;if(sAction.equals(logout)iAction=ilogoutAction;switch(iAction)caseiloginAction:/LoginactionStringsLogin=func.getParam(request,Login);StringsPassword=func.getParam(request,Password);System.out.pr

35、intln(login:+sLogin+,passwd:+sPassword);java.sql.ResultSetrs=null;rs=func.openrs(stat,selectmember_id,member_levelfrommemberswheremember_login=+func.toSQL(sLogin,Common.adText)+andmember_password=+func.toSQL(sPassword,Common.adText);if(rs.next()/Loginandpasswordpassedsession.setAttribute(UserID,rs.g

36、etString(1);session.setAttribute(UserRights,rs.getString(2);sQueryString=func.getParam(request,querystring);sPage=func.getParam(request,ret_page);if(!sPage.equals(request.getRequestURI()&!.equals(sPage)tryif(stat!=null)stat.close();if(conn!=null)conn.close();catch(java.sql.SQLExceptionignore)respons

37、e.sendRedirect(sPage+?+sQueryString);returnsendRedirect;elsetryif(stat!=null)stat.close();if(conn!=null)conn.close();catch(java.sql.SQLExceptionignore)response.sendRedirect(ShoppingCart.jsp);returnsendRedirect;elsesLoginErr=LoginorPasswordisincorrect.;rs.close();break;caseilogoutAction:/Logoutaction

38、session.setAttribute(UserID,);session.setAttribute(UserRights,);break;catch(Exceptione)out.println(e.toString();return(sLoginErr);voidLogin_Show(javax.servlet.http.HttpServletRequestrequest,javax.servlet.http.HttpServletResponseresponse,javax.servlet.http.HttpSessionsession,javax.servlet.jsp.JspWrit

39、erout,StringsLoginErr,StringsForm,StringsAction,java.sql.Connectionconn,java.sql.Statementstat)throwsjava.io.IOExceptiontryStringsSQL=;StringtransitParams=;StringsQueryString=func.getParam(request,querystring);StringsPage=func.getParam(request,ret_page);out.println();out.println(nEnterloginandpasswo

40、rdn);if(sLoginEpareTo()!=0)out.println(n+sLoginErr+n);sLoginErr=;out.println();out.println();System.out.println(session.getAttribute(UserID); if(session.getAttribute(UserID)=null|(String)session.getAttribute(UserID).compareTo()=0)/用户没有登录out.println(nLoginn);out.println(nPasswordn);out.print(n)

41、;out.println(nn);else/UserloggedinStringsUserID=func.dLookUp(stat,members,member_login,member_id=+session.getAttribute(UserID);out.print(+sUserID+  +);out.print();out.println(nn);out.println();catch(Exceptione)out.println(e.toString();e.printStackTrace();% 在A部分,页面导入Common类,并且创建了该类的实例和一个字符串。如果要包含其它的类,也需要在中明,并且用逗号将它们隔开。 B部分是该页面用Common类的代码部分。该部分用Common类提供的函数建立与数据库的

温馨提示

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

最新文档

评论

0/150

提交评论