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;xrs.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;jaFields[j]=metaData.getColumnLabel(j+1);
}
returnaFields;
}
/**
*把查询结果放入Hashtable
*/
publicjava.util.HashtablegetRecordToHash(java.sql.ResultSetrs,java.util.HashtablersHash,String[]aFields)
throwsjava.sql.SQLException{
for(intiF=0;iFrsHash.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+="All";
}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+=""+val
+"";
}
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+=""+val
+"";
}
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
|