基于SSH团购网站的设计与实现

欢迎添加微信互相交流学习哦!

二维码

项目源码:https://gitee.com/oklongmm/biye2



摘 要
随着互联网的在我国逐渐普及,以及社会消费观念和生活方式的变化,电商这种全新的商业模式慢慢融入了人们的生活中。电子商务正在扮演着愈来愈重要的基础设备平台作用,聚集了无数的生产信息、贸易信息与消费信息,深刻影响着消费行为、企业状态与创造社会价值方式,对我国经济的发展远远超过工业时代。通过知名门户网站,人们可以深居简出地寻找自己需要的物品,通过访问不同的网上商城,消费者可以找出哪种商品性价比最高,给自己极大地选择空间;下订单后,你可以很快得到自己想要的物品,这给顾客节省很多时间和精力;对于厂家来说,库存风险极大的被避免了,客户的需求就是他们采购商品的标准,大大地提高了效益。
团购网站主要以J2EE作为开发基础,使用了struts2+spring+hibernate等J2EE框架及几种前端技术,MyEclipse作为开发工具,以ADOBE公司的Photoshop作为界面美化工具。实现了文华团购基本的管理模块,包括:注册、登录、退出,用户信息修改;商品管理,公告管理,订单管理,购物车管理。该系统界面简单、操作方便,容易维护。
关键词:SSH; 团购网站;JAVA;购物
Group Purchase Website
Abstract
Under the rapid development of the network, and change of peoples consumption concept and the way of life, business the lasted commercial model has gradually integrated into peoples lives.Electronic commerce is playing an increasingly important role in infrastructure platform,gathered a massive production information, transaction information and consumer information, profoundly changing consumer behavior, enterprise form and social value creation, the profound significance to our country economy is far more than the industrial age.The enterprise portal, people can remain within doors to find their own items required,through the different virtual mall visit, customer can find the most cost-effective products heir choices greatly; through order, you can quickly get the goods, the customer to save a lot of time and energy; for manufacturers, can greatly reduce the inventory risk, according to customer needs, on-demand procurement and production, greatly improves the efficiency.
Group purchase website mainly uses J2EE as the basis of development, use struts+spring+hibernate and other protocol or technology, using MyEclipse as a development tool, using Macromedias Dreamweaver as the interface landscaping tools. The basic realization of the main function of group purchase site should module, including: user registration, login, logout, query, modify personal information; commodity management,shopping cart management, order management. The system interface is simple, easy to operate, easy to maintain.
Keywords: SSH; group purchase website; Java; shopping
1 引 言
1.1 研究背景和意义
团购作为一种近些年来兴起的电子商务模式,因其廉价、开放,创新性等优势越来越被社会所认可,融入大众生活。
1.1.1 Java平台介绍
Sun Microsystems公司在1995年5月发明了全新的程序设计语言Java。Java的魅力在与其鹤立鸡群的优点:跨平台、安全、动态Web,随之,Java迅猛发展并了加快了web开发。在常见的操作系统上安装Java平台之后,Java程序即可运行。如今Java平台已经渗透到了99%的操作系统。只用编译一次Java程序,系统中就可以运行各种Java程序。Java有三个体系JavaSE(标准版),JavaEE(企业版),JavaME(微型版)。2009年04月20日,oracle公司在2009年将sun公司收购,因此java归于甲骨文公司。
1.1.2 Java平台的优点
Java作为一种面向对象的,安全性高的,分布式的,结构中立的,移植性高的,多线程的程序设计语言备受欢迎。
Java是简明的。Java语法与其他编程语言很接近,因此很多程序员比较容易学会和使用Java。另外,Java舍弃了C++ 中不常用的、难懂的、让人困惑的那些特性,例如操作符重载、多层继承、强制类型转换。而且,Java没有指针概念,还设计了自动的垃圾收集机制,大大地减少了程序员对内存管理的困扰。
Java是面向对象的。Java语言保持了类、接口以及继承等原始概念,为了语言更简单,Java仅支持类与类之间的单继承,但接口之间允许多继承,并支持类实现接口的机制。Java各方面支持动态绑定,这方面胜过C++。总而言之,Java是一种纯粹的面向对象程序设计语言。
Java是分布式的。Java支持网络应用的开发,在基础的Java应用接口中包含一个用于网络开发的编程接口(java.net),它维持了用于网络开发的类库,比如URL、URLConnection、Socket、 ServerSocket等。其中远程启动机制也是分布式应用开发中的关键手段。
Java是安全的。Java总是应用在网络开发中。所以,Java设计了一个安全机制来防止存心破坏。除了具备的这些安全优势以外,Java对使用网络下载的类提供了一个安全防御措施,如各样命名空间来替代本地的同名的类、字节码检验,还提供安全管理措施让程序具有安全保障。
1.1.3 团购网站的优点
团购网站运营的特点与优势团购因为购买的都是大件商品,大件商品消费者一般需要看到商品实物他才买的放心。所以团购一般都是在一定区域范围内进行,所以团购网站最大的特点就是具有区域(本地)性。区域性这一特点能够带给消费者在产品质量上、交易的安全上、售后服务上得到很好的保障,而这些保障在普通的购物网站上目前是无法达到的。特别是对于一些贵重商品,消费者大多不会在网络上进行购买、交易,相较而言,当地的的团购网站才更容易获得当地消费者的亲赖。  
  团购网站是一个将当地消费者与企当地业或商家紧密结合,以团购网站为平台作为应用的一个电子商务特性显著的项目。他的访问用户大都是具有一定消费能力并且是正准备要进行消费行为的当地老百姓网民,并且不论从区域、购买消费需求上都相对聚合,使得团购网站的商业价值明显高于当地其他任何类型的网站尤其是单纯的信息,新闻类网站。所以,团购网站是一个市场需求旺盛、盈利模式清晰,简单易操作的可行性很高的电子商务网站项目。  
  团购网不同于一般的地方门户、分类信息等这一类网站,在IT尤其是网站运营领域如果已经存在一强,那么竞争的难度将非常的大,而且对于盈利遥遥无期,通常都是让网站管理者失去信心而最终关闭自己的辛辛苦苦经营打理的网站。而团购网站因为它拥有非常强烈的区域特性”、商业盈利特性”,即使在同一城市,同一地区已经有了多家团购网站,仍然能够很好的避开正面的竞争,例如各自在具体地理位置上的不同,在商品类别上有自己的侧重点、价格优势、服务优势、商家合作模式上等。因为对于参加团购的消费者来说首先要满足在地理位置上的方便;二是要有所需求的商品并且价格上便宜明显。团购网站由于区域性强,所以对于网站管理者来说操作方便、推广的目标群体和方式明确,对于消费者来说参加网站组织的团购活动能够实在给他带来实惠,所以在推广难度上也相对较小,并且往往会产生以,一传十,十传百的效应。人们的生活是在不断的消费、购物,所以团购也不会停止团购网站也就有了持续的赢利来源。
1.2 国内外研究现状
现在,在团购网站和团购帖子的省钱才是硬道理”的号召之下,小到图书、软件、玩具、家电、数码、手机、电脑、体育器材、健身器材、运动休闲服装、体育用品等小商品,大到家居、建材、房产等价格不很透明的商品,都有消费者因网络聚集成团购买。不仅如此,网络团购也扩展到健康体检、保险、旅游、教育培训以及各类美容、健身、休闲等服务类领域。网络团购目前已在上海、北京、广州等大型城市流行起来,并逐渐发展成为一种新型的消费模式。城市团购网正是顺应时代发展的要求,结合中国电子商务的实际所搭建网络团购平台,为广大商家和业主提供最专业的团购服务。
自2010年1月,中国第一家团购网站满座网”上线之后,美团网、拉手网、糯米网等团购网站相继上线,一时间,形成了团购网站遍地开花的局面。据CNNIC的数据不完全统计,截止到2011年3月,中国团购网站已经多达3600余家,月增长速度接近30%。尽管中国电子商务消费市场及O2O模式存在较大的生长空间,但是目前,团购商品品类特色品类较少、团购商品服务质量缺失等问题对于吸引及留住消费者存在巨大的障碍。清科研究中心预计,随着市场竞争的不断加剧,部分中小型团购网站将面临淘汰,部分区域型团购网站将可能被并购。 
现有团购网站的格局是,在很多消费者还为能够拥有一个餐厅的八折贵宾卡,或是某家会所的高级会员待遇而窃喜的时候,网络达人们已经用三折、两折,甚至零点几折的超低团购价开始了全新消费体验。2010年6月1日,搜狐在门户网站中首个进入团购领域。搜狐的杀入,被看作是团购网站迎来的最重量级的选手。而今,SNS、微博等已成为门户网站的标配”,要想在门户的竞争中取得先机,必须选择更多的新兴业务。因此,搜狐引领团购风潮后,未来还将有更多的门户网站杀入这一领域。
1.3 本文的主要工作
本课题的主要内容是团购网站的设计与实现,分为前台展示和后台管理。前台给用户提供商品商品展示以及用户登陆注册,用户购买商品加入购物车到最后生成订单和付款。后台是网站管理员用来管理商品、分类、公告和订单状态的修改等。
2 团购网站现状
2.1 团购网站主要设计思想
(1)系统应符合团购网站管理的规定,满足信息行业相关人员日常使用的需要,并达到操作过程中的直观,方便,实用等要求; 
(2)系统采用模块化分层设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充,维护;  
(3)系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作;  
(4)尽量采用现有软件环境及先进的管理系统开方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
2.2 团购网站需求分析
伴随着信息行业的蓬勃发展和人们办公自动化意识的增强,团购网站销售管理部门的的工作也越来越繁重,原来的基于SSH技术的团购网已经不能完全满足相关人员使用的需要。为了协助信息行业开展团购网站销售管理工作,提高工作效率,充分利用信息行业的现有资源,开发更好的基于SSH技术的团购网势在必行。 
基于SSH技术的团购网采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JSP,数据库使用MySQL5.6数据库。完成以下基本功能: 
本系统是一个独立的系统,用来解决团购网站的管理问题。采用JSP技术构建了一个有效而且实用的团购网站管理平台,目的是为高效地完成对团购网站的管理。 
该项目是一个基于JSP技术的团购网站,其设计内容模块以及功能如下: 
1.系统管理:用户登录,修改密码,退出系统; 
2.用户管理:包括管理员、会员、普通访客; 
3.团购产品介绍:(多角度查看,名称,价格等),可对产品进行多条件查询,查看团购时间; 
4.产品团购:(须登录才可操作,可在线参与团购产品); 
5.订单管理:注册会员登录后可在线修改自己的团购信息等;  
6.后台管理(产品管理,用户管理,订单管理,公告管理)。 
整个设计的内容及以上的功能都会对后台数据库内相应涉及到的数据表中的数据进行存储、删除、修改、查询等操作,最终提交的设计报告也包含了从最初的需求分析到网站建设成功的具体说明,以及数据存储更新过程等整个设计的各流程环节详细说明。 
基于SSH技术的团购网具有标准基于J2EE技术的团购网所具有的现实中完整的团购网站销售管理步骤,完全的虚拟现实实现。真正实现节约资源、提高效率、业务处理的同时真正实现基于J2EE技术的团购网的功能作用。
2.3 团购网站的可行性分析
2.3.1 经济可行性
经济可行性研究是对组织的经济现状和投资能力进行分析,对系统建设运行和维护费用进行估算,对系统建成后可能取得的社会和经济效益进行估计。由于本系统是作为毕业设计由我们自己开发的,在经济上的投入甚微,系统建成之后将为今后团购网站管理提供很大的方便,估算新系统的开发费用和今后的运行、维护费用,估计新系统将获得的效益,并将费用与效益进行比较,看是否有利。
2.3.2 技术可行性
技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否满足开发的需求等。基于J2EE技术的欢乐团购网用的是JSP开发语言,调试相对简单,当前的计算机硬件配置也完全能满足开发的需求,因此在技术上是绝对可行的。软件方面:由于目前BS模式软件相对发展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。
2.3.3 运行可行性
对新系统运行后给现行系统带来的影响(包括组织机构、管理方式、工作环境等)和后果进行估计和评价。运行可行性是对组织结构的影响,现有人员和机构和环境对系统的适应性及人员培训补充计划的可行性。当前我国信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行性的。 
本系统的开发,主要是对数据的处理,包括数据的收集,数据的变换,及数据的各种报表形式的输出。采用流行的JSP+MySQL体系,已无技术上的问题。
2.4 本章小结
本章简单描述了团购网站的主要设计思想,团购网站现状,需求分析以及分别从三个方面分析了团购网站的可行性。
3 系统设计
3.1 概要设计
从程序功能上区分,团购网站分为前台展示和后台管理。用户在购物过程中,如果要将商品加入购物车,这时系统会对用户登陆状态进行判断 。如果用户已经登录,则可以成功将商品加入购物车,不然就提示用户登陆或者新用户注册。在付款时,用户可以选择在线支付或者货到付款。网站管理员通过后台可以对商品、商品分类、订单以及公告进行增删改查。
3.1.1整体模块
主要研究运用JavaEE的Struts2、Spring和Hibernate这三大开源框架,来开发上购物系统。层次模块结构是将系统划分为若干子系统,子系统下再划分为若干的模块。而模块是指具备输入输出、逻辑功能、运行程序和内部数据四种属性的一组程序。在结构化系统设计中,模块一般都是按功能划分的,通常成为功能模块。根据需求分析,团购网站系统的功能结构图如下所示:
3.1.2前台流程

3.2 系统技术的应用及介绍
3.2.1 JSP技术及其原理
JSP(java server pages)是由SUN公司在servlet基础上开发出来的一种动态网页制作技术,其可是您可以将网页中的动态部分和静态的HTML相分离。您可以使用平常得心应手的工具并按照平常的方式来写HTML句子。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以<%”开始并以”%>”结束。通常,您要将文件以”.jsp”为扩展名,并将它放置到任何您可以放置普通WEB页面的路径下。尽管JSP文件看起来更像是HTML文件而不是servlet文件,但,事实上,他恰恰将装换为Servlet文件。其中的静态HTML仅仅用来输出Servlet服务方法返回的信息。如果JSP Pages已经被转换为Servlet且Servlet被编译进而被转载(在第一次被Request时),但您再次Request此JSP页面时,将察觉不到一瞬的延迟。 
JSP有4个关键成分:指令、动作、scriptlet和标签库。指令是指那些发送给JSP容器的消息,他是程序能够指定页面的设置、包含其他资源中的内容和指定JSP中使用的定制标签库。动作将功能封装在预定义的标志中,然后程序员可以将他们(预定义标志)嵌入JSP中。通常根据发送给服务器的特定客户请求中的信息来执行动作。他们可以创建在JSP scriptlet中使用Java对象。Scriptlet,及脚本元素,使程序员能够插入与JSP中的组件(和其他Web应用程序组件)进行交互的Java代码,已处理请求。标记库是标志扩展机制的一部分,它使程序员能够创建定制的标志,这是标记使得程序员能够操作JSP能容。当用户第一次请求或者刷新一个JSP页面时,JSP容器首先是要找到这个JSP页面的源代码文件,然后开始处理,把这个JSP源文件翻译成java代码文件。当用户请求这个文件时,需要JSP容器来处理这个文件。
3.2.2 JDBC介绍
JDBC,是用于执行SQL语句的Java应用程序接口,是一套API集合,在这个集合中设置了许多允许Java程序连接数据库的框架。JDBC有一组用Java语言写成的类和接口组成,是一种连接不同数据库的规范,其宗旨是让个数据库开发商为Java程序提供标准的数据库访问类和接口。JDBC与Java结合,是用户可以很容易的把SQL语句传送到任何关系数据库中,程序员用他编写的数据库应用程序,可以在各种数据库系统上运行。这是真正的可移植性的软件所必须具备的一个特点。JDBC已经被业界普遍采用,而且是Java在服务器成功的主要因素。JDBC驱动程序是依靠独立的软件公司开发的。JDBC驱动程序适合特定的数据库系统和数据访问模型,主要的那些数据库系统都有对应的驱动程序,例如:Microsoft、oracle、Infomix、Sybase、Postgress、MySQL等等。
3.2.3 MVC模式的介绍
MVC是一种体系结构模式,代表Model-View-Controller,是应用于交互式系统的一种体系结构模式。MVC产生于20世纪70年代Palo-Alto实验室的Smalltalk编程环境。MVC模式指导模块的职责分配和模块之间的通信协议。职责分配时面向对象分析和设计中最重要的工作,协议设计则是相当困难的工作。MVC为这两项工作提供了指导,所以意义重大。Model是应用程序对象,也就是包含应用程序数据和业务逻辑的对象。Model对外表现为一个对象,实际上可以也应用是一组子对象的集合。 
传统意义上的View是屏幕对象,负责向用户显示交互界面。这个意义可以进行扩展,将View视为向外界展现应用程序状态的借口和界面。所有的用户输入都由Controller负责处理。在交互系统中,Controller是导致Model发生变化的唯一原因,是导致View发生变化的两个原因之一,因为是控制中心。Controller将用户事件翻译成为请求,而不是命令。如果机械地遵循MVC的规则,Controller的逻辑将十分复杂。Controller通常需要查询View和Model才知道如何处理用户输入。不要把所有逻辑写在Controller里。View和Model都是有智能的对象。可以通知他们,有他们自己决定应对的方式。
一个应用程序或者组件只能有一个Model,但是这个Model可以对应多个View。View向Model注册,要求在Model的数据发生变化时获得通知消息。View得到的通知消息之后,获取Model的相应数据,更新自己的显示。View不向Model发送消息。一个View对应一个Controller。View负责创建和初始化Controller,这也是View和Controller关系密切的原因之一。Controller接收用户输入,如果有与应用程序数据无关,而只涉及显示变化的用户的输入,Controller直接通知View。
Controller和View关系密切的另一个原因是现代应用程序界面复杂,灵活多变。因此Controller需要大量了解View的情况,大量查询View的信息,距离太远不利于效率和灵活性,协议也很难设计,所以经常捆绑在一起。例如,目前基于控件的图形界面,很多控件实际上市一个封装号得MVC实体,通过属性、事件和方法与外界协同工作,强行拆分反而适得其反,应为一个Model对应多个View,一个View对应一个Controller,所以一个Model对应多个Controllers。Controller接收外部输入,是导致Model发生变化的唯一原因。同时,Model的变化可能导致Controller行为的变化。
3.2.4 Struts2介绍
Struts 2是Struts的下一代产品。是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。
Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。 
Struts2框架的大概处理流程如下:   
 加载类(FilterDispatcher)  
 读取配置(struts配置文件中的Action)   
 派发请求(客户端发送请求)  
 调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action )  
 启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)
 处理业务(回调Action的execute()方法)  
 返回响应(通过execute方法将信息返回到FilterDispatcher)  
 查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪个jsp页面)   
 响应用户(jsp--->客户浏览器端显示)
一个请求在Struts2框架中的处理分为以下几个步骤:  
 客户端发出一个指向servlet容器的请求(tomcat);
 这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results, Interceptors,等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper类来查找请求中需要用到的Action。 
 如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。
ActionProxy为Action的代理对象。ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。 
 ActionProxy创建一个ActionInvocation的实例。ActionInvocation在
ActionProxy层之下,它表示了Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。  
 ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,
根据配置,加载Action相关的所有Interceptor。2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。 
 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到
对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。
3.2.5 Hibernate介绍
面向对象技术在最近10年多年中得到了极大的发展,现在大多数企业系统都是采用面向对象技术进行开发的,而这些企业系统均使用关系型数据库永久保存数据。在企业应用系统中,涉及的业务实体会使用对象和关系数据这两种表现形式,业务实体在内存中表现为对象,而在数据库中表现为关系数据。内存中的对象之间会有关系、继承和多态等面向对象的特性,而数据库中的数据之间则无法直接表达这些特性。因而需要一种神奇的技术,可以实现对象与关系数据库中数据之间的自由装换,而对象/关系映射(Object/Relational Mapping,ORM)框架的功能正是如此。 
在开发企业应用系统中使用ORM框架可以避免直接使用SQL语句对关系型数据库中的数据进行操作,而是借用ORM框架把数据库中的数据装换为对象,通过操作这些对象实现对数据库中数据的CRUD的操作。 
使用ORM框架不仅可以减少代码编写的工作量,并且提高了产品质量。因为采用传统的JDBC编程来访问数据库,需要在Java程序代码中嵌入大量琐碎且价值不高的代码,而使用ORM框架后这些代码的数量就大大减少了。同时一个成熟的ORM框架产品不仅把对象与数据库中的数据进行映射,解决关系数据与对象的不匹配问题,还把面向对象思想贯切在一个系统的分析、设计、编程、及测试等方面,并且为了提高访问数据库的性能,降低访问数据库的频率,引入了多线程、缓存及实务管理等很多细节技术。
Hibernate的基础代码包括POJO和Hibernate映射文件。 
Hibernate配置文件主要用于配置数据库连接和运行时所需要的各种属性。主要配置内容为:SessionFactory中的数据库URL配置、数据库JDBC驱动配置、数据库用户名配置、数据库用户密码配置、数据库适配器配置,映射文件配置等等。  
Session是Hibernate持久化操作的基础。这里的Session与传统意义上的Web层HttpSession没有什么关系。Hibernate Session之间Hibernate,相当于JDBC Connection之与JDBC。 
Session通过Session session=sessionFactory.openSession();得到,Session作为贯穿Hibernate的持久化管理器核心,提供了众多持久化方法,如save、update、delete、find等。通过这些方法我们就可以操作数据库了。 
Session是一个轻量级对象。通常每一个Session实例和一个数据库事务绑定,也就是说,没执行一个数据库事务,都应该先创建一个新的Session实例。如果事务执行中出现异常,应该撤销事务。不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例占用的资源。
3.2.6 Spring介绍
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的
复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。  
 目的:解决企业应用开发的复杂性  
 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能   范围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。   
 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。  
 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当
应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。  
 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。   
 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。  
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
3.2.7 SSH整合
JSP2与Struts2标签库坐阵视图层,Struts2的核心控制器与业务控制充当控制层,
Hibernate与各业务逻辑组件处理业务层事务,最后由Spring统管Bean资源,对整个应用的JavaBean实例资源进行统一管理与调度。这样使三个开源框架有机地整合起来并更好地发挥它们的优势,实现了系统多层开发的低耦合,提高了JavaEE应用开发的效率。
3.3 系统模块实现
3.3.1分类管理
商品分类管理模块就是管理员在后台管理页面对商品的所属分类进行增删改查,如下图所示:
商品分类主要代码:
@Scope(prototype)
@Controller(productCategoryAction)
public class ProductCategoryAction extends BaseAction implements ModelDriven{
private static final long serialVersionUID = 1L;
private ProductCategory category = new ProductCategory();
@Override
public ProductCategory getModel() {
return category;
}
@Override
public String add() throws Exception {
if(pid != null && pid > 0 ){
ProductCategory parent = categoryDao.load(pid);
// 层次加1
category.setLevel(parent.getLevel() + 1);
}
return INPUT;
}
public String save() throws Exception{
if(pid != null && pid > 0 ){//如果有父节点
category.setParent(categoryDao.load(pid));//设置其父节点

categoryDao.saveOrUpdate(category);//添加类别信息
return list();//返回类别列表的查找方法
}
public String list() throws Exception{
Object[] params = null;//对象数组为空
String where;//查询条件变量
if(pid != null && pid > 0 ){//如果有父节点
where = where parent.id =?;//执行查询条件
params = new Integer[]{pid};//设置参数值
}else{
where = where parent is null;//查询根节点
}
pageModel = categoryDao.find(pageNo,pageSize,where,params);//执行封装的查询方法
return LIST;//返回后台类别列表页面
}
3.3.2商品管理
主要有商品的添加与查看
后台商品管理:
商品管理主要代码如下:
@Scope(prototype)
@Controller(productAction)
public class ProductAction extends BaseAction implements ModelDriven{
private static final long serialVersionUID = 1L;
/**
* 根据id查看商品信息(查看后更新人气点击次数)
*/
public String select() throws Exception {
if(product.getId() != null && product.getId() > 0){
product = productDao.get(product.getId());
product.setClickcount(product.getClickcount() + 1);
productDao.update(product);
}
return SELECT;
}
/**
* 根据类别id查询所有商品信息
*/
public String getByCategoryId() throws Exception{
if(product.getCategory().getId() != null){
String where = where category.id = ?;
Object[] queryParams = {product.getCategory().getId()};
pageModel = productDao.find(pageNo, pageSize, where, queryParams);
}
return LIST;
}
/**
* 新品上市
*/
public String findNewProduct() throws Exception{
Map orderby = new HashMap();//定义Map集合
orderby.put(createTime, desc);//为Map集合赋值
pageModel = productDao.find(1, 5, orderby );//执行查找方法
image.put(url, 01.gif);//设置副标题图片
return list;//返回商品列表页面
}
3.3.3 订单管理
管理员在后台可以看到所有订单列表,并且能够修改订单状态和删除订单,管理订单如下图所示:
订单管理的主要代码如下:
/*
* 将订单保存到数据库
*/
public String save() throws Exception {
if(getLoginCustomer() != null){//如果用户已登录
order.setOrderId(StringUitl.createOrderId());// 设置订单号
order.setCustomer(getLoginCustomer());// 设置所属用户
Set cart = getCart();// 获取购物车
if(cart.isEmpty()){//判断条目信息是否为空
return ERROR;//返回订单信息错误提示页面
}
// 依次将更新订单项中的商品的销售数量
for(OrderItem item : cart){//遍历购物车中的订单条目信息
Integer productId = item.getProductId();//获取商品ID
ProductInfo product = productDao.load(productId);//装载商品对象
product.setSellCount(product.getSellCount() + item.getAmount());
productDao.update(product);//修改商品信息
}
order.setOrderItems(cart);// 设置订单项
order.setOrderState(OrderState.DELIVERED);// 设置订单状态
float totalPrice = 0f;// 计算总额的变量
for (OrderItem orderItem : cart) {//遍历购物车中的订单条目信息
totalPrice += orderItem.getProductPrice() * orderItem.getAmount(); }
order.setTotalPrice(totalPrice);//设置订单的总价格
orderDao.save(order);//保存订单信息
session.remove(cart);// 清空购物车
}
return findByCustomer();//返回消费者订单查询的方法
}
3.3.4 公告管理
团购网站为了让用户了解网站的动态信息,管理需要在后台更新公告,增加与永华的互动性,后台管理图如下:
实现公告管理的主要代码:
/**
* 编辑公告
*/
public String edit() throws Exception{
announcement = announceDao.findById(announcement.getId());
ActionContext.getContext().getValueStack().push(announcement);
return EDIT;
}
public String list() throws Exception{
String hql = from Announcement;
Object[] queryParams = null;
announcement = (Announcement) announceDao.uniqueResult(hql, queryParams);
ActionContext.getContext().put(announcement, announcement);
return LIST;
}
3.4 程序中的主要包
团购网站代码之间为了降低耦合度,使用分层的思想,主要分为Dao(数据访问层)和Action(视图层),action调用dao时采用接口的方式。
3.4.1 cn.urmine.dao
该包中的类是与数据库交互的类,分别进行增删改查,对应的子包有:
cn.urmine.dao.ann 添加和更新公告的类所在的包
cn.urmine.dao.product 商品以及分类增删改查相关类所在的包
cn.urmine.dao.oder 订单查看和修改订单状态相关所在的包
cn.urmine.dao.user 用户注册登陆相关类所在的包
3.4.2 cn.urmine.model
该包中存放的都是实体类,对应的子包有:
cn.urmine.model.ann 公告实体
cn.urmine.model.product 商品和商品分类实体
cn.urmine.model.oder 订单实体
cn.urmine.model.user 用户实体
3.4.3 cn.urmine.action
该包中存放的是与页面交互的类,对应的子包有:
cn.urmine.action.interceptor 消费者和管理员登陆拦截器
cn.urmine.action.ann 公告action
cn.urmine.action.product 商品和商品分类action
cn.urmine.action.order 订单action
3.5 数据库设计
团购网站数据库采用的是MySQL,总共设计有8张表,分别是tb_announcement(公告表)、tb_customer(消费者表)、tb_order(订单表)、tb_orderitem(订单项表)、tb_productcategory(商品分类表)、tb_productinfo(商品表)、tb_uploadfile(文件上传表)和tb_user(管理员表)。
3.5.1 公告表
公告表在数据库中的表名称为tb_announcement,保存公告信息,表结构如下所示:
字段 类型 说明
id int(11) 唯一标识符
content varchar(255) 公告内容
annDate datatime 公告时间
3.5.2 消费者表
消费者表在数据库中的表名称为tb_customer,保存消费者信息,表结构如下所示:
字段 类型 说明
id int(11) 唯一标识符
username varchar(50) 用户名
password varchar(50) 密码
realname varchar(50) 真实姓名
address varchar(200) 地址
email varchar(50) 电子邮箱
mobile varchar(11) 电话号码
3.5.3 订单表
订单表在数据库中的表名称为tb_order,保存订单信息,表结构如下所示:
字段 类型 说明
orderId varchar(30) 订单唯一标识符
name varchar(50) 消费者姓名
address varchar(200) 订单地址
mobile varchar(11) 收货人号码
totalPrice float 订单总价格
createTime datetime 订单创建时间
paymentWay varchar(15) 支付方式
orderState varchar(10) 订单状态
customerId int(11) 消费者唯一标识符
3.5.4 订单项表
订单项表在数据库中的表名称为tb_orderitem,保存订单项信息,表结构如下所示:
字段 类型 说明
id int(11) 订单项唯一标识符
productName varchar(200) 商品名称
productId int(11) 商品唯一标识符
amount int(11) 购买数量
orderId int(11) 订单唯一标识符
productPrice numeric(10,2) 商品团购价
originalPrice numeric(10,2) 商品门店价
3.5.5 商品分类表
商品分类表在数据库中的表名称为tb_productcategory,保存商品分类信息,表结构如下所示:
字段 类型 说明
id int(11) 商品分类唯一标识符
name varchar(50) 分类名称
level int(11) 分类等级
pid int(11) 商品唯一标识符
3.5.6 商品表
商品表在数据库中的表名称为tb_productinfo,保存商品信息,表结构如下所示:
字段 类型 说明
id int(11) 商品唯一标识符
name varchar(100) 商品名称
description text 商品描述
createTime datetime 商品新增时间
clickcount int(11) 商品点击量
sellcount int(11) 商品销售量
categoryId int(11) 商品所属分类唯一标识符
uploadFile int(11) 上传文件
originalPrice numeric(10,2) 商品门店价
groupPrice numeric(10,2) 商品团购价
3.5.7 上传文件表
上传文件表在数据库中表名称为tb_uploadfile,保存上传文件信息,表结构如下所示:
字段 类型 说明
id int(11) 上传文件唯一标识符
path varchar(255) 上传文件路径
3.5.8 管理员表
管理员表在数据库中表名称为tb_user,保存管理员信息,表结构如下所示:
字段 类型 说明
id int(11) 管理员唯一标识符
username varchar(50) 管理员用户名
password varchar(50) 密码
3.6 本章小结
简单介绍了团购网站的主要设计思想,每个模块如何实现,各个模块功能的主要代码和重要包的作用。列出了团购网站数据库设计的所有表结构,可以对信息的存储有一定的了解。
4 系统实现
4.1实验环境
实验环境包括硬件环境,操作系统的准备以及开发环境的安装。JAVA运行环境为MyEclipse,本节着重介绍开发环境的安装。
4.1.1 硬件环境
Java是跨平台编程语言,是因为它运行在Java虚拟机上。JVM对电脑要求不高。而团购网站用的电脑配置如下:
CPU:主频2.2GHZ
内存: 4G
屏幕分辨率:1367×766
操作系统:windows 7旗舰版 
4.1.2 操作系统及准备工作
Java的开发环境由于有虚拟机的存在对于操作系统并没有太大的限制,可以使用XP、win7、MAC OS、Linux等操作系统,在程序的开发中,操作系统是Windows 7旗舰版64位操作系统。本系统使用Java语言作为开发语言,使用Myeclipse作为开发软件,在搭建开发环境前准备JDK,Myeclipse,tomcat,Mysql等软件。
4.1.3 开发环境的安装
1.安装配置JAVA运行环境
在http://www.oracle.com/technetwork/java/javase/downloads/index.html”进入到下载页面,再根据操作系统选择相应的版本,下载完成后可根据安装向导进行安装。
2.下载和安装MyEclipse软件
在Eclipse的官方网站http://www.myeclipsecn.com”下载最新版myeclipse,下载完后根据向导进行安装。
3.下载tomcat服务器
在tomcat官网下载页面http://tomcat.apache.org/download-80.cgi”下载tomcat(由于myeclipse版本原因,没有下载最新版tomcat,而是使用的tomcat7.0),下载完成后解压。要让网站成功部署,需要配置服务器环境变量,如下图所示:

环境变量配置完成后需要测试服务器是否能应用成功,步骤如下:
启动服务器
启动成功后
测试访问
4.3 实验结果与分析
团购网站设计完成以后,就能通过tomcat服务器进行访问,团购网站首页如下图所示:
图4.3.1团购网站首页
后台管理页面如下图所示:
图4.3.2团购网站后台管理系统
5 结束语
5.1 论文主要工作
通过几个月的设计与修改,团购网站毕业设计基本成型,本课题的主要工作有如下部分: 
(1)学习研究了Java语言,对Java的特性有了一定了掌握。 
(2)研究了团购网站在国内外现状,对团购网站做了需求分析与可行性分析。
(3)学习了完成本课题的相关技术,诸如JSP、MVC、Spring等等。
本课题在整体上涉及到web相关的许多技术。从功能需求的分析到数据库表的设计,再到后面页面布局,从前端到后端,对我个挺大的考验。在这几个月的学习摸索中,自己慢慢的对本课题所涉及的技术有了不同层次的掌握,知道了一般网站开发中的流程,更重要的是在写代码的过程中碰到了无数报错,但每次自己都能通过搜索引擎找到解决办法,这在一定程度上锻炼了自己的自学能力。我相信,通过本课题的设计与实现,对自己未来的发展能够起到一定的作用。
5.2 有待进一步解决的问题
由于自己编程水平有限,对Jquery和ajax掌握的还是那么熟悉,所以网站中有几个不足之处,比如:
1) 在进行分类查看中,不能显示树状列表,而是通过表格的形式将所有分类都显示在页面中,只是将一级分类加粗显示方便浏览。
2) 在生成订单项中,改变购买数量,订单总价格并不能随之改变,而是采用在购买时输入数量直接显示在订单中。
在网站首页搜索框中搜索商品,当输入关键字时,搜索框下面并不能出现类型百度搜索的效果。
3) 参考文献
[1]岑红旗,浅析网上购物在中国的现状[J]. 时代金融. 2007
[2] 冯燕奎、赵德奎编著。JSP实用案例教程[M]。 清华大学出版社,1997
[3]熊节、林仪明、张凯峰、陈玉泉等主编[《CSDN社区电子杂志——Java杂志》创刊号]
[4] 鲁晓东,李育龙,杨健著。JSP软经工程案例精解[M]。电子工业出版社,1995
[5] 蔡剑,景楠.Java Web应用开发:J2EE和Tomcat[M].北京:清华大学出版社,2004.
[6]王海涛,-贾宗璞.基于Struts和Hibernate的Web应用开发[J].计算机工程,2011, 37(9):113.
[7]龚瑜江,红黄永.基于Struts的Web开发[J].计算机与数字工程,2009,37(232):58-62.
[8]赵洋,张丽,王恩东,张素宁.基于Struts+Spring+Hibernate的J2EE的架构研究
[9] R.M.加涅,L.J.布里格斯。教学设计原理[M]。华东师范大学出版社,1999
[10] (美)范斯瓦尼著,许晓青译。MySQL完美手册[M]。电子工业出版社,2004
[11]《Java编程思想》,Bruce Eckel,机械工业出版社,2005年,P9-P26
[12]《Java程序设计教程》,H.M. Deitel, P. J. Deitel著,清华大学出版社,2006年
[13] Cay S. Horstmann. Gary Cornell Core Java(EIGHTH EDITION)”
文华团购
账 户 管 理 模 块
账 户 管 理 模 块
账 户 管 理 模 块
账 户 管 理 模 块
账 户 管 理 模 块
浏览商品
购买商品
是否登陆
登陆


继续购物
加入购物车
去结算
填写收货人信息
选择支付方式
货到付款
在线支付
选择银行
生成订单
生成订单
完成支付
等待发货
PAGE

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

【完整资料】

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值