JSP 开发实例网上书店.docx
- 文档编号:23404921
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:57
- 大小:1.09MB
JSP 开发实例网上书店.docx
《JSP 开发实例网上书店.docx》由会员分享,可在线阅读,更多相关《JSP 开发实例网上书店.docx(57页珍藏版)》请在冰豆网上搜索。
JSP开发实例网上书店
15JSP开发实例——网上书店
电子商务(ElectronicCommerce)简称为EC,它包含两个方面的内容:
子方式和商贸活动。
电子商务指的是利用简单、快捷、低成本的子通信方式,买卖双方不见面地进行各种商贸活动。
现在人们所研究的子商务主要是以EDI(电子数据转换)和Internet来完成的。
电子商务可以分为两个层次:
较低层次的电子商务如子商情、电子贸易和子合同等;较高级的是利用Internet进行全部的贸易活动。
同现实世界的商务活动类似,高级的子商务也涉及很多方面,除了买家、卖家外,要有银行或金融机构、政府机构、认证机构等的加入才行。
但是,由于参与子商务的各方在物理上是互不谋面的,整个电子商务过程并不是现实世界商务活动的翻版,它需要网上银行、在线电子支付等条件和数据加密、电子签名等技术。
随着电子商务的发展,出现不少网上书店,它们正逐步改变着书籍交易的方式。
本书前面介绍了Eclipse与Tomcat集成开发Web应用程序的方法,本章将以一个网上书店的例子介绍如何在Eclipse下基于JSP开发Web应用程序。
15.1项目需求分析
需求分析是成功实施网上书店系统的基础,只有弄清楚用户的需求,才能真正开发出满足用户需求的系统,也才能够真正让整个系统发挥其相应的作用。
接下来对该系统的总体需求做一个分析,读者在实际开发过程中,可以对本系统的需求继续完善。
由于网上书店系统对权限和保密性的要求比较高,所以很重要的一项就是进行用户管理和设置权限。
(1)用户登录。
进入系统前,用户需要输入正确的用户名和密码。
输入的信息与数据库中的数据进行比较后,系统判断用户能否进入并获得相应的权限。
(2)修改用户信息。
用户登录系统后,可以修改自己的注册信息,包括用户名、密码、Email、地址和话等。
(3)管理员用户。
管理员是一个特殊的用户,它可以对普通用户、订单、书籍分类等进行管理。
(4)购买书籍。
用户首先正确登录,然后浏览书店,找到需要的书籍,并将其放入购物篮。
(5)查询购物篮。
用户可以查询自己的购物篮以便了解购买了哪些书,并且可以对购买数目进行更改。
(6)浏览书籍概要。
点击网页上的书籍就可以浏览书籍概要。
(7)用户注册。
用户可以注册一个新的账号,注册新账号需要输入姓名、用户名、密码和银行卡号等信息。
(8)用户退出。
用户完成购物后,能够退出该系统。
15.2建立数据库
有很多种的数据库可供选择,这里以Access数据库为例。
虽然这个数据库不像Oracle、DB2那么强大,但是它的功能已经能够满足项目的要求。
下面介绍本例中涉及的几个表。
15.2.1card_types
card_types表(见表15-1)主要包含允许用户用的银行信用卡信息,管理员可以添加或删除信用卡。
15.2.2categories
categories表(见表15-2)包含书的类别,管理员可以添加书籍的类别。
15.2.5items表
items表(见表15-5)用来保存书籍信息。
15.2.6members表
15.3项目开发流程
下面将介绍开发该JSP项目具体步骤。
首先新建一个Tomcat项目,取名为BookStore。
15.3.1创建功能类
由于这个项目要用到数据库,需要建立与数据库的连接,进而执行查询、插入等操作。
可以把这些操作集成到一个单独的类中,这样做可以将功能与显示分开;也可以采用JSP技术,将所有的函数放在同一个JSP页上,然后在每个需要用此函数的页面中包含这个页。
本例采用了前面的方法,将方法放在Common类中。
新建一个包(包名为function),然后在其中新建Common类,输入实例15-1的代码。
代码中包含对每个方法的注释。
在该项目的源代码中,有一个Common.jsp文件,它是这个类的JSP实现。
【实例15-1】Common类(Common.java)
packagefunction;
publicclassCommon{
publicCommon(){
super();
}
publicstaticfinalStringCRLF="\r\n";
publicstaticfinalintUNDEFINT=Integer.MIN_VALUE;
publicstaticfinalintadText=1;
publicstaticfinalintadDate=2;
publicstaticfinalintadNumber=3;
staticfinalintadSearch_=4;
staticfinalintad_Search_=5;
staticfinalStringappPath="/";
//以下字符串用于数据库的连接
//DBDriver是指定数据库连接的驱动,这里用的是Access数据库的驱动
//strConn指定与哪个数据库的连接。
这里将BookStore_MSAccess.mdb放在C盘下//读者可以根据需要放在不同的目录,只需要改变DBQ的值即可
//DBusername和DBpassword分别是连接数据库的用户名和密码
staticfinalStringDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
staticfinalStringstrConn="jdbc:
odbc:
driver={MicrosoftAccessDriver
(*.mdb)};DBQ=C:
/BookStore_MSAccess.mdb";
staticfinalStringDBusername="";
staticfinalStringDBpassword="";
/**
*注册驱动器以便建立数据库的连接;在获得数据库连接之前一定要调用的函数*
*/
publicstaticStringloadDriver(){
StringsErr="";
try{
java.sql.DriverManager.registerDriver((java.sql.Driver)(Class
.forName(DBDriver).newInstance()));
}catch(Exceptione){
sErr=e.toString();
}
return(sErr);
}
/**
*遍历产生的结果集
*/
publicstaticvoidabsolute(java.sql.ResultSetrs,introw)
throwsjava.sql.SQLException{
for(intx=1;x rs.next(); } /** *查询数据库,并返回一个结果集 */ publicjava.sql.ResultSetopenrs(java.sql.Statementstat,Stringsql)throwsjava.sql.SQLException{ java.sql.ResultSetrs=stat.executeQuery(sql); return(rs); } /** *查询表中的某个特定字段 */ publicStringdLookUp(java.sql.Statementstat,Stringtable,StringfName,Stringwhere){ java.sql.Connectionconn1=null; java.sql.Statementstat1=null; try{ conn1=cn(); stat1=conn1.createStatement(); java.sql.ResultSetrsLookUp=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(java.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.HttpServletResponseresponse,Exceptione){ returne.toString(); } /** *获得表中每个字段的名字 */ publicString[]getFieldsName(java.sql.ResultSetrs) throwsjava.sql.SQLException{ java.sql.ResultSetMetaDatametaData=rs.getMetaData(); intcount=metaData.getColumnCount(); String[]aFields=newString[count]; for(intj=0;j aFields[j]=metaData.getColumnLabel(j+1); } returnaFields; } /** *把查询结果放入Hashtable */ publicjava.util.HashtablegetRecordToHash(java.sql.ResultSetrs,java.util.HashtablersHash,String[]aFields) throwsjava.sql.SQLException{ for(intiF=0;iF rsHash.put(aFields[iF],getValue(rs,aFields[iF])); } returnrsHash; } /** *建立数据库连接 * *返回一个Connection */ publicjava.sql.Connectioncn()throwsjava.sql.SQLException{ returnjava.sql.DriverManager.getConnection(strConn,DBusername,DBpassword); } /** *将字符串进行编码 */ publicStringtoURL(StringstrValue){ if(strValue==null) return""; if(strVpareTo("")==0) return""; .URLEncoder.encode(strValue); } /** *将字符串转换成能在网页上显示的形式 */ publicStringtoHTML(Stringvalue){ if(value==null) return""; value=replace(value,"&","&"); value=replace(value,"<","<"); value=replace(value,">",">"); value=replace(value,"\"","&"+"quot;"); returnvalue; } publicStringgetValueHTML(java.sql.ResultSetrs,StringfieldName){try{ Stringvalue=rs.getString(fieldName); if(value! =null){ returntoHTML(value); } }catch(java.sql.SQLExceptionsqle){ } return""; } publicStringgetValue(java.sql.ResultSetrs,StringstrFieldName){if((rs==null)||(isEmpty(strFieldName)) ||("".equals(strFieldName))) return""; try{ StringsValue=rs.getString(strFieldName); if(sValue==null) sValue=""; returnsValue; }catch(Exceptione){ return""; } } /** *得到网页上某个参数的值 */ publicStringgetParam(javax.servlet.http.HttpServletRequestreq,StringparamName){ Stringparam=req.getParameter(paramName); if(param==null||param.equals("")) return""; param=replace(param,"&","&"); param=replace(param,"<","<"); param=replace(param,">",">"); param=replace(param,"<","<"); param=replace(param,">",">"); returnparam; } publicbooleanisNumber(Stringparam){ booleanresult; if(param==null||param.equals("")) returntrue; param=param.replace('d','_').replace('f','_'); try{ Doubledbl=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))); } publicStringgetCheckBoxValue(Stringval,StringcheckVal,StringuncheckVal,intctype){ if(val==null||val.equals("")) returntoSQL(uncheckVal,ctype); else returntoSQL(checkVal,ctype); } /** *创建SQL语句中的判断部分 */ publicStringtoWhereSQL(StringfieldName,StringfieldVal,inttype){ Stringres=""; switch(type){ caseadText: if(! "".equals(fieldVal)){ res=""+fieldName+"like'%"+fieldVal+"%'"; } caseadNumber: res=""+fieldName+"="+fieldVal+""; caseadDate: res=""+fieldName+"='"+fieldVal+"'"; default: res=""+fieldName+"='"+fieldVal+"'"; } returnres; } publicStringtoSQL(Stringvalue,inttype){ if(value==null) return"Null"; Stringparam=value; if("".equals(param)&&(type==adText||type==adDate)){return"Null"; } switch(type){ caseadText: { param=replace(param,"'","''"); param=replace(param,"&","&"); param="'"+param+"'"; break; } caseadSearch_: casead_Search_: { param=replace(param,"'","''"); break; } caseadNumber: { try{ if(! isNumber(value)||"".equals(param)) param="null"; else param=value; }catch(NumberFormatExceptionnfe){ param="null"; } break; } caseadDate: { param="'"+param+"'"; break; } } returnparam; } /** *进行字符串替换 */ 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)); returnresult.toString(); } publicStringgetOptions(java.sql.Connectionconn,Stringsql,booleanisSearch,booleanisRequired,StringselectedValue){StringsOptions=""; StringsSel=""; if(isSearch){ sOptions+=" }else{ if(! isRequired){ sOptions+=" } } try{ java.sql.Statementstat=conn.createStatement(); java.sql.ResultSetrs=null; rs=openrs(stat,sql); while(rs.next()){ Stringid=toHTML(rs.getString (1)); Stringval=toHTML(rs.getString (2)); if(pareTo(selectedValue)==0){ sSel="SELECTED"; }else{ sSel=""; } sOptions+=" +""; } rs.close(); stat.close(); }catch(Exceptione){ } returnsOptions; } publicStringgetOptionsLOV(StringsLOV,booleanisSearch,booleanisRequired,StringselectedValue){ 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(); }else{ if(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(); }else{ if(old.equals(";")&&(val.equals(";"))){ val=""; } } if(val.equals(";")){ val=""; } if(! val.equals("")){ old=val; } i++; } if(pareTo(selectedValue)==0){ sSel="SELECTED"; }else{ sSel=""; } slOptions+=" +""; } if((i%2)==0) sOptions+=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(); }else{ if(o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 开发实例网上书店 开发 实例 网上 书店