毕业设计-基于JSP的网上购书系统.doc
欢迎添加微信互相交流学习哦!
文章图片
项目源码:https://gitee.com/oklongmm/biye2
摘要
随着网络信息的发展,网络在人们生活中的应用越来越广泛。人们越来越注重时间和效率,希望可以在最短的时间内购买到自己所需的图书。但由于书目的繁多和书籍信息更新的迅速,使去书店购书成为一件费时费力的事情,给人们繁忙的工作生活增添了很多麻烦,于是网上购书便成了人们向往的事情。本系统正是为了应对这一需求而设计的,使人们足不出户就可以轻轻松松地买到自己想要的书,既省时又省力。在电子商务网站中,网上书店是目前应用最广、最成功的典范之一。通过此类网站,用户可以充分利用Internet的发展给人类带来的便捷,突破时间和空间上的限制,实现网上购书。
本系统以My Eclipse6.0为主要开发工具,使用Oracle数据库,通过hibernet与数据库进行交互,实现了用户注册、登陆、身份验证及用户数据的采集、书籍的浏览查询和购买等功能。
关键词:MVC、Hibernate 、JSP+Servlet、oracle、java
Abstract
Along with the development of network information, network in people's lives applied more and more widely. There is a growing focus on the efficiency and time and hope that in the shortest possible time to buy the books which they need. However, due to the large bibliography of books and the rapid updating of information, that the purchase of books to bookstores becoming a very time-consuming and laborious things to people who working and living busy. All these things adding a lot of trouble to people, so book online has become a matter of people yearn for. The system is to respond to the needs of the design which is both time and effort, so that people can easily stay at home and buy their own books which they want. Nowadays, in e-commerce sites, the online bookstore is one of the most widely used and successful examples. Through such Web site, users can take full advantage of the facility which the development of Internet bring to humanity and take a breakthrough in time and space constraints, realize the online book buying finally.
My Eclipse6.0 in the system as the main development tools, Oracle as the databases, through hibernet interact with the database . Achieving the user registration, login, authentication and user data collection, the browser queries the purchase of books and other functions.
Key words: MVC、Hibernate 、JSP+Servlet、Oracle、java
目录
TOC \o "1-3" \h \z \u 前言3
第1章 系统概述及可行性分析4
1.1 系统概述4
1.1.1 系统主要工作流程4
1.1.2 系统开发目的和研究背景5
1.2 可行性分析7
1.2.1 技术可行性分析7
1.2.2 环境可行性分析8
1.2.3 经济可行性分析8
第2章 系统总体设计9
2.1 系统结构总框架设计9
2.2 系统结构流程设计9
2.3 数据流程图设计11
第3章 系统数据库设计11
3.1 数据库概念结构设计11
3.2 数据库逻辑结构设计13
3.3 Oracle数据库具体实现15
第4章 系统详细设计17
4.1 用户注册及登陆的实现17
4.1.1 登陆界面的设计及其变化17
4.1.2 日历功能的设计19
4.1.3 登陆验证功能的设计20
4.1.4 登陆角色功能的设计22
4.1.5 普通用户注册界面23
4.2 购书模块的设计24
4.2.1 图书列表功能的设计24
4.2.2 模糊检索功能的设计26
4.2.2 购物车部分29
4.2.3 用户信息部分和购物清单部分31
4.3 用户订单管理模块的设计34
4.3.1 订单列表部分34
4.3.2 订单明细部分36
第5章 关键技术及系统安全性能38
5.1 系统关键技术38
5.2 系统安全性能38
第6章结 论39
参考文献40
谢辞41
前言
20世纪90年代以来,计算机网络技术得到了飞速的发展,网络的全球化成为不可抗拒的潮流。21世纪是信息经济的时代,在信息社会里起决定作用的不是资本,而是信息知识,伴随着高科技Internet的出现,Internet正在走入千家万户,它不仅仅给人们提供了一个全新获取信息的手段,而且日益影响我们的生活、学习和工作方式。因此,许多人、许多公司都希望自己能够制作网页,以展现本人或公司的风采和产品,以及有许多顾客想要通过上网来购物。
为了迎合人们的文化知识需要和方便大家购物,电子商务随之而出。网络购书管理系统是目前Internet上广泛使用的在线系统之一,它要求实现的功能非常多,最重要的当属图书的销售,也就是管理库房中的图书,以及管理用户的购物车,从而实现结账等功能。同时,为了保证图书交易的正常进行,必须对用户身份进行验证。最后该系统还必须具有管理员的功能,允许管理员对整个系统的数据库进行操作。
现在人们购书大多是去书店,在书店里寻找自己需要的书籍并购买。经过几年实践,我国电子商务发展迅猛,越来越走向务实,网络的应用已经蓬勃发展起来。开发一类适合现代人网上购书的系统――网上书店是非常必要和可行的,此类系统在我国已得到初步应用并有很广泛的市场需求前景。
网上书店系统可以实现人们远程逛书店和购买图书的愿望。本系统的主要功能是帮助经营实物书店的人们扩大市场和增加知名度,帮助在实际买书的过程中受到时间和地域限制的人们更方便地购买图书。其基本功能包括普通用户注册、登录、图书展示、图书查询、在线浏览图书、远程购买、远程交易和管理员对书籍及订单的管理等。本系统使用的开发工具是MyEclipse6.0,使用的数据库是Oracle 10g。该系统是基于实体书店及出版社等用户背景开发的,可以有效的实现网上图书交易。
本系统采用Sun公司J2EE企业及编程模式,采用可视化的编程环境,简单易懂的编程语言,用较少的代码可以实现大量繁琐复杂的问题的功能,本系统采用现在流行的MVC框架,不仅易于上手,而且扩展性也好,下面将本系统的主要内容介绍如下:
第1章主要介绍论文的研究背景及意义;
第2章主要介绍系统实际需求和系统总体设计;
第3章主要介绍本系统数据库的设计;
第4章主要介绍本系统详细设计;
第5章主要介绍本系统的关键技术及系统安全性能。
第1章 系统概述及可行性分析
1.1 系统概述
随着现代信息技术的飞速发展,全球性的网络化、信息化进程正逐渐改变着人们的生活方式,促使信息系统必须高效地处理内部信息,由传统的生活方式逐步提高到基于数据库的网络自动化信息处理。
本系统采用MVC三层架构的模式:M即model,就是模式层,相关技术是JavaBean。V即view,视图层,相关技术是Jsp,用于显示操作界面。C,即control,控制层,相关技术是servlet,用于控制和转发分别来自操作界面操作请求和数据库的处理信息。
在设计模式上,本系统用到了工厂模式和ORM模式等。工厂模式是我们最常用的模式了,著名的Jive论坛就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。使用工厂模式会给本系统带来更大的可扩展性和尽量少的修改量,而其中最关键的就是建立工厂类和相应的类接口。所谓ORM模式,即Object Relational Mapping,对象-关系映射模式,采用映射元数据来描述对象-关系的映射细节,通常采用xml格式。在该系统中使用ORM技术是为了解决面向对象与关系数据库存在的互不匹配的现象。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中,其本质就是将数据从一种形式转换到另外一种形式。
本系统在开发过程中还结合了Struts和 Hibernate来处理页面逻辑和对象的持久化工作,使用了当前流行的Struts框架,采用Hibernate作为ORM框架。
1.1.1 系统主要工作流程
可以将该系统划分为以下几个层次模块:客户端(即浏览器)、表现层、业务逻辑层、数据访问层、数据库。
首先通过Tomcat把本系统estore部署到webapplication下,然后启动Tomcat。当客户端通过浏览器发送一个请求,通过servlet把该请求转交给业务逻辑层进行相应增删改查的处理,通过hibernet与数据库交互,从数据库中取或存数据,把结果返回给业务逻辑层,再返还给JSP,继而客户便可通过浏览器看到操作结果。
具体数据流程为:在页面上进行相应的操作,触动action(里面有url)到webroot->web-inf->web.xml里通过action触发的相应事件找到对应的servlet,通过servlet名字找到相应的servlet类,通过servlet调用service层的方法,通过service调用相应dao层的方法,dao层通过hibernite与数据库交互进行相应的增,删,改,查的处理。
本系统主要工作流程图1-1所示:
图1-1 系统主要工作流程图
1.1.2 系统开发目的和研究背景
传统的购书方式中,需要去书店挑选,选择到合适的书籍有时需要耗费相当多的时间和精力,这是一个繁杂的过程,已经越来越不适应社会信息化建设与现代生活方式的需要。尤其在经济不发达地区,书店分布少,书籍种类少,顾客不易买到自己想要的书籍,给顾客购书带来了很多的不便。本网上购书系统正是为了解决此类问题而设计的,它是信息化建设的产物,也是传统书店的延伸。可以利用互联网络足不出户随时随地购书,加上数据库技术的利用,大大简化了图书选择和购买的过程。
网上书店是一个基于Internet的网上图书销售系统。用户可以通过浏览器登陆书店页面,浏览其中的图书信息,将书店中感兴趣的书加入到购物车中,如果决定购买图书,则可以将购物车中的图书作为订单下达。网上书店系统管理员会定期处理用户下达的订单。用户使用网上书店可以足不出户购买到自己感兴趣的图书,而且可以使用图书检索功能更快地找到所需的图书。网上书店利用Internet的优势,打破了传统书店的经营模式。
在电子商务网站中,网上书店是目前应用最广、最成功的典范之一。通过此类网站,用户可以充分利用Internet的发展给人类带来的便捷,突破时间和空间上的限制,实现网上购书。网上书店的崛起对传统的图书流通体系产生了强烈的冲击,有效地缩短了图书的流通发行环节,将广大读者、图书、出版社、发行者紧密地联系在一起,大大提高了图书流通率,同时也丰富了人们的头脑,增加了人们的知识面,提高了工作效率。
网上购书有着经营成本低、库存虚拟、用户检索方便、地域限制少等优点,网上购书系统正是信息时代和效率优先最完美的结合体。在这个信息逐步发达的时代,在这个追求时间和效率的时代,网上购物将成为一种趋势和时尚。
1.1.3 需求分析
1. 系统用户
使用网上书店系统的用户主要有两种:一种是消费者,可以浏览网上书店中的书藉信息、进行网上购书;另一种是网站的管理者,可以对网上书店中的书藉信息进行管理、处理客户的订单。
2. 系统功能需求
鉴于网上书店系统的两种用户角色的说明,可将系统分为前台和后台,前台是给客户使用的,用于展示图书信息和完成与客户的交互;后台是给网站的管理者使用的,用于管理网站的内容。
网上书店前台实现的功能有:
(1)网站首页。首页是客户打开网站的第一个页面,为以吸引客户,更体现人性化设计,本网站设置了背景变换功能,即在不同的季节展现出不同的背景设计风格。
(2)新注册用户。提供客户网上自助注册功能,填写注册表单并提交后,就能成为网上书店的用户,注册成功并登录后就可以进行网上购书了。
(3)用户登录。供已注册的用户登录,登录后才能在网上购书。
(4)网上购书。已登录的用户可以将需要购买的书藉放入购物车,可将已放入购物车中的书藉生成一张订单并作确认。
网上书店后台管理实现的功能有:
(1)书藉管理。供网站管理员对网上书店中的书藉进行管理,可增加书藉信息。
(2)订单管理。供网站管理员管理客户提交的订单,对于已经提交的订单,管理员可以根据订单信息进行发货。
1.2 可行性分析
1.2.1 技术可行性分析
1、Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发。Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。
2、Web应用程序开发环境—JSP技术
JSP的全称是Java Server Pages,它是SUN推出的一种动态网页技术标准。它在传统的静态页面文件(*.html,*.htm)中加入JAVA程序片段和JSP标记,就构成了JSP页面。JSP具有以下的优点:
a)能够跨平台:JSP支持绝大部分平台,包括现在非常流行的LINUX系统,应用非常广泛的Apache服务器也提供了支持JSP的服务;
b)一次编写,处处运行:作为JAVA开发平台的一部分,JSP具有JAVA的所有优点。
3、Tomcat应用服务器
目前支持JSP的应用服务器是较多的,Tomcat是其中较为流行的一个Web服务器,被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,可见其在业界的地位。
Tomcat是一个免费的开源的,在Tomcat中,应用程序的部署很简单,你只需将你的工程放到相应目录下即可,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。
4、Oracle 数据库
Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,是目前最流行的客户/服务器(Client/Server)体系结构的数据库之一。
1.2.2 环境可行性分析
本系统的开发环境:
操作系统:Windows系列操作系统;开发工具:MyElcipse 6.0;
应用服务器:Tomcat 5.0.28;数据库:Oracle。
1.2.3 经济可行性分析
经济可行性:该系统对操作环境要求不大,系统的开发不需要很强技术和经济支持,维护起来也很方便,就其功能带来的利益来说,是完全可行的。
第2章 系统总体设计
2.1 系统结构总框架设计
本网上购书系统主要分成三大模块:客户管理、图书管理和订单管理。其中各模块又是由若干个子模块构成的,形成一个结构紧凑、功能明确完整的网上购书系统。系统结构总框架设计如图2-1所示:
2-1整个系统结构图
2.2 系统结构流程设计
用户必须按照正确的顺序进入系统,用户的角色分为管理员和普通用户两种。管理员用户无需注册,可以直接用管理员用户名和密码登陆;普通用户需先注册,注册成功后方可登陆。两种用户登陆成功后便可通过按键提示进行相应操作,具体系统结构流程图如图2-2所示:
图2-2系统结构流程图
2.3 数据流程图设计
本系统的中心角色是用户。用户开始注册、登陆,然后用户就可以进行书籍检索、购买、确认订、付款等。系统管理人员可以查看订单信息,根据订单信息发货等。
图2-3系统数据流程图
第3章 系统数据库设计
3.1 数据库概念结构设计
数据库在本购书系统中占有及其重要的地位,数据库结构设计的好坏关系到系统的运行效率、存储数据的效率、系统的复杂程度等,合理的数据库结构设计可以提高系统性能。考虑到用户需求的各种实体,本网上购书系统规划出的实体有用户信息实体、图书信息实体、购物车信息实体、订单信息实体,订单明细信息实体。各实体总体描述E-R图如图3-1所示:
图3-1系统实体总体描述E-R图
3.2 数据库逻辑结构设计
将以上的数据库概念结构转化为关系数据模型,即数据库的逻辑结构。各个数据表的字段设置如下各表所示:
字段号字段名类型宽度小数索引
1登陆账号数值型4主键
2用户名字符型20唯一
3密码字符型30
4邮编字符型6
5地址字符型60
6电话字符型11
7E-mail字符型20
表3-1用户信息表
字段号字段名类型宽度小数索引
1图书编号数值型4主键
2书名字符型30唯一
3作者字符型50
4出版社字符型50
5出版日期日期时间10
6图书单价数值型62
7ISBN字符型13
表3-2图书信息表
字段号字段名类型宽度小数索引
1图书编号数值型4主键
2书名字符型30唯一
3数量字符型5
4价格数值型72
5操作布尔型1
表3-3购物车信息表
字段号字段名类型宽度小数索引
1订单编号数值型10主建
2用户登陆账号数值型4外键
3订单处理字符型10
4图书价格数值型7
5邮寄方式数值型4
6邮费数值型2
7折扣数值型11
8需付款总额数值型72
9付款情况布尔型1
表3-4用户订单信息表
字段号字段名类型宽度小数索引
1订单编号数值型10主键
2书名字符型10外键
3价格数值型62
4数量数值型3
表3-5 订单明细表
3.3 Oracle数据库具体实现
对数据库进行操作的部分SQL语句:
create sequence book_seq start with 1 increment by 1;
create sequence customer_seq start with 1 increment by 1;
create sequence orderform_seq start with 1 increment by 1;
create sequence orderline_seq start with 1 increment by 1;
create table customer(
id number primary key,
name varchar2(20),
password varchar2(20),
zip varchar2(20),
address varchar2(50),
telephone varchar2(20),
email varchar2(30));
create table orderform(
id number primary key,
cost number(8,2),
orderdate date,
customerid number references customer(id));
create table book(
id number primary key,
name varchar2(100),
price number(8,2));
create table orderline(
id number primary key,
num number not null,
orderid number references orderform(id),
bookid number references book(id));
第4章 系统详细设计
4.1 用户注册及登陆的实现
4.1.1 登陆界面的设计及其变化
在浏览器地址栏键入以下地址:http://127.0.0.1:8888/estore_jsp/login.jsp 即出现本系统的登陆界面。为体现人性化设计,本系统在登陆窗口上增加了日历和日期选择功能,并且网页的设计风格可以随季节的不同而变化,使用户在登陆到本网站时在不同的季节有不同的心情。例如,在本网站的登陆界面可以随季节的变化而表现出不同的风格,随着日期设置的变化,登陆界面可以随着春夏秋冬四季的交替而变化,其交替时间分别为春分日(3月21日)、夏至日(6月22日)、秋分日(9月23日)和冬至日(12月22日)。具体实现效果如图4-1(a)(b)(c)(d)所示:
图4-1(a)春图4-1(b)夏
图4-1(c) 秋图4-1(d)冬
其中部分实现代码如下:
var date_spring=year+"/03/21";
var date_summer=year+"/06/22";
var date_autumn=year+"/09/23";
var date_winter=year+"/12/22";
var date1=newDate(date_spring).getTime();
//春
var date2=newDate(date_summer).getTime();
//夏
var date4=newDate(date_autumn).getTime();
//秋
var date5=newDate(date_winter).getTime();
//冬
var date3=newDate(date_show).getTime();
//当前时间
if((date3>date1)&&(date3
else if((date3>date2)&&(date3
}else if((date3>date4)&&(date3
}else if((date3>date5)||(date3
}
//alert(date3>date4);
alert(date3
在登陆界面上增加了日历功能,其时间与计算机的时间是一致的,同时也可以自己选择日期,日期变化后登陆界面随之变化。其效果图如图4-2所示:
其中部分实现代码如下:
//选择日期功能
function change_date(temp,mode)
{
var t_month,t_year;
if (mode){
if(mode==1)
t_month=parseInt(cele_date_month.value,10)+parseInt(temp,10);
else
t_month=parseInt(temp)
if (t_month
change_date(parseInt(cele_date_year.value,10)-1,0);
}
else{
if (t_month>cele_date_month.options(cele_date_month.length-1).text){
cele_date_month.value=https://www.it610.com/article/cele_date_month.options(0).text;
change_date(parseInt(cele_date_year.value,10)+1,0);
}
else
{cele_date_month.value=https://www.it610.com/article/t_month;
set_cele_date(cele_date_year.value,cele_date_month.value);
}
}
}
else{
t_year=parseInt(temp,10);
if (t_year
set_cele_date(cele_date_year.value,1);
}
else{
if (parseInt(t_year,10)>parseInt(cele_date_year.options(cele_date_year.length-1).text,10)){
cele_date_year.value=https://www.it610.com/article/cele_date_year.options(cele_date_year.length-1).text;
set_cele_date(cele_date_year.value,12);
}
else
{cele_date_year.value=https://www.it610.com/article/t_year;
set_cele_date(cele_date_year.value,cele_date_month.value);
}
}
}
4.1.3 登陆验证功能的设计
在登陆过程中,如果出现用户名或密码输入错误或空输入,系统便会弹出提示信息。该功能通过action触发的用户名和密码验证事件找到对应的servlet,通过servlet名字找到相应的servlet类,通过servlet调用service层的方法,通过service调用相应dao层的方法,dao层通过hibernite与数据库交互进行相应的查找和操作。效果图如图4-1-3(a)和4-1-3(b)所示:
4-1-3(a)登陆用户名验证4-1-3(b)登陆密码验证
其中部分实现代码如下:
function init()
{
setTimeout(refWin,60000000);
}
function queren(){
if(f1.name.valuehttps://www.it610.com/article/==''){
alert("请输入用户名!");
return;
}
if(f1.password.valuehttps://www.it610.com/article/==''){
alert("请输入密码!");
return;
}
f1.submit();
}
function ss()
{
if(window.event.keyCode==13)
{
if(f1.name.valuehttps://www.it610.com/article/==''){
alert("请输入用户名!");
return;
}
if(f1.password.valuehttps://www.it610.com/article/==''){
alert("请输入密码!");
return;
}
f1.submit();
}
}
4.1.4 登陆角色功能的设计
为了便于网站管理,系统用户可以以不同的身份进行登陆,分为管理员用户登录和普通用户登录。其中管理员用户的登录用户名和密码是系统设定的,用户名和密码均为admin;而普通用户使用本系统要先进行注册,注册成功后方可进行登陆。管理员用户的功能是在普通用户功能的基础上增加了一些功能,如书籍的添加、订单的管理等。其实现效果图如图4-1-4(a)和4-1-4(b)所示:
图4-1-4(a)管理员登陆图4-1-4(b)普通用户登录
其部分功能实现代码如下:
String name=request.getParameter("name");
String password=request.getParameter("password");
Customer c=null;
try {
if(("admin".equals(name))&&(password.equals("admin"))){
response.sendRedirect("listBookStore1.jsp");
//管理员页面
System.out.println("管理员登陆");
}else{
System.out.println("客户登陆");
c=customerService.login(name, password);
//获得的customer放入内存session
HttpSession session=request.getSession();
session.setAttribute("customer",c);
//若有别的request就得用内部跳转
response.setCharacterEncoding("UTF-8");
response.sendRedirect("listBookStore.jsp");
//用户页面
}
} catch (CustomerServiceException e) {
e.printStackTrace();
request.setAttribute("error1",e.getMessage());
request.getRequestDispatcher("login.jsp").forward(request,response);
}}}
4.1.5 普通用户注册界面
普通用户登录本购书系统前需要先进行注册,注册成功后方可进行操作,用户所有注册信息都将被系统管理员获取,其值也将被传送到订单管理页面上。在出现的登陆界面页中点击“注册新用户”即进入用户注册界面,输入用户登陆账号、密码等基本信息并提交后,即可返回登陆界面,并在其中输入已经通过注册验证的用户名及密码。当点击登录时就进入http://127.0.0.1:8888/estore_jsp/listBookStore.jsp中,即可进行图书的检索、购买等。其具体实现代码略,其效果图如图所示:
图4-1 普通用户注册界面
4.2 购书模块的设计
4.2.1 图书列表功能的设计
在用户登陆界面输入通过验证的用户名和密码并点击“提交”后,系统便调用RegisterServlet中的doPost方法,此时页面就跳转到进入图书列表界面。用户以不同的身份进入就会出现两种不同的界面:管理员图书列表界面和普通用户图书列表界面。其中管理员图书列表界面是在普通用户图书列表界面所拥有功能的基础上增加了添加图书和管理用户订单的功能。该列表将所有的相关书籍罗列出来,用户可以对图书进行相应的操作,检索图书、输入购买数量并点击“购买”后便将其放入购物车,操作完成之后便进入购物车界面。两种不同的界面效果如图4-2-1(a)和图4-2-1(b)所示:
图4-2-1(a)管理员图书列表界面
图4-2-1(b)普通用户图书列表界面
其中实现管理员的追加图书功能的部分实现代码如下:
public class AddBookServlet extends HttpServlet {
private static IOrderService orderservice;
public void init() throws ServletException {
orderservice=(IOrderService)BeanFactory.getBean(BeanFactory.ORDERSERVICE);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//把页面取得在内容转换成Utf-8类型
request.setCharacterEncoding("UTF-8");
//从页面取字段值
String name=request.getParameter("bookname");
Double price=new Double(request.getParameter("bookprice"));
System.out.println(name+"这是Servlet取值");
Map
try {
orderservice.add_Book(name, price);
book=orderservice.listAllBook();
//将内容填充到网页中并显示!
request.setAttribute("books", book);
request.getRequestDispatcher("listBookStore1.jsp").forward(request,response);
} catch (OrderServiceException e) {
e.printStackTrace();
}
}
}
4.2.2 模糊检索功能的设计
本系统可以实现模糊检索的功能,即当输入的关键字包含在书名中时便可以将其检索出来。这样可以大大方便用户对图书的检索操作,也可以扩大图书的检索范围,使用户在不清楚想要购买的书籍的确切名称,或想要购买相关内容的书籍时,只要输入相关的关键字便可以检索出想要购买的书籍。例如,在本系统关键字的文本框中输入“数据结构”四个字,点击“刷新”按钮便可以检索出《数据结构》、《数据结构学习指导与习题解答》两本书名中包含“数据结构”的书;同理,若输入的关键字为“数据”,便会检索出《数据结构》、《数据结构学习指导与习题解答》和《数据库》三本书。
其部分实现代码如下:
首先,表现层调用servlet层的SearchBookServlet类:
public class SearchBookServlet extends HttpServlet {
private static IOrderService orderservice;
public void init() throws ServletException {
orderservice=(IOrderService)BeanFactory.getBean(BeanFactory.ORDERSERVICE);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//把页面取得在内容转换成Utf-8类型
request.setCharacterEncoding("UTF-8");
//从页面取字段值
String name=request.getParameter("rycx");
System.out.println(name+"这是Servlet取值");
//double price=new Long(request.getParameter("price"));
Map
try {
book=orderservice.listBook(name);
//与orderinfo页面的${orderform.id}对应
request.setAttribute("books", book);
//将内容填充到网页中并显示!
request.getRequestDispatcher("listBookStore.jsp").forward(request,response);
} catch (OrderServiceException e) {
e.printStackTrace();
}
}
}
然后,servlet层条用service层的IOrderService方法:
public interface IOrderService {
//保存订单
void saveOrder(Orderform order) throws OrderServiceException;
//删除订单
void delOrder(Long orderid) throws OrderServiceException;
//查找用户所有订单
Map
//查找单个订单
Orderform findOrderById(Long orderid) throws OrderServiceException;
//查找所有书籍
Map
//查找书籍
Map
//增加书籍
void add_Book(String name,Double price) throws OrderServiceException;
}
最后,通过调用dao层的findbook方法,与数据库进行交互:
public Map
System.out.println("***调用函数了***");
StringBuffer buffer=new StringBuffer();
buffer.append("from Book where 1=1");
if(name!="")
buffer.append(" and name like '%"+name+"%'");
//sql语句放到buffer中
//if(price!=0.0)
//buffer.append(" or price = '"+price+"'");
System.out.println(buffer.toString());
//if(!"unlimited".equals(provincecity))
//buffer.append("info.provincecity="+provincecity+"");
String hql=buffer.toString();
//转换为string类型
Session session=HibernateSessionFactory.getSession();
//Query query=session.createQuery("from Book where name like '%"+name+"%' or price like '%"+price+"%'");
Query query=session.createQuery(hql);
//执行hql语句(sql)
List list=query.list();
Map
if(list!=null)
{
for(Object o:list)//遍历集合(数组)目的:把sql语句执行结果存入集合(数组)
{
Book book=(Book)o;
books.put(book.getId(),book);
}
}
return books;
}
4.2.2 购物车部分
当点击“查看购物车”时,就调用ClearCartServlet中的doGet和doPost方法,通过service调用相应dao层的方法,这个Action将已购买的书名信息和数量信息导入购物车,此时页面就跳转到“购物车列表”页面上了,用户可以看到刚刚购买过的图书的书名、数量、总价等信息出现在购物车列表里。此时用户可以对购物车进行修改操作,用户可以进行数量的更改、删除所购图书、返回图书列表继续购买和提交订单等操作。购物车界面如图4-2-2所示:
图4-3购物车列表界面
其部分实现代码如下:
public class ShoppingCart {
private Map
//增加Orderline
public void addLine1(Orderline line) {
Orderline orderline = cart.get(line.getBook().getId());
if(orderline != null)
orderline.setNum(line.getNum());
else if(line.getNum()>0)
cart.put(line.getBook().getId(), line);
}
//删除Orderline
public void dropLine(Long lineid) {
cart.remove(lineid);
}
//获得单个Orderline
public Orderline getOrderline(Long lineid){
return cart.get(lineid);
}
//获得所有Orderline
public Collection
return cart.values();
}
//获得购物车总价
public double getCost() {
double cost = 0.0;
Collection
for(Orderline orderline : c){
cost += orderline.getBook().getPrice() * orderline.getNum();
}
return cost;
}
//清空购物车
public void removeAll() {
cart.clear();
}
//判断购物车是否为空
public boolean isEmpty(){
4.2.3 用户信息部分和购物清单部分
当点击“提交订单”时,请求就进入ListOrderServlet中,调用其中的doPost方法,执行这个Action中的操作,执行完之后就进行内部跳转和外部重定向,跳转到根目录的确认订单页面中,该页面从数据库中取到了用户的姓名、送货地址、E-mail等注册信息和用户所购图书的信息。其用户信息中的邮编、地址、电话、电子信箱字段是可以修改的,姓名字段不可修改,因为其被设置为只读属性。其实现效果图如图4-2-3所示:
图4-2-3购物清单界面
部分实现代码如下:
public class ConfirmServlet extends HttpServlet {
private IOrderService orderService;
private ICustomerService customerService;
public void init()
{
orderService=(IOrderService)BeanFactory.getBean(BeanFactory.ORDERSERVICE);
customerService=(ICustomerService)BeanFactory.getBean(BeanFactory.CUSTOMERSERVICE);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
@SuppressWarnings({ "unchecked", "unchecked" })
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得order.jsp页面上的用户的新的信息
//并将新的用户的信息替换customer原有作息
HttpSession session=request.getSession();
Customer customer=(Customer)session.getAttribute("customer");
Customer c=new Customer();
c.setAddress(customer.getAddress());
c.setEmail(customer.getEmail());
c.setId(customer.getId());
c.setName(customer.getName());
c.setOrderforms(customer.getOrderforms());
c.setPassword(customer.getPassword());
c.setTelephone(customer.getTelephone());
c.setZip(customer.getZip());
ShoppingCart cart=(ShoppingCart) session.getAttribute("cart");
Orderform order=new Orderform();
//指定定单的拥有人
order.setCustomer(customer);
order.setOrderdate(new Date());
order.setCost(cart.getCost());
Collection
for(Orderline line:lines)
{
//建立orderform与orderline的双向关系
order.getOrderlines().add(line);
line.setOrderform(order);
}
try {
customerService.update(c);
} catch (CustomerServiceException e) {
e.printStackTrace();
}
try {
//因为有级联关系所以保存order就保存了和它级联的对象
orderService.saveOrder(order);
response.sendRedirect("confirm.jsp");
} catch (OrderServiceException e) {
e.printStackTrace();
response.sendRedirect("order.jsp");
}}}
4.3 用户订单管理模块的设计
4.3.1 订单列表部分
当用户在图书列表界面上点击“查看用户订单”时,请求就进入ListOrderServlet中,此Action将请求转发到http://127.0.0.1:8888/estore_jsp/listOrder.jsp页面上,该页面包含订单号、下单时间、订单金额和操作信息,用户和管理员可以根据需要删除已下订单。其实现效果图如图4-3-1所示:
图4-3-1 购物订单列表界面
其中部分实现代码如下:
public class ListOrderServlet extends HttpServlet {
private IOrderService orderService;
public void init()
{
orderService=(IOrderService)BeanFactory.getBean(BeanFactory.ORDERSERVICE);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session=request.getSession();
//从内存中取customer
Customer customer=(Customer) session.getAttribute("customer");
//在整个应用范围查找orderforms
//Map
Map
try {
orderforms = orderService.listAllOrder(customer.getId());
request.setAttribute("orderforms",orderforms);
} catch (OrderServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将内容填充到网页中一并显示!
request.getRequestDispatcher("listOrder.jsp").forward(request,response);
}}
4.3.2 订单明细部分
当用户在订单列表列表界面上的每个订单后点击“明细”时,请求就进入Orderinfo中,系统调用OrderinfoServlet中doGet和doPost方法,此Action将请求转发到http://127.0.0.1:8888/estore_jsp/Orderinfo.jsp页面上,此时页面就跳转到进入订单明细界面,该页面包含每条订单的购书信息。其实现效果图如图4-3-1所示:
图4-3-2 订单明细界面
其中部分实现代码如下:
public class OrderinfoServlet extends HttpServlet {
private static IOrderService orderservice;
public void init()
{
orderservice=(IOrderService)BeanFactory.getBean(BeanFactory.ORDERSERVICE);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Long orderid=new Long(request.getParameter("orderid"));
try {
Orderform orderform=orderservice.findOrderById(orderid);
//与orderinfo页面的${orderform.id}对应
request.setAttribute("orderform", orderform);
Set orderlines=orderform.getOrderlines();
request.setAttribute("orderlines",orderlines);
//将内容填充到网页中并显示!
request.getRequestDispatcher("orderinfo.jsp").forward(request,response);
} catch (OrderServiceException e) {
e.printStackTrace();
}
}
}
第5章 关键技术及系统安全性能
5.1 系统关键技术
本系统使用的关键技术是JSP,JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP的设计目标主要是提供一种更为简便、有效的动态网页编写手段,并且增强网页程序的独立性、兼容性和可重用性。
本系统还使用了servlet技术。Servlet是Java技术对CGI编程的回答,Servlet程序在服务器端运行,动态地生成Web页面。与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。
5.2 系统安全性能
为了保证系统的安全性,设置了过滤器和安全验证功能。系统管理员进入本系前必须输入程序中设定的用户名和密码,而普通用户则必须先注册,然后输入与相关用户名对应的有效密码,没有用户名和密码的人员无权进入本系统。根据操作人员权限的不同级别设置,来给定该操作人员的操作权限,以防止非系统管理员对系统图书和用户订单的更改,确保了系统中数据的安全。在本系统中权限共分为两级:系统管理员可以进行图书检索、图书追加、订单管理、订单查询、购物车管理等;普通用户可以进行图书检索、图书购买、购物车管理、个人订单查询修改等操作。对系统登录权限的设置使系统更加安全了。
第6章结 论
可以说这是自己第一次按照软件工程开发的过程和思想,结合当前软件开发的常用技术进行的一次开发实战。我认为,网上购书系统的开发对于即将从事软件开发的人来说是一个很不错的锻炼机会,特别对于面向web开发的人来说更是如此。虽然该项目的难度不是很大,但却很好的概括了一个软件开发的完整过程,从需求分析到最终的测试实现。并且在完成的过程中,对于一些当前主流开发技术也有了进一步的了解,真正开发一个项目后,所得到的收获是远远比单纯的看书学习要多得多的。
本系统用当前比较成熟的servlet接口技术和Hibernate技术实现的设计与开发。实现时主要用到了MVC模型。本系统具有相当的实用性。由于使用了MVC开发模型,使得各模块具有一定的独立性,因此系统的可重用性也比较高。使用Java语言作为开发语言,使得程序具有很强的可移植性。程序中注释写得尽量规范,因此可读性与可维护性也比较好。
在本系统开发过程中不可避免地遇到不少困难,加之作者水平有限并对web的应用开发还不是太熟练,系统的一些功能做得还是很完善,有些功能也没有实现。例如:由于没有弄清起始页问题,没有完成分页功能;由于没有处理好bookid,删除图书的操作没能实现。
通过本次毕业设计我学到了不少新东西,更进一步熟悉了Struts的web开发框架和MVC模型。但是也发现了自身的诸多不足,相信通过以后的不断学习与实践,一定会有更多的收获的。
参考文献
[1] 林上杰 林康司.《JSP 2.0技术手册第四版》. 北京. 电子工业出版社. 2004
[2] 陈昊鹏 王浩等译. 《JAVA核心技术》. 北京. 机械工业出版社. 2006
[3] 付京周. 《精通Hibernate 3.0》. 北京.人民邮电出版社. 2007
[4] 殷兆麟 周智仁等. 《Java网络应用编程》. 北京. 高等教育出版社. 2004
[5] Ross harmes 美国 .Dustin Diaz 美国. 《JavaScript设计模式 (?http:?/??/?www.amazon.cn?/?mn?/?detailApp?qid=1244043570&ref=SR&sr=13-6&uid=477-5403382-2235861&prodid=bkbk880378?)》.北京.人民邮电出版社 .2005
[6] 孙卫琴. 《Java网络编程精解》. 北京. 电子工业出版社. 2007
[7] 柳永坡. 《Jsp应用开发》. 北京. 人民邮电出版社. 2005
[8] 孙卫琴.《Tomcat与Java Web开发技术详解》.(第2版) (?http:?/??/?www.amazon.cn?/?mn?/?detailApp?qid=1244043608&ref=SR&sr=13-1&uid=477-5403382-2235861&prodid=bkbk812518?).成都 .电子工业出版社.2002
[9] 侯要红 栗松涛.《Java XML应用程序设计 (?http:?/??/?www.amazon.cn?/?mn?/?detailApp?qid=1244043376&ref=SR&sr=13-6&uid=477-5403382-2235861&prodid=bkbk727367?)》.北京.机械工业出版社.2000
[10] 夏昕.《深入浅出Hibernate》. 北京.电子工业出版社.2005
[11] Gavin King.《Hibernate in Action. Manning Publications》.北京.人民邮电出版社 2004
[12]孙卫琴.《精通Hibernate:对象持久化技术详解 [M]》.成都.电子工业出版社. 2005
[13]少锋.《面向对象技术UML教程 [M]》.北京.清华大学出版社. 2004
[14] 阎宏.《Java与模式 [M]》.成都电子工业出版社. 2002
[15] 计磊,李里,周伟. 《精通J2EE—Eclipse Struts Hibernate Spring整合应用案例[M]》.北京.人民邮电出版社. 2007.
[16] 孙卫琴,李洪成.《Tomcat与JavaWeb开发技术详解》.成都.电子工业出版社.2003
[17] 贾素玲 王强.《HTML网页设计 (?http:?/??/?www.amazon.cn?/?mn?/?detailApp?qid=1244043488&ref=SR&sr=13-2&uid=477-5403382-2235861&prodid=zjbk517685?)》.北京.清华大学出版社
[18] 袁国中.《21天学通Java 2》.(第三版).北京.人民邮电出版社.2003
[19] 孙鑫.《Java Web开发详解:XML+XSLT+Servlet+JSP深入剖析与实例应用 (?http:?/??/?www.amazon.cn?/?mn?/?detailApp?qid=1244043376&ref=SR&sr=13-1&uid=477-5403382-2235861&prodid=zjbk325720?)》.成都.电子工业出版社.2004
[20] 德博特 美 .《HTML和CSS从入门到精通 (?http:?/??/?www.amazon.cn?/?mn?/?detailApp?qid=1244043488&ref=SR&sr=13-6&uid=477-5403382-2235861&prodid=bkbk746839?)》.成都.电子工业出版社.2001
谢辞
经过2个多月的努力,毕业设计及论文部分终于完成了,首先要感谢老师全面、具体的指导和监督。特别是在论文书写过程中给予我的帮助,这一次论文的书写让我的文档书写水平有了很大的提高,改掉了过去很多的书写不规范的毛病。我从本次毕业设计中学到了许多课本上没有的知识,从设计任务书的下达到今天基本实现任务书中的设计要求,通过自己的学习和努力及各位老师的指导和教育,我不仅仅在知识水平和解决实际问题的能力上有了很大的提高,还启发了自己的思维,提高了我的动手能力,这是我在课本中学不到的。它为我们在以后的学习和工作的过程中发挥自己的才能奠定了坚实的基础。
同时还要感谢李目海主任在毕业设计工作中给予的启发和提示,李主任的讲解让我收获很多,学习到了很多新的思想。同时也使我对软件开发有了一定得了解,并掌握了使用JSP开发的基本能力。可是由于本人水平有限并对JSP的应用开发还不是太熟练,系统的一些功能做得还是很完善,有些功能还没有实现。
最后还要感谢我的同学和朋友对我的关心和帮助,开发工作永远是一个需要团结合作才能做好的工作,虽然毕业设计是自己独立完成的,但在设计过程中很多问题都是通过同学的帮助解决的,他们的帮助让我少走了不少弯路,一起研究程序的经历让人难忘。
客户端
Serverlet
Service
方法
dao层
Hibernet
表现层
业务逻辑层
数据访问层
数据库
作者第17页共 19 页
【毕业设计-基于JSP的网上购书系统.doc】随着网络信息的发展,网络在人们生活中的应用越来越广泛。人们越来越注重时间和效率,希望可以在最短的时间内购买到自己所需的图书。但由于书目的繁多和书籍信息更新的迅速,使去书店购书成为一件费时费力的事情,给人们繁忙的工作生活增添了很多麻烦,于是网上购书便成了人们向往的事情。本系统正是为了应对这一需求而设计的,使人们足不出户就可以轻轻松松地买到自己想要的书,既省时又省力。在电子商务网站中,网上书店是目前应用最广、最成功的典范之一。通过此类网站,用户可以充分利用Internet的发展给人类带来的便捷,突破时间和空间上的限制,实现网上购书。本系统以MyEclipse6.0为主要开发工具,使用Oracle数据库,通过hibernet与数据库进行交互,实现了用户注册、登陆、身份验证及用户数据的采集、书籍的浏览查询和购买等功能。
推荐阅读
- 项目实践|【Java实战项目】图书管理系统(基于数据库)
- 如何开发基于云的SaaS应用程序()
- 七种基于比较的排序,基于Java实现,收藏一下()
- ubuntu|基于亚博Arduino电机拓展板的ROS小车
- 深度学习|基于图卷积网络(GCN)的表面缺陷识别方法(上)
- ★MATLAB算法仿真经验|【车牌识别】基于GRNN广义回归神经网络的车牌识别matlab仿真
- 鸿蒙基于开放式测试方案发布原子化服务的实战
- 基于STM32的Flash读写详解
- 配送路径规划基于matlab蚁群优化节约算法单中心多城市配送车辆路径规划含Matlab源码 017期
- 基于配置中心的轻量级动态可监控线程池 - DynamicTp