1、乐山师范学院毕业论文(设计)JSP网上书店实践熊玮摘要本文描述了用JSP技术实现动态网上书店的开发概述、技术特征、应用原理及方法,充分突出了JSP技术的优越性。简要论述了电子商务的优势、对社会的影响和建立电子商务网站应该注意的问题,并介绍了整个网站的运行流程,数据库的结构及网站的页面组成。着重论述了购物车和购书管理子系统的具体功能实现、关键技术的使用,以及与其他方法的综合应用。Abstract This page illustrates the theory and method of JSP(Java Server Pages). And let you learn the advantag
2、es of JSP. In the graduation design, we use JSP to create dynamic bookstore based on Web. It briefly expounds advantages and influence of EC, and introduces the flow of Web and structure of the database. Especially, it makes an emphasis upon “shoping cart” and “buying management”, integrated applica
3、tion of other methods .关键词电子商务 JSP 网上书店Keywords Electronic Commerce, JSP, Online bookstore第一章 电子商务漫谈 EC(electronic commerce),即电子商务,是指通过信息网络以电子数据信息流通的方式,在全世界范围内进行并完成的各种商务、交易、金融等相关的综合服务活动。它是传统的计算机网络应用技术、信息处理技术和商务运做技术相互渗透的结果,赋予了传统管理信息系统、网络和计算机应用系统全新的内涵。常见的电子商务有两种形式:企业对消费者(B2C)和企业对企业(B2B)。一、为什么要进行电子商务当前
4、,在全球范围内,电子商务发展速度之快,推动力之大,已呈现出不可阻挡之势。电子商务可以使企业获得以下优势,而这些优势正是传统企业很难得到的。l 面向客户,提供详尽的产品信息或服务介绍。方便客户的信息索取,极大地节省业务接待、咨询和回应的负担及费用l 面向客户,提供产品或服务的预定或咨询接待。l 面向客户,提供售后服务或动态服务状态查询。l 面向客户,直接进行销售,直至完成支付和运输安排。l 面向媒体和股东,作为企业公共关系重要窗口,宣传企业最新动态和经营状况。l 面向其他合作企业,进行企业与企业间的销售、市场、开发、交流等方面的合作。二、 电子商务对社会的影响电子商务的产生和发展对社会的方方面面
5、产生了重大的影响,以下概括它对社会影响的典型方面。1、 电子商务将带来企业生产经营和内部管理方式的革命性变革。通过互联网,整个世界都呈现在企业面前:客户在网上与供应商联系,利用网络进行会计结算和支付服务;企业也可以通过网络方便的与政府、竞争对手、消费者联系。2、 电子商务改变人们的消费方式。网上购物的最大特征是消费者为主导,购物意愿掌握在消费者手中;消费者还可以以一种轻松自由的自我服务方式来完成交易,消费者主权可以在网络购物中心中充分体现出来。3、 电子商务将带来一个全新的金融业。由于在线电子支付是电子商务的关键环节,也是电子商务得以顺利发展的基础条件。随着电子商务在电子交易环节上的突破,网上
6、银行、银行电子支付系统以及、电子支票、电子现金等服务,将传统的金融业带入一个全新的领域。除了上述这些影响外,它还将对政府行为、法律制度、就业以及文化教育等带来巨大的影响。三、建立电子商务网站应注意的问题 建立一个电子商务网站时,应特别注意以下几个方面:1、 注意整体的服务功能和服务水平。2、 确定基本服务项目。3、 增强品牌意识。4、 注重应用新技术。总之,建立和经营好一个电子商务网站对开展电子商务是十分重要的,必须给予足够地重视。第二章 网上书店开发概述一、开发技术 本次毕业设计的任务是,构建一个电子商务网站网上书店,采用的主要技术是基于服务器端的JSP、Java的组件JavaBean,以及
7、网页编程语言HTML(还有SQL、链接数据库JDBC-ODBC)。不再需要括号 JSP是Java Server Page的缩写,是由Sun Microsystems公司倡导、许多公司参与建立一种动态网页技术标准,它在动态网页的建设中有强大而特别的功能。JSP是一种服务器端HTML(或XML)嵌入Java代码的脚本语言,是开发Web动态网站快速而有效的工具。 JSP的技术的优势:1、 JSP技术是用Java语言作为脚本语言的。Java语言是成熟的、强大的、易扩充的编程语言。2、 高效性与安全性。JSP在执行前先被编译成字节码,字节码由Java虚拟机解释执行,比源码解释效率高。3、 可维护性。由于
8、JSP技术是一种开放的、跨平台的结构,因此Web服务器、平台及其他组件能很容易升级或切换,且不会影响JSP基本的应用程序。4、 稳定性。5、 产品的多样性。目前,在国内JSP还是一种较新的技术,采用的较少。但在国外,JSP+Servlet+JDBC+JavaBean已经成为开发电子商务平台的主流技术。随着国内与国际的接轨,JSP必将成为网站开发技术的首选。二、开发环境这次设计是在单仿真环境下开发的,即一台计算机上同时安装浏览器与WEB服务器。由于计算机没有连接网络,在计算机中应安装TCP/IP协议。接着,安装JSP引擎j2sdk1.4.2,以及Resin-3.0.9服务器。只有在JSP引擎存在
9、的条件下,Resin服务器才能正常运行,并且JSP引擎为我们提供了在编码时要用到的所有Java类和方法。第三章 网上书店功能概述一、网站功能概述网上书店主要分为八大模块:用户登录注册、网上购物、讨论区、访客计数、线上投票、问卷调查、实时新闻和管理系统。各模块的功能如下:(一)、用户登录、注册用户注册是为了保证用户在本网站的安全性,便于网站管理。用户登录后才可以进行购物。(二)、网上购物用户在进行网上购物时,必须现登陆,如果是新用户,则必须先进行注册。1、书籍展示用户可以通过搜索的方式查看书籍信息,搜索的方式有:按图书类别、按书名、按作者、按出版社。每本书都显示了书名、作者、定价、特价等,如果想
10、了解每本书的详细信息可以点击书名,详细信息还包括了书影、内容简介等。2、购物袋用户在浏览书籍时,按下“放入购物袋”按钮,就可以将书籍放入自己的购物袋中,便于购买。用户还可以根据自己的需要,进行查看、修改和清空购物袋的操作。(三)、访客计数用户登录时,计数器自动加一,并保证用户的其他操作使计数器不会改变。(四)、网上投票通过“ 网上投票”,可了解用户对某本书的喜爱程度。并显示最受欢迎的前七本书,用户在此可购买这些书。(五)、问卷调查用户可以填写对某本书的意见。(六)、讨论区用户可以在此发表新文章,也可浏览以前的文章,并可对其他用户所写的文章进行回复。(七)、管理系统管理系统是系统管理员对整个网站
11、后台数据库进行维护,是此网站最重要的大门。在进入本栏目时系统会提示输入系统管理员的用户名和密码,对于其他用户此界面是不可见的。它包括用户管理、书籍管理、新闻管理和讨论区管理,这里重点介绍书籍管理。书籍管理包括图书库存管理、订单管理、图书销售情况管理。1、图书库存管理管理员可以添加新书、添加书籍分类以及修改书籍库存信息和删除书籍。2、图书销售情况管理管理员可根据日期和书号任一种或这两个条件作为查询条件,了解图书的销售情况。3、订单管理(1) 若管理员获得支付方式为汇款的用户的汇款,可凭汇款上的定单号,查询此定单的有关信息,并可作某些修改操作,如:将数据库表中的“是否支付”栏,更改为“Y”。 (2
12、) 若本网站已寄书给用户,管理员将凭定单号,查询此信息,并修改数据库表中“是否寄出”栏为“Y”。(3) 若查询得到的定单信息中“是否支付”栏或“是否寄出”栏已为“Y”,则此信息不可改变,这样可以防止管理员误操作。管理员还可以根据日期查询并删除在此日期中的还未付款的用户信息。二、网站功能模块图网上书店系统实时新闻访客计数注册登录网上投票问卷调查讨论区网上购物管理模块商品展示购物车下订单用户管理新闻管理讨论管理购物管理I三、网站流程图成功失败访客用户进入访客计数用户注册用户登录不注册网上书店实时新闻线上投票问卷调查讨 论 区用户信息管理图书展示放 入 购 物 车图书搜索验 证用户订购第四章 各子系
13、统的功能实现 我们的网上书店包括八大功能模块,我在这里详细介绍一下购物车的实现和书籍管理系统的实现。一、 购物车 用户对本网站图书的购买,是通过“放入购物车”这个动作来实现的。由于用户选择的书并不意味着一定要定购,因此,没有必要对数据库进行操作。只是将用户选购的书号与该书的购买数量以字符串的形式存放于购物袋中,格式如:书号1:数量1&书号2:数量2&,依此类推。在购物袋中,用户还可以对选购的商品进行查看、修改及清空操作。 文件流程如下:(对箭头进行说明)写入读取读取读取查看购物车放入购物车清空购物车用户操作clearcart.jspcart.jsporder.jspviewcart.jsp订购
14、BookShop.mdb(1)放入购物车 参数传递 我们这里放入购物车的操作是通过超连接来传递参数的。具体代码如下:a href=cart.jsp?bno=放入购物车“放入购物袋”操作的实现这个动作的实现由文件cart.jsp完成。它对参数处理的算法如下。 用request对象,方法getParameter,获取传过来的书号bno;qty默认值是1;然后在将其id及qty放入购物车;在放入购物车时要判断该书是否已经存在如果存在则不放入,不存在在放入购物车中 (2)查看购物车“查看购物车”功能,是显示用户选购的书籍信息,包括书名、作者、订购数量、单价、特价、金额小计。若用户在未选购书的情况下,点
15、击“查看购物车”,系统将提示用户“尚未选购”。所用文件为viewcart.jsp、BookList.java、BookShopDB.java。“查看购物车”页面如图:(3)订购“图书订购”是“网上购物”子系统的最后一步,在这里,用户将确定最终购买的图书,它是实现购物的关键,用户在cart.jsp或viewcart.jsp页面中点击“订购”后,就把用户当前所选购的图书以及相关信息插入到订单信息表中,实现订购的全过程。 相关的还要将图书的“剩余”信息做判断和相应的修改。(4)清空购物车(为什么没有图例呢) 此功能将清空购物车中的信息,并在窗口中显示“购物车中没有商品”的信息。二、书籍管理系统(文件
16、的流转关系图呢)网上书店的书籍管理系统中,管理员可以添加新的书籍、修改书籍库存信息、删除书籍、添加新的图书分类等。(1)图书管理主页面“adminall.jsp”是图书信息管理的主界面,在这里可以查看每本书的信息,并提供了修改书籍库存、删除书籍、添加书籍和添加书籍分类的连接。图书管理主界面的页面如下在这个页面中,首先用创建一个所有信息的记录集“rs”。关键代码如下: 这样就可以通过这个记录集,从数据库中读取书好、书名、所属分类、库存等信息。 在页面中加入修改库存、删除、添加新书、添加书籍分类的连接,分别指向update_book.jsp、delbook_ok.jsp、addnewbook.js
17、p和addnewclass.jsp。(2)删除书籍 删除书籍的操作是在“delbook_ok.jsp”页面中完成的,在图书管理的主界面中点击删除后,相应的参数“bn”就通过超连接传到“delbook_ok.jsp”中:a href=delbook_ok.jsp?bno= class=style1,500,500删除删除书籍的关键代码是:用request.getParameter()获取从“adminall.jsp”传来的bno,然后通过删除语句删除所要删除的书籍。(3)图书库存管理图书库存管理包括“update_book.jsp”和“updatebook_ok.jsp”页面。在图书管理的主界面
18、中点击“修改库存”后,相应的参数“bn”就通过超连接传到“updatebook_ok.jsp”中:a href=update_book.jsp?bno= class=style1,500,500库存修改 “update_book.jsp”页面是填写修改库存信息的页面:在输入新增入库数量后,点击“增加”按钮后,连接到“updatebook_ok.jsp”页面,在该页面中进行添加修改到数据库的处理。用request.getParameter()来获取从“update_book.jsp”传来的String型数据,再通过Integer.parseInteger()将String型数据转换成int型,最
19、后实现对数据库中数据的修改。“updatebook_ok.jsp”中的关键代码如下:“up_db.executeUpdate(update_sql1)”是将添加的数量增加到入库信息中;“up_db.executeUpdate(update_sql2)”将添加的数量增加到剩余书籍信息中;这样就完成了对书籍库存信息的修改。(2)添加新书书籍管理系统能够实现向数据库中添加新书信息的功能,添加的信息包括分类、书名、作者、出版社、图片、价格、数量以及内容简介等。用户在添加新书时,首先在“addnewbook.jsp”页面中填写要添加的新书的相关信息,确认填写信息正确后,点击“添加新书”按钮,在“addb
20、ook_ok.jsp”页面中,用request对象获取从“addnewbook.jsp”中传来的新书的信息,然后添加到数据库中,最后返回到“addnewbook.jsp”页面。“填写新书信息”页面如图:“addnewbook.jsp”页面是通过form表单来提交数据的,关键算法如下:先建立一个form表单用input属性建立多个文本框,其中分类用下拉列表框来显示建立一个submit按钮 建立清除按钮其中显示分类的方法如下:option value=“addbook_ok.jsp”页面中,添加新书操作的关键算法如下:引入javabean, 连接数据库;用request对象获取form中的信息;如
21、:String name=request.getParameter(name); /获得书名/将获取的信息由String转换成相应的数据类型;如:int bclass=Integer.parseInt(request.getParameter(bclass); /转换为int型然后,将获取到的信息插入到数据库的Book表中;Stringinsert_sql=insert into Book(BookName, Author, Publish, Content, ClassNo, Picture, Price, WebPrice, NowPrice, Amount, Leav_number) v
22、alues(+name+, +author+,+publish+,+content+,+bclass+,+pic+,+price+,+webprice+,+nowprice+,+amount+,+leave+);addbook_ok.executeUpdate(insert_sql);(3)添加新的分类添加新的分类时,在“addnewclass.jsp”页面中,为方便管理员添加新的书籍分类,要先列出目前已有的书籍分类,然后再提交给管理员添加新的分类的文本框。管理员点击“添加书籍分类”按钮后,填写的书籍分类就传到“addclass_ok.jsp”页面,在该页面中完成添加操作,将新的书籍分类插入到
23、数据库的Class表,最后返回到“addnewbook.jsp”页面。“addnewclass.jsp”页面如图:“addnewclass.jsp”页面是通过form表单来提交数据的,关键算法如下:用select属性建立分类的下拉列表框用input属性建立一个文本框“addclass_ok.jsp”页面中,添加新书操作的关键算法如下:String cname=request.getParameter(classname);String insert_sql=insert into Class(ClassName)values(+cname+);addclass_ok.executeUpdate
24、(insert_sql);第五章 系统测试系统测试,主要是对购物车和购书管理系统的测试。一、测试购物车通过图书信息显示的页面,在页面中选择将该书放入购物车,这样,改书的基本信息就可以在用户的购物车中显示,如图1:图1同样的书籍购物车中只有一本,不能重复放入用户可以在购物车修改购买数量;也可以将商品移出购物车点击继续购物,则购物车窗口关闭清空购物车可以将购物车中所有书籍移出,此时购物车中没有任何书籍。订购,系统显示如图2:图2点击订购后,订单信息插入到数据库的Sheet表中,如图3:图3二、 购书管理系统测试(1)图书管理主页面如图4:图4(2)点击“删除”后,相应的图书就被删除,结果如图5:(
25、相应的数据库中的信息)图5(3)点击“库存修改”后,进入图书的库存修改,显示如图6:图6点击“增加”后,修改数据库的库存信息,数据库修改如图7:图7(4)添加新书测试填写新书信息为图8:图8点击添加后,数据库中就添加了该书,数据库中的信息如图9:图9(5)添加新的分类测试填写新的分类信息为图10:图10点击添加后,数据库中就添加了新的分类,数据库中的信息如图11: 图11第六章 数据库设计 网上书店采用Microsoft Access 2004作为后台的数据库。我们建立了一个名为BookShopDB的数据库用于存放以上介绍的表,各表的名称和功能如表1所示。表1 BookShopDB数据库中的表
26、及其功能说明表 名功 能 说 明Book书籍信息表Class书籍分类信息表User用户信息表Admin管理员信息表Sheet订单信息表message留言信息表counter计数器信息表 下面将详细介绍各表的数据结构。 1、Book表 在Book(书籍信息表)表中,存放有关书籍的一切信息,详细的数据结构如表2所示。表2 Book表的数据结构字段名称数据类型长 度说 明BookNo自动编码(long)关键字,书籍编号BookName文本(String)50书籍名称Author文本(String)50作者ClassNo数字(long)用于存放书籍分类的编号Publish文本(String)50出版社
27、Content备注(String)内容简介Picture文本(String)图片信息Price数字(double) 书籍定价WebPrice数字(double) 本站的售价NowPrice数字(double) 现价Amount数字(long) 书记入库的总量Leav_number数字(long) 剩余书籍的数量RegTime日期(datetime)登记日期,默认值Date() 2、Class表 在Class(书籍分类信息表)表中,存储所有书籍分类的信息,包括给每个分类唯一的ClassNo、分类的名称。详细的数据结构如表3所示。表3 Class表的数据结构字段名称数据类型长 度说 明ClassN
28、o自动编码(long)关键字,类型编号ClassName文本(String)50 分类名称 3、Sheet表在Sheet(书籍分类信息表)表中,存储用户购物的订单信息,详细的数据结构如表4所示。表4 Sheet表的数据结构字段名称数据类型长 度说 明SheetID自动编码(long)关键字,自增字段,订单编号UserNo文本(String)50用户编号BookNo数字(long)购买书籍的编号Number数字(long)购买数量Tol_Price数字(double)总价格RegTime日期(datetime) 购买登记时间,默认值Date()Status数字(long)订单状态,(0已创建,1
29、已付款,2已寄货),默认值0第七章 JavaBean(对于使用的JavaBean只需在前面的章节中提及即可, 而源代码可以放在附录中,附录中还应包括显示页面的关键文件的源代码,) 所有的JavaBean都放在BookShop包中。一连接数据库的JavaBeanBookShopDB.javapackage BookShop;/Bean所属的套件import java.io.*;import java.util.*;import java.sql.*;/simport javax.servlet.http.*;/HttpSessionBindingListener接口public class Bo
30、okShopDB /implements HttpSessionBindingListener /与数据库相连 private Connection con=null; private Statement stmt=null; private ResultSet rs=null; public BookShopDB() DBConnection(); /与数据库相连的方法private void DBConnection() try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); /采用绝对路径动态链接数据库,若BookShopDB.mdb放在E:Bo
31、okShopDB.mdb String url = jdbc:odbc:driver=Microsoft Access Driver (*.mdb);DBQ=E:/BookShopDB.mdb;con = DriverManager.getConnection(url,); catch(Exception ex) System.out.println(ex.toString(); /输出Connection的方法public Connection getConnection()if(con=null)DBConnection(); return this.con;public ResultSe
32、t executeQuery(String sql)rs=null;try/con=this.getConnection();Statement stmt=con.createStatement();rs=stmt.executeQuery(sql);catch(SQLException ex)System.err.println(aq.executeQuery:+ex.getMessage();return rs;public void executeUpdate(String sql)try/con=this.getConnection();Statement stmt=con.creat
33、eStatement();stmt.executeUpdate(sql);catch(SQLException e)System.err.println(DBC():+e.getMessage();三、 购物车 JavaBeanBookList.javapackage BookShop;import java.io.*;import java.util.*;import java.sql.*;public class BookListpublic String booklist;public BookList()booklist=;public void addBook(String bno,
34、String qty)boolean flag=true;for(int i=1;i=this.getAmount();i+)if(this.getBookno(i)=Integer.parseInt(bno)flag=false;break;if(flag)booklist=booklist+bno+:+qty+&;public void setList(String List)booklist=List;public String getList()return booklist;public int getAmount()int amount=0;for(int i=0;ibooklis
35、t.length();i+)if(booklist.charAt(i)=&)amount+;return amount;public int getBookno(int index)int i=0;int beginindex=0;String bno=;for(int j=0;jbooklist.length();j+)if(booklist.charAt(j)=:)i+;if(i=index)bno=booklist.substring(beginindex,j);break;if(booklist.charAt(j)=&)beginindex=j+1;return Integer.par
36、seInt(bno);public int getQty(int index)int i=0;int beginindex=0;String qty=;for(int j=0;jbooklist.length();j+)if(booklist.charAt(j)=:)beginindex=j+1;if(booklist.charAt(j)=&)i+;if(i=index)qty=booklist.substring(beginindex,j);break;return Integer.parseInt(qty);谢辞通过这次毕业设计,我学会了利用先进的JSP建立动态网站的方法和技术,并感受到JSP技术的许多优越性。在开发过程中,提高了自己的动手能力。在此,我要特别感谢我们的导师蔡宗吟在这次设计中给我们的指导和帮助。与此同时,我还要感谢所有组员,在我们的共同努力下,圆满完成了毕业设计。参考文献1 网络编程语言JSP实例教程 电子工业出版社2 JSP站点设计编程指南 电子工业出版社3 杨学瑜 王志军 刘同利 JSP入门与提高 清华大学出版社4 布雷恩.赖特 著 赵明昌 译 JSP数据库编程指南 北京希望电子出版社5 David M.Geary 著 贺名 译 JSP高级开发与应用 科学出版社19