资源描述
足下购物网站设计与实现
目 录
摘 要 1
关键词 1
一、绪论 2
1、系统开发背景 2
2、系统实现的目标 2
二、系统设计 3
1、可行性分析 3
2、系统需求分析 3
3、数据流图 4
4、数据字典 7
5、开发技术和开发工具 10
三、概要设计 11
1、功能分析 11
2、数据库需求分析 11
3、数据库概念设计和逻辑设计 12
四、详细设计 18
1、系统公共类 18
2、系统管理 21
五、测试 35
1、测试分析 35
2、模块测试 35
3、集成测试 37
4、验收测试 37
5、测试结论 37
六、总结 39
致 谢 40
参考文献 41
足下购物网站设计与实现
摘要:伴随着计算机技术在各行各业日益广泛和深入的应用,网络的概念早已深入人心。商家建立网站,改变我们原有经营方式与经营理念的同时,也为商家带来了更高的效益。
“足下购物网站”是一家制造与销售旅游用品的公司,目前他们只销售自己的产品。为了更好的扩展销售渠道,扩大销售规模,“足下购物网站”也想利用网络销售自己的产品,开发一个网上购物的商店。网站使用B/S结构,JavaBean+selvlet/jsp采用MCV模式开发。网站主要分为前台和后天两部分。前台主要针对消费者,主要实现网页的浏览、商品展示、会员注册、购物车管理、商品收藏管理、订单管理等功能;后台由管理员使用,主要实现商品管理、进货管理、订单管理、系统管理等功能。
关键词:足下购物网站 Java SQLServer2005 MVC
第42页(共41页)
一、绪论
1、系统开发背景
近年来,随着Internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来,越来越多的商家在网上建起在线商店,向消费者展示出一种新颖的购物理念。
网上购物是一种具有交互功能的商业信息系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。
在开发过程中,我们应该根据实际的需要来使用最合适的技术,本系统则采用较新的JAVA技术,一方面JAVA的安全性和跨平台性比较好,另一方面,我也希望能从开发该系统的过程中,深入学习一下这门编程语言。
2、系统实现的目标
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。利用计算机来获得和处理信息是当今信息管理的一大特点,通过计算机可以将许多繁琐的工作简单化,清晰化。而同时网络发展的越来越成熟,网络应用越来越丰富。特别是电子商务的出现,使得人们购物更加方便。只要是家里有一台可以上网的电脑就可以不出户就可以在网络上购买自己想要的物品。足下网站购物在实际应用中的解决方案是建立网站,以及自己的数据库,使得所需商品信息可以及时的保存、更新,可以更好的及时了解商品买卖的情况。使管理员从繁琐的手工操作中解脱出来,并提高了办公效率。因此,我的毕业选题就是针对足下网站购物,并且实现研究服务于实践的原则。
二、系统设计
1、可行性分析
(1)市场上的可行性分析
随着国内Internet使用人数的增加,利用Internet进行网络购物并且以银行卡付款的方式越来越流行,市场份额也在迅速增长,电子商务网站也层出不穷。对于消费者来说,网上购物可以实现在家“逛商店”,购物不受时间地理限制,能获得大量的商品信息,能买到当地没有的商品,还可以从订货、买货到货物上门无需亲临现场,既省时又省力。对于商家来说,由于网上销售没有库存压力、经营成本低、经营规模不受场地限制等,在将来会有更多的企业选择网上销售,通过互联网对市场信息的及时反馈适时调整经营战略,以此提高企业的经济效益和参与国际竞争的能力。对于市场经济来说,这种新型的购物模式可在更大的范围内。更广的层面上以的效率实现资源配置。所以,网上购物突破了传统的商务障碍,无论对消费者、企业还是市场都有着巨大的吸引力和影响力,在新经济时期无疑是达到了“多赢”效果的理想模式。足下购物网站进军电子商务无疑是一个很好的机遇。对于足下购物网站这样的旅游用品公司来说,电子商务能扩大市场份额。
(2)技术上的可行性
本管理信息系统将采用技术成熟的Java Web技术,因为Java得本身平台无关性以及系统本身采用B/S结构保证系统可以在多个平台使用。后台数据库采用微软公司的SQL Server数据库,因为它的灵活性、安全性和易用性为数据库编程提供了良好的条件。因此,系统的软件开发平台已成熟可行。硬件方面,科技的飞速发展使硬件的更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。
(3)经济上的可行性
本系统由作者自主开发,操作人员只需简单培训即可上岗。管理和维护比较简单,除了必要的设备投资外,后期只需少量资金就可确保运转。因此对公司在经济上是完全可以接受的。
本系统的使用能大大提高员工工作效率,加速资金周转、降低各项成本及改善服务质量,能够取得良好的经济效益。
综上所述,本系统在管理上、技术上和经济上都是完全可行的,并且投入少、见效快。因此系统的开发是完全可行的。
2、系统需求分析
由于足下购物网站只是一种小型网上购物,所以对访问量不大的情况下是完全可以的,一旦设计到点击量很大时则需要重整代码,使得安全性、可维护行、可操作性变的更完善,目前来说系统的安全性相对来说已经比较安全。
用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能够充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详细的数据字典,为后面的具体设计打下基础。
建立一个网上购物平台,使得网上商贸变得更加系统化,规范化和自动化,从而达到顾客快速、方便购物,商家提高利润的目的。
通过对用户应用环境、购买过程及各有关环节的分析,系统的需求可以归纳为两点。
(1)数据需求:数据库数据要完整、同步、全面的反应各种类别的家纺的信息。
(2)功能需求:具有商品查询、查看、购买、服务功能。信息采集要方便快捷,数据更新维护要自动高效,系统操作要简单实用。在执行选购时,用户界面要能够直观的实现待选商品,以供采购决策。
对于本平台,具体需要实现以下一些基本功能。
(1)商品展示功能:主要负责显示商品的描述性信息和图片等参数,它包括两个部分:新品推广和热门推荐商品的展示;同时还实现了商品的分类浏览。在每类商品的展示中要显示该类商品的图片、名称、描述信息、价格等。
(2)用户管理功能:非注册用户可以浏览商品信息。每个注册用户拥有一个自己的个人信息管理平台,可以浏览并选购商店中的商品,同时还可以通过在线留言反馈个人对商品的意见,做好售后服务。在用户个人信息管理中,主要包含以下功能:
(3)方便、快捷的查询功能:从不同的检索入口,检索要购买的家纺,从而决定是否购买。
(4)意见反馈功能:秉承用户就是上帝的服务原则,通过“在线留言”的方式,听取用户对网站和商品的意见,为商店与用户间的沟通搭建良好的互动平台。该模块提供了发表留言、查看留言等功能。
(5)后台管理功能:它贯穿于以上的功能,主要服务于网站的管理员,主要包括:用户、商品、订单和留言信息的管理。
3、数据流图
数据流图 (DFD) 是组织中信息运动的抽象,是管理信息系统逻辑模型的主要形式。这个模型不涉及硬件、软件、数据结构与文件组织,它与系统的物理描述无关,只是用一种图形及与此相关的注释来表示系统的逻辑功能。图形描述简明,清晰,不涉及技术细节,所描述的内容是面向用户的。因此数据流图是系统分析人员与用户进行交流的有效手段,也是系统设计的主要依据之一。
数据流图是在对业务流程图进行分析的基础上,从系统的科学性、管理的合理性、实际运行的可行性角度出发,将信息处理功能和彼此之间的联系自顶向下、逐层分解,从逻辑上精确的描述新系统具有的数据加工功能、数据输入、数据输出、数据存储及数据来源和去向。
(1)实体——实体是现实世界中客观存在的事物。
(2)数据处理——数据处理指对数据流进行某些操作和变换。每个数据处理有相应的名称,简明的描述完成什么加工。在分层数据库当中,数据处理还要加编号。
(3)数据流——表示数据的流向,说明系统内部数据的流动。也可用来表示对数据文件的存取操作。
(4)数据存储——数据存储指系统保存的数据,它一般是数据库文件。流向数据存储的数据流可以理解为写入文件或查询文件,从数据存储流出的数据可理解为从文件流出或得到查询结果(如图2.1所示)。
图2.1 数据流图图例
(1)顶层图
用户
网上购物管理信息系统
注册、登陆
购物信息
用户信息、
商品信息发布
购物
管理
管理员
图2.2顶层图
(2)第二层图
图2.3第二层图
(3)公告信息底图
图2.4公告信息底图
(4)商品管理底图
图2.5商品管理底图
(5)订单管理底图
图2.6订单管理底图
订单管理:用户在前台完成购物,结账并生成订单后,后台管理员就要对订单进行确认处理,确认后才能实物发放,直到用户收到订单上的商品,整个购物流程结束。在此期间,用户可以随时登陆系统查看自己购买商品的订单情况。后台管理员通过后台登陆系统对用户订单进行查看、确认,并完成相应的处理操作等。
4、数据字典
数据流图重点在描述以处理逻辑为中心的数据的流入与流出,而对数据本身未加描述,影响了用户对数据流图的理解。数据字典是对数据流图的很好的补充,它是数据流图上所有成分的定义和解释的文字集合,它是对数据流图的各种成分起注解、说明的作用,同时它还对系统分析中其他需要说明的问题进行定义和说明。系统分析人员把不便在数据流图上注明而对于系统分析应该获得,对整个系统开发以至将来系统运行与维护是必须的信息尽可能放入数据字典。
所以根据上面数据流程图,可以得出本系统中各个数据的数据字典。下面是一部分的数据的数据字典:
表2.1 注册信息数据流条目
数据流名称:
注册信息
数据流编号:
01
简要说明:
主要描述用户成为注册会员所填的相关信息
数据流来源:
普通用户
数据流去向:
用户管理
数据流组成:
用户名+密码+联系方式+电子邮件
表2.2 登录信息数据流条目
数据流名称:
登录信息
数据流编号:
02
简要说明:
主要描述用户用来登录系统的信息
数据流来源:
注册用户
数据流去向:
用户管理
数据流组成:
用户名+密码
表2.3订单管理数据流条目
数据流名称:
订单管理
数据流编号:
03
简要说明:
主要描述根据注册用户的订单信息,对它们进行整合,生成相关订单
数据流来源:
单据管理
数据流去向:
管理员
数据流组成:
订单编号+商品编号+用户编号+商品价格+所购数量+创建日期+发货时间
表2.4商品信息管理数据流条目
数据流名称:
商品信息管理
数据流编号:
04
简要说明:
主要描述管理员对商品进行添加、删除和修改的管理
数据流来源:
管理员
数据流去向:
商品信息管理
数据流组成:
商品编号+商品分类编号+商品名称+商品介绍+价格+剩余库存量+点击数
表2.5 商品信息表数据存储条目
数据存储名称:
商品信息表
数据存储编号:
D1
组成:
商品编号+商品分类编号+商品名称+商品介绍+价格+剩余库存量+点击数
关键字:
商品编号,商品分类编号
表2.6 用户信息表数据存储条目
数据存储名称:
用户信息表
数据存储编号:
D2
组成:
用户编号+用户名+密码 +性别+联系方式+电子邮件+地址+邮编
关键字:
用户编号
表2.7 订单详细信息表数据存储条目
数据存储名称:
订单详细信息表
数据存储编号:
D3
组成:
订单编号+商品编号+商品价格+所购数量
关键字:
订单编号,商品编号
表2.8 购物车表数据存储条目
数据存储名称:
购物车表
数据存储编号:
D4
组成:
记录编号+购物车编号+所购商品编号+购买时间+购买数量
关键字:
记录编号
5、开发技术和开发工具
系统的建设关键在于其所使用的架构,而网上购物这种基于WEB的系统,传统的C/S架构已经不能满足大量用户的访问和操作,B/S基于浏览器的架构则是目前网络系统应用的主流,它将大量的数据处理工作交给服务器端来处理,客户端只用通过普通的IE浏览器即可访问系统,方便快捷而且利于系统的更新和维护,JAVA语言在该方面更是得天独厚,J2EE规范的出现则使系统的开发更加规范,层次更加清楚,更利于对复杂事务的处理,而且在安全性方面也做的更好。基于MVC的开发流程则使开发过程更加清晰明了,利于做一些复杂的逻辑实现,从而节省了开发周期和开发成本。
所以足下购物网站是基于B/S的系统,使用MVC模式开发,使用技术J2EE下的jsp、servlet、JavaBean、html、css、javascript、ajax、JNDI、EL表达式、JSTL标签。
开发工具:myeclipse6.5、dreamweaver8、sqlserver2005。
三、概要设计
在建设网站系统之前,我们必须对系统所用到的数据进行大致的分类和具体的结构设计,既要做到清晰明了,又要能适应系统各项功能的调用,而不至于产生结构上的逻辑混乱,保证关键数据在意外情况下不会被破坏。
1、功能分析
经过前期的深入调查和研究,总结出该平台需要完成的一些具体功能。前台:用户信息管理、浏览的商品信息、购物车、订单情况等等。后台:管理员登录,管理员信息管理、商品信息管理、用户信息管理、销售管理。
根据系统功能分析的结果,如3.1功能分析图所示:
图3.1功能分析图
2、数据库需求分析
数据库需求分析是数据库结构设计的第一个阶段,是非常重要的一个阶段。这个阶段主是要确定基本数据、数据结构处理的流程,组成一份详尽的数据字典,为以后进一步设计打下基础,通过对足下网站购物的内容分析,针对本系统,设计的数据如下:
管理员基本信息:管理员名称、密码。
公告信息:公告标题、公告内容、发布者、发布时间。
客户信息:电子邮箱(客户账号)、客户密码、注册时间、收获人姓名、固定电话、移动电话、收获地址。
商品信息:商品类型、商品名称、商品价格、折扣、是否新品、商品状态、商品图片、备注。
订单信息:客户编号、订单状态、下订单时间、商品数量。
3、数据库概念设计和逻辑设计
几乎所有的项目都是基于数据库的,这使得数据的设计在整个项目中的地位举足轻重。良好的数据设计往往能够减少开发的负担。
数据库设计是指对于一个给定的应用环境,通过合理的逻辑设计和有效的物理设计来构造较优的数据库模式,建立数据库极其应用系统,满足用户的各种信息需求。
(1)数据库概念设计
概念设计是把用户的需求进行综合、归纳与抽象,统一到一个整体概念结构中,形成数据库的概念模型。概念模型是面向现实世界的一个真实模型,它一方面能够反映现实世界,同时又容易转化为数据库逻辑模型,也容易让用户理解。数据库概念模型独立于计算机系统和DBMS。E-R图是设计数据概念模型的一种有效地工具。(其符号见图3.2)
实体 联系 属性
图3.2 E-R图图例
实体——实体是现实世界中客观存在的事物。
联系——实体之间可能存在着各种联系,这种联系通过信息系统的功能活动表现出来。
属性——实体或联系的性质就是属性。
了解了E-R图的大致内容,结合需求分析的要求绘制了足下网站购物系统的E-R图
图3.3用户信息E-R图
图3.4商品信息E-R图
图3.5购物车信息E-R图
图3.6管理员信息E-R图
m
n
m
用户
送货方式
发货
商品
订购
商品名称
商品ID
商品价格
用户ID
用户名
密码
n
n n
1
n n
管理员
短信息
公告
发布
密码
用户名
标题
时间
内容
内容
发送
1
图3.7实体和实体之间的关系E-R图
(2)数据库逻辑设计
逻辑设计在数据库概念设计的基础上进行。其主要任务是将概念模型转换为数据库的逻辑模型,并与选用的DBMS相结合,产生具体的DBMS所支持数据模型的逻辑模式。
表3.1 UserInfo(用户/管理员信息表)
字段名称
数据类型
说明
Id
Int
用户编号
主键,自动增长
UserName
Varchar(50)
用户名称
必填和唯一约束
userPwd
Varchar(50)
用户密码
必填,密码长度大于等于6位。
该表和客户信息表一样存在字段的命名规则的要求,出于安全考虑对于管理员帐号发放应该谨慎,管理人员数量一定要控制,越少越安全,在实际应用中,我们还要对整个数据库进行加密,以防止系统重要数据泄漏。
表3.2 Bulletin(公告信息表)
字段名称
数据类型
说明
Id
Int
公告编号
主键,自动增长
Title
Varchar(100)
公告标题
必填
Content
Text
公告内容
必填
UserId
Int
发布者
外键(UserInfo),必填,表示发布改公告的用户编号。
createTime
Datetime
发布时间
必填,默认为系统当前日期。
公告信息表(Bulletin):公告信息,主要用来存储公司在网站上公布的最新消息,包括公告编号,公告标题,公告内容,发布者,发布时间
表3-3 CustomerInfo(客户信息表)
字段名
数据类型
说明
Id
Int
客户编号
主键,自动增长
Email
Varchar(100)
电子邮箱(客户账号)
必填,唯一约束,格式合法(正则表达式判断)
Pwd
Varchar(20)
客户密码
必填,长度大于6
RegisterTime
Datetime
注册时间
必填,默认为系统当前日期。
客户信息(CustomerInfo):客户信息,主要用来存储客户的一些基本信息,如客户ID,客户Email,客户密码, 客户注册的时间。
表 3.4 CustomerDetailInfo(客户详细信息表)
字段名
数据类型
说明
CustomerId
Int
客户编号
外键(CustomerInfo),自动增长
Name
Varchar(50)
收获人姓名
必填
Telephone
Varchar(50)
固定电话
必填,要求符合格式
xxxx-xxxxxxxx
movePhone
Varchar(50)
移动电话
必填,要求11位数字
Address
Varchar(100)
收货地址
必填
客户详细信息(CustomerDetailInfo):客户详细信息,主要存储客户的一些详细信息,根据客户ID存储客户真实姓名,固定电话,移动电话,收货地址。
表 3.5 GoodsType(商品类别)
字段名
数据类型
说明
TypeId
Int
类别编号
主键,自动增长
TypeName
Varchar(20)
类别名称
必填,唯一约束
商品类别表(GoodsType):商品类别显示表,主要属性有:TypeId ,TypeName。
表3.6 GoodsInfo(商品信息表)
字段名
数据类型
说明
Id
Int
商品编号
主键,自动增长
TypeId
Int
商品类别
外键(GoodsType),必填
goodsName
Varchar(50)
商品名称
必填
Price
Decimail(8,2)
商品价格
必填
Discount
Float
折扣
必填,范围0.0-10.0,默认不打折。
IsNew
Int
是否新品
必填,值只能是0和1(0新品,1不是新品)
isRecommend
Int
是否推荐
必填,值只能为0和1(0推荐,1不推荐)
Status
Int
商品状态
必填,值只能为0和2(0上架,1下架)
Photo
Varchar(50)
商品图片
必填,存储商品图片名称
Remark
Varchar(20)
备注
可选输入
商品信息表(GoodsInfo):商品信息表主要负责存储商品名称,商品类别,商品图标,商品图片,商品价格,商品重量等信息。主要属性有:ID,TypeId goodsName Price,Discount,IsNew,isRecommend,Status,Photo,Remark.
表 3.7 OrderInfo(订单信息表)
字段名
数据类型
说明
OrderId
Int
订单编号
主键,自动增长
customerId
Int
客户编号
外键(CustomerInfo),必填,表示下订单的客户编号
Status
Int
订单状态
必填,值只能是0和1,(0未确认1已确认)
orderTime
Datetime
下订单时间
必填,默认为系统的当前日期。
订单信息表(OrderInfo):订单信息表主要用来存储会员每次订单信息。
表3.8 orderGoodsInfo(订单商品信息表)
字段名
数据类型
说明
OrderId
Int
订单编号
主键
GoodsId
Int
商品编号
Quantity
Int
商品数量
必填,值大于0,默认为1
订单商品信息表(orderGoodsInfo):订单商品信息表,主要负责存储客户临时性添加的一些商品订单信息,主要属性有:OrderInfo,GoodsId,Quantity。
四、详细设计
1、系统公共类
数据库连接采用数据库连接池技术(JNDI)连接, 因为使用JNDI非常简单,方便只需要将配置文件context.xml文件放在web工程的META-INF目录下。把数据库连接驱动拷到tomcat安装目录下的lib目录下即可。然后写一个连接方法。为了避免重复的关闭连接代码。写一个关闭连接的方法,需要关闭的时候直接调用就可以。
(1)Context.xml文件
<Context>
<Resource name="qlzx" auth="Container" type="javax.sql.DataSource"
maxActive="100"
maxIdle="30" maxWait="10000" username="sa" password="sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:49171;DatabaseName=qlzx"/>
</Context>
DBUtil.java类
//JNDI连接池(依赖tomcat容器实现 )
public static Connection getConnection (){
Connection conn = null;
try{
Context ctx = new InitialContext();
DataSource ds =(DataSource) ctx.lookup("java:comp/env/qlzx");
conn = ds.getConnection();
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
/ * 关闭数据库连接,
* @param rs 如果rs不为空,关闭连接
* @param pstmt 如果patmt不为空,关闭
* @param con 如果con不为空,关闭 */
public static void closeDB(ResultSet rs, PreparedStatement pstmt, Connection con) {
if(rs != null) {
try {
rs.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if(pstmt != null) {
try {
pstmt.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if(con != null) {
try {
con.close( );
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
(2)时间转换
将DATE转换为字符串,或者把字符串转换为DATE
public class DateTimeUtil {
// 字符串转换为Date
public static Data convertDate(String dateStr) {
if(StringUtil.isNullOrEmpty(dateStr)){
return null;
}
Date d = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
d = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
}
// Date转换为时间字符串
public static String convertDate(Date date) {
if(null==date){
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
public static Date convertDateNoTime(String dateStr) {
if(StringUtil.isNullOrEmpty(dateStr)){
return null;
}
Date d = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
d = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
}
public static String convertDateNoTime(Date date) {
if(null==date){
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
}
}
2、系统管理
(1)系统登录
1)用户登录界面
图4.1 用户登录界面图
这是后台管理的入口,没有相应权限是不能进入系统的。管理员必须输入用户名和密码,并且验证正确才能进入系统。如果用户名或者密码错误,系统会给出相应提示。正确则进入系统主界面。系统是每个功能模块一个servlet,系统采用隐藏域(hidden)来标识相应的业务功能。相应的功能都用英文来表示。例如用户登录<input type="hidden" name="op" value="login" />,用户登录采用“login”来标识。
Jsp 页面关键代码
<!-- 使用JSTL标签提示用户用户名或密码错误 -->
<c:if test="${requestScope.error=='loginerror'}">
<script>LoginError();</script>
</c:if>
<c:if test="${'NotLogin' == param.NotLogin}">
<script>NotLogin();</script>
</c:if>
Jsp代码
<script type="text/javascript">
//验证登录
function checkLogin(){
var userName_input = document.loginForm.userName;
if(userName_input.value==""){
alert("请输入用户名!");
userName_input.focus();
return false;
}
var userPwd_input = document.loginForm.userPwd;
if(userPwd_input.value==""){
alert("请输入密码!");
userPwd_input.focus();
return false;
}
}
function loadPage(){
document.loginForm.userName.focus();
}
function LoginError(){
alert("用户名或密码错误!");
}
function NotLogin(){
alert("您还未登录!请登录后访问");
}
</script>
后台代码
这是servlet的doGET方法,该方法主要是根据隐藏域来判断是哪一个功能。根据相应功能调用相应方法。如登录则调用avlidateLogin(request, response)方法来处理,然后返回一个路径跳到相应页面显示结果。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String op = request.getParameter("op");
String returnURL = "";
if (op != null) {
if ("login".equals(op)) {
returnURL = avlidateLogin(request, response);
} else if ("loginOut".equals(op)) {
returnURL = loginOut(request, response);
}else if("resetPass".equals(op)){
returnURL = resetPass(request, response);
}
} else {
Object user = request.getSession().getAttribute("user");
if (user != null) {
// 重定向至首页
response.sendRedirect("admin/index.jsp");
return;
} else {
returnURL = "login.jsp";
}
}
request.getRequestDispatcher(returnURL).forward(request, response);
}
avlidateLogin(request, response)方法,调用持久层UserDao类的avlidateLogin(UserInfo Loginuser)方法,根据用户名和密码查询该用户,如果存在则返回一个UserInfo。没有就返回null。根据avlidateLogin(UserInfo Loginuser)返回的结果判断如果UserInfo不为空则将userinfo保存到session。并且生成当前时间,保存到session来记录用户的登录时间,并且放回String类型的路径"admin/index.jsp"。如果为空则返回路径"login.jsp",然后doGet方法处理,回到登录页面。
2)管理员重置密码
图4.2 管理员密码管理图
当前页面提交数据到后台后,由doGet方法处理,然后调用resetPass(HttpServletRequest request, HttpServletResponse response)方法。在resetPass方法中对表单数据再次验证,以防恶意用户绕过浏览器的验证。再在resetPass方法中调用UserDao类的update(user, oldPass)方法,将新密码保存到数据库,update方法返回一个boolean类型的值,如果为true则跳到ok.jsp页面、并且给session重新赋值,将用户信息(用户ID,用户名,密码)重新保存到session,并且提示用户修改密码成功。如果失败则跳到failed.jsp页面提示用户修改密码失败。
//修改密码
private String resetPass(HttpServletRequest request, HttpServletResponse response){
String oldPass = request.getParameter("oldPwd");
String newPass = request.getParameter("newPwd");
//若新密码和旧密码为空
if(StringUtil.isNullOrEmpty(oldPass) || StringUtil.isNullOrEmpty(newPass)){
request.setAttribute("msg", "对不起,修改密码失败!请填写完整密码数据!");
return "admin/faile
展开阅读全文