版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-目录摘要 -1-Abstract -2-1. 引言 -3-2. 设计目的与任务 -4-3. 需求分析 -4-4. 系统设计 -5-4.1分层模式 -5-4.2开发技术与工具 -5-4.3总体设计 -10-4.3.1系统总体结构 -10-4.3.2流程图 -12-4.4详细设计 -13-4.4.1数据库设计 -13-4.4.2系统开发规范及说明 -17-4.4.3具体模块设计 -19-5. 程序清单 -26-5.1数据库脚本 -26-5.2项目实现部分代码 -29-6. 程序调试与体会 -45-7. 运行结果 -46-8. 结论 -54-9. 致谢 -54-10. 参考文献 -54-
摘要随着信息化网络的发展,网络对人们的生活影响越来越大,网上购物也逐渐成为一种趋势,这对电子商场的发展起到了很好的推进作用。本文主要通过对电子商城的应用环境和主要实现功能进行分析,叙述了本电子商城的设计与实现过程。该系统是基于多层企业级应用标准JAVAEE技术开发的WEB应用,以典型的MVC模式架构为基础。采用JaveEE5轻量级框架SSH与前台Ajax技术相结合来实现,在设计过程中全方位的应用软件工程的开发思想,对项目进行UML建模包括各模块的类图、时序图等。系统基于B/S分布式结构,适应范围广阔。关键词:电子商城;SSH;Ajax;框架
AbstractWiththedevelopmentofinformationnetworks,thenetworkplaysanincreasingroleinpeople'slives,andonlineshoppingisbecomingatrend,whichwonderfullyfacilitatesthedevelopmentofelectronicstore.
Thisarticleisfocusedontheanalysisoftheappliedenvironmentofelectronicmallandthemainachievementfunction,forthepurposeofdescribingthedesignandimplementprocessofE-mall.Thesystemisbasedonthewebapplicationdevelopedwithmulti-standardenterpriseapplicationstandardJAVAEE,framedwithclassicalMVCmodelarchitecture,andrealizedthroughthecombinationof
lightweightframeworkSSHandfrontdeskAjaxtechnology.
InthedesignprocessafullrangeofapplicationdevelopmentsoftwareengineeringdevelopmentideaswasusedintheUMLmodelingoftheproject,whichincludedclassdiagrams,sequencediagrams.
ThesystemisbasedonB/Sdistributedarchitecturetomeetabroadrangeofrequirements.Keywords:ElectronicMall,SSH,Ajax,Framework引言随着网上购物的迅猛发展,电子商城大量涌现,而电子商城的出现不仅改变了人们传统的购物方式,也逐渐的影响着人们的消费观,一个好的电子商城不仅能给客户带来方便,更能给企业带来巨大的财富。本商城主要利用JavaEE与Ajax技术进行开发,具有很强的安全性、可靠性和可扩展性。其前台实现了从商品选购到订单提交整个业务流程,后台实现了对整个系统的管理,就整体功能而言,能满足基本的网上购物需求,能让用户感到便捷、快速,让企业管理、维护更简单。设计目的与任务随着信息化技术在生活中的应用越来越广泛,网上购物也逐渐成为人们的一种生活方式。本系统正是基于这样一种环境下应运而生。本电子商城分为前、后台两部分,前台主要实现会员的网上购物业务流程,后台则由各种管理员对商城会员、商品、定单等内容进行管理。需求分析本电子商城分为前后台两部分,前台主要包括非会员和会员用户,后台分为商品管理员、订单管理员、会员管理员和系统管理员。在系统中依据用户的权限执行相应的功能。系统用例图如下所示:图3-1系统用例图系统设计4.1分层模式本系统是基于B/S模式开发的JAVAEE多层体系结构WEB应用。系统开发主要分为以下几层:表示层、业务层、DAO层、持久层。业务层和DAO层都通过接口与其它层进行连接从而减小了各层之间的耦合度,实现高内聚、低耦的思想。分层结构图如下所示:图4-1系统分层结构4.2开发技术与工具主要开发工具为:MyEclipse8.6、Mysql6.0、Tomcat6.0、PowerDesigner12。主要技术包括:JavaEE轻量级框架S2SH、MD5算法、Log4j、Ajax、JSON。S2SH集成框架是Struts、Spring和Hibernate三种技术的有机融合,是目前应用最广泛的JavaEE架构。在S2SH集成框架中,Struts的作用是提供MVC模型,将界面、业务逻辑和数据分离,并提供一个高可扩展的架构。Spring作为核心,向上整合MVC框架,向下整合ORM框架,使用Spring的IoC容器来管理各组件之间之间的依赖关系,Spring的声明事务将负责逻辑层组件的事务管理。而Hibernate提供了一个抽象的数据服务视图,将用户对数据库的访问进行高度抽象。Struts是目前创建Web应用最常用的表现层MVC框架实现,是JakartaApache的一个开源项目。基于Model2的Struts框架利用控制器和定制标签库将应用中的模型和视图分离,达到了层间松散耦合的效果,同时提高系统的灵活性、重用性和维护性。作为开源项目,Struts经受了大量实践的检验,功能越来越强大,体系也日臻完善,并且对其他技术和框架显示出良好的融合性。图4-2Struts2.0MVC结构图Spring由RodJohnson创建,它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。图4-3Spring功能图Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。图4-4Hibernate运行图AJAX是AsynchronoutJavaScriptandXML的缩写,它并不是一门新的语言或技术,实际上是几项技术按一定的方式组合在一起,在共同的协作中发挥各自的作用,它包括:使用XHTML和CSS标准化呈现;使用DOM实现动态显示和交互;使用XML和XSLT进行数据交换和处理;使用XMLHttpRequest进行异步数据读取;最后用JavaScript绑定和处理所有数据。AJAX的一个最大的特点是无需刷新页面便可向服务器传输或读写数据(又称无刷新页面),这一特点要得益于XMLHTTP组件XMLHttpRequest对象。这样就可以像再发桌面应用程序只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作提交给服务器来做,这样即减轻了服务器的负担又加快了响应速度、缩短了用户等候时间。图4-5Ajax模型JSON(JavaScriptObjectNotation,JavaScript对象标记)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(StandardECMA-2623rdEdition-December1999)的一个子集。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。而AJAX可以利用JSON更加有效地接收数据,因为JSON特殊的属性。在Struts2的showcase中的AJAX部分,JSON的结果输出是通过Freemaker模板实现。这种方法在简易性和灵活性上都比不上JSON插件。MessageDigestAlgorithmMD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。当用户登录的时候,系统把用户输入的密码进行MD5Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。4.3总体设计4.3.1系统总体结构 本系统分为前台和后台两部分,前台提供一条网上购物业务流程的功能实现,主要实现模块见图4-6;后实现对前台功能信息的管理,主要实现模块见图4-7。前台功能模块:图4-6前台功能模块后台功能模块:图4-7后台功能模块4.3.2流程图前台主要分为非会员用户和会员用户,其中只有会员用户才能实现在线购物,而非会员用户必需进行注册。后台用户主要分为商品管理员、会员管理员、定单管理员、系统维护员,不同的管理员实现不同的功能。前台流程图:图4-8前台流程图后台流程图:图4-9后台流程图4.4详细设计4.4.1数据库设计本系统数据库开发主要基于Mysql6.0数据库管理工具,包括8个数据库表如下所示:数据字典表4-1e_shop数据表清单表名解释ADMIN管理员表CART购物车表EVALUATE商品评价表MEMBER会员表MERCHANTABLE商品表ORDERS定单表RECORD记录表TYPES类别表表4-2后台管理员表(ADMIN)ADMIN(admin)是否主键字段名字段描述数据类型长度可空约束缺省值备注是ADMIN_ID管理员编号INT(2)2ADMIN_NAME管理员名VARCHAR(50)50ADMIN_PWD管理员密码VARCHAR(30)20ADMIN_TYPE管理员种类INT(1)1表4-3购物车表(CART)CART(cart)是否主键字段名字段描述数据类型长度可空约束缺省值备注是CART_ID购物车编号INT(5)5CART_MEM_ID会员编号INT(5)5是CART_MER_ID商品编号INT(6)6是CART_NUM商品数量INT(3)3是表4-4商品评价表(EVALUATE)EVALUATE(evaluate)是否主键字段名字段描述数据类型长度可空约束缺省值备注是EVAL_ID评价编号INT(3)3EVAL_MEM_ID会员编号INT(5)5是EVAL_MER_ID商品编号INT(6)6是EVAL_DATE评价日期VARCHAR(20)20是EVAL_CONTENT评价内容VARCHAR(200)200是表4-5会员表(MEMBER)MEMBER(member)是否主键字段名字段描述数据类型长度可空约束缺省值备注是MEM_ID会员编号INT(5)5MEM_NAME会员名称VARCHAR(50)50MEM_PWD会员密码VARCHAR(30)20MEM_TEL联系电话VARCHAR(15)15是MEM_ADDRESS联系地址VARCHAR(50)50是MEM_REGIST_DATE注册日期VARCHAR(10)10是MEM_POST邮编VARCHAR(10)10是MEM_EMAILEMAILVARCHAR(20)20是MEM_CART_ID购物车编号INT(5)5是表4-6商品表(MERCHANTABLE)MERCHANTABLE(merchantable)是否主键字段名字段描述数据类型长度可空约束缺省值备注是MER_ID商品编号INT(6)6MER_NAME商品名称VARCHAR(50)50MER_TYPE_ID商品种类INT(3)3是MER_PLACE出产地VARCHAR(50)50是MER_PRICE价格DECIMAL(8,2)8MER_DISCOUNT折扣DECIMAL(2,1)2是MER_PICTURE图片VARCHAR(50)50是MER_DESC描述VARCHAR(50)50是MER_PRODUCTER厂家VARCHAR(60)60是MER_LEAVE_DATE出厂时间VARCHAR(10)10是MER_ADD_DATE添加时间VARCHAR(10)10是MER_NUM销售数量INT0表4-7定单表(ORDERS)ORDERS(orders)是否主键字段名字段描述数据类型长度可空约束缺省值备注是ORDER_ID定单编号INT(6)6ORDER_DATE定单日期VARCHAR(20)20是ORDER_MEM_ID会员编号INT(5)5是ORDER_STATUS定单状态INT(1)1是ORDER_SEND_TIME发送时间VARCHAR(60)60是ORDER_REMARK定单备注VARCHAR(100)100是ORDER_SUM价钱总和DECIMAL(8,2)8是表4-8记录表(RECORD)RECORD(record)是否主键字段名字段描述数据类型长度可空约束缺省值备注是RECORD_ID记录编号INT(6)6RECORD_MER_ID商品编号INT(6)6是RECORD_MER_NUM商品数量INT(3)3是RECORD_ORDER_ID定单编号INT(6)6是表4-9类别表(TYPES)TYPES(types)是否主键字段名字段描述数据类型长度可空约束缺省值备注是TYPE_ID类别编号INT(3)3TYPE_NAME类别名称VARCHAR(30)30是TYPE_DESC类别描述VARCHAR(100)100是数据库概念设计将抽象的需求转为数据库概念结构,即概念模式。图4-10概念图数据库物理设计依据所用的数据库由概念模型生成相应的物理模型,如下图所示。图4-11物理图4.4.2系统开发规范及说明系统目录及说明如下图依据架构思想,将开发类主要分为action、bean、dao、service逻辑包。action包含所有的控制层类,bean包含所有领域对象及相应的ORM映射文件,dao包含所有的持久层抽象类,service包含所有业务层类。另一方面根据系统开发所需建立filter(过滤器)包、listener(监听器)包、tool(工具)包。具体如下图所示:图4-12系统目录图Struts配置文件图4-13Struts配置文件图4.4.3具体模块设计模块分析与设计:整个系统主要包括商品信息模块、会员模块、购物车模块、订单模块、商品类别、后台管理员模块。商品信息模块:本模块主要用来显示、查询和商品评论的功能。主要涉及的类和方法如下类图。其中PageServiceImpl为分页实现类,在整个系统中属于一个公共组件,故在各模块中不再重复介绍。另一方面各模块各层之间类的关系也大致相同,都可以参考以下类图。图4-14商品模块类图表4-10商品模块主要应用类类名含义MerchantableAction作为其控制层内容,调用相应的业务方法HeadService业务层抽象类,其实现类中包含相应的业务方法MerchantableDAO包含相应的持久层方法表4-11MerchantableAction类方法含义showByType()调用业务层方法按类别显示商品showById()调用业务层方法显示某种商品research()调用业务层方法查询商品showAllMer()调用业务层方法显示所有商品deleteMer()调用业务层方法删除商品updateMer()调用业务层方法修改商品信息saveMer()调用业务层方法保存商品信息表4-12HeadService方法含义findById()调用持久层方法按商品编号查询商品findByType()调用持久层方法按种类查询商品researchMer()按条件查询商品deleteMer()删除商品updateMer()修改商品saveMer()保存商品表4-13MerchantableDAO类方法含义findAllByKeyword()按关键字查询所有商品findByTypes()按各类查询商品findById()按商品编号查询商品delete()删除商品findAll()查询所有商品saveOrUpdate()保存或修改商品findByNum()依据数量查询findPartByTyps()依据种类查询部分商品会员模块: 在本模快中用到了两控制层类LoginAction和LoginJsonAction,前者用于普通的控制调用业务层方法,同时返回相应的业务逻辑视图。后者则是用Struts和Json相结合应用的,首先是能过Ajax提交数据当相应的action,然后调用业务层方法处理完成返回并不是返回某个逻辑视图,而是将返回的信息通过Json进行数据转换,前台通过Ajax接收数据。表4-14会员模块主要应用类类名含义LoginAction普通形式的控制器,调用相应的业务层方法LoginJsonActionAjax提交时使用的控制器UserService业务层类,包含各种相应的业务处理方法MemberDAO包含相应的持久层方法表4-15LoginAction类方法含义modifyPwd()调用业务层方法修改会员密码modifyAddress()调用业务层方法修改会员地址等信息regist()调用业务层方法注册showMem()调用业务层方法后台显示所有会员delMem()调用业务层方法删除会员表4-16LoginJsonAction类方法含义execute()调用业务层方法会员登录校验 表4-17UserService类方法含义modifyPwd()修改会员密码modifyAddress()修改会员地址等信息save()保存会员delMem()删除会员表4-18MemberDAO类方法含义findByNameAndPwd()按用户名和密码查询用户saveOrUpdate()保存或修改会员信息findAll()查询所有会员delete()删除会员购物车模块: 同上面的会员模板,在此模块中也有两个控制类CartAction和CartJsonAction。表4-19购物车模块主要应用类类名含义CartAction普通形式的控制器,调用相应的业务层方法CartJsonActionAjax提交时使用的控制器HeadService业务层类,包含各种相应的业务处理方法CartDAO包含相应的持久层方法 表4-20CartAction类方法含义execute()调用业务层方法查询会员相应的购物车update()调用业务层方法修改购物车delete()调用业务层方法删除购物车表4-21CartJsonAction类方法含义add()添加商品到购物车表4-22HeadService类方法含义findCartByMember()依据会员查询相应的购物车updateCart()修改购物车deleteCart()删除购物车中的商品addMerToCart()将商品加入购物车 表4-23CartDAO类方法含义findByMember()依据会员查询相应的购物车updateCart()修改购物车delete()删除购物车中的商品saveCart()将商品加入购物车订单模块表4-24订单模块主要应用类类名含义OrderAction控制器调用相应的业务层方法HeadService业务层类,包含各种相应的业务处理方法OrderDAO包含相应的持久层方法 表4-25OrderAction类方法含义execute()调用业务层方法显示订单addOrder()调用业务层方法添加historyOrder()调用业务层方查看历史订单modifyOrder()调用业务层方法进入修改订单deleteOrder()调用业务层方法删除订单showOrders()调用业务层方法显示所有订单submit()调用业务层方法确认定单、发货表4-26HeadService类方法含义addOrder()添加订单findHistoryOrder()查寻历史订单deleteOrde删除订单updateOrders()修改订单 表4-27OrderDAO类方法含义findById()据编号查询订单findHistoryOrder()查寻历史订单delete()删除订单saveOrUpdate()保存或修改订单商品类别模块:表4-28商品类别模板应用类类名含义TypesAction控制器调用相应的业务层方法HeadService业务层类,包含各种相应的业务处理方法TypesDAO包含相应的持久层方法表4-29TypesAction类方法含义getAllType()调用业务层方法获取类别deleteType()调用业务层方法删除addType()调用业务层方法添加种类updateType()调用业务层方法修改种类recommend()调用业务层方法推荐某类商品到首页cancelRecommend()调用业务层方法取消推荐表4-30HeadService类方法含义findByReCommend查询推荐的商品findAllTypes()查询所有类别deleteType()删除类别saveType()保存类别updateType()修改类别 表4-31TypesDAO类方法含义findByRecommend()查询被推荐的类别findById()据编号查询所有类别findAll()查询所有类别saveOrUpdate()保存或修改类别delete()删除类别后台管理员模块:表4-32后台管理员主要应用类类名含义AdminAction控制器调用相应的业务层方法UserService业务层类,包含各种相应的业务处理方法AdminDAO包含相应的持久层方法表4-33AdminAction类方法含义valAdmin()调用业务层方法校验用户save()调用业务层保存管理员update()调用业务层方法修改管理员权限delete()调用业务层方法删除管理员modifyPwd()调用业务层修改管理员密码exit()注销 表4-34UserService类方法含义validateAdmin()校验用户saveAdmin()保存管理员updateAdmin()修改管理员delAdmin()删除管理员表4-35AdminDAO类方法含义findAdminByNameAndPwd据用户名与密码查询用户saveOrUpdate()保存或保存管理员Delete()删除管理员findById()依据编号查询管理员时序图举例时序图通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件。以下列出了本商城中的登录时序图与购物时序图,其它功能时序图与其两者基本相似,只是处理的对象不同,故此不在赘述。图4-15登录时序图图4-16购物时序图程序清单5.1数据库脚本 具体实现脚本:#管理员表CREATETABLEadmin( admin_idINT(2)AUTO_INCREMENT, admin_nameVARCHAR(50)NOTNULL, admin_pwdVARCHAR(30)NOTNULL, admin_typeINT(1)NOTNULL, CONSTRAINTPK_ADMIN_IDPRIMARYKEY(admin_id));#会员表CREATETABLEmember( mem_idINT(5)AUTO_INCREMENT, mem_nameVARCHAR(50)NOTNULL, mem_pwdVARCHAR(30)NOTNULL, mem_telVARCHAR(15), mem_addressVARCHAR(50), mem_regist_dateVARCHAR(10), mem_postVARCHAR(10), mem_emailVARCHAR(20), mem_cart_idINT(5), CONSTRAINTPK_MEMBER_IDPRIMARYKEY(mem_id));#商品种类CREATETABLEtypes( type_idINT(3)AUTO_INCREMENT, type_nameVARCHAR(30), type_descVARCHAR(100), type_recommendintdefault0, CONSTRAINTPK_TYPES_IDPRIMARYKEY(type_id));#商品信息表CREATETABLEmerchantable( mer_idINT(6)AUTO_INCREMENT, mer_nameVARCHAR(50)NOTNULL, mer_type_idINT(3), mer_placeVARCHAR(50), mer_priceDECIMAL(8,2)NOTNULL, mer_discountDECIMAL(2,1), mer_pictureVARCHAR(50), mer_descVARCHAR(50), mer_producterVARCHAR(60), mer_leave_dateVARCHAR(10), mer_add_dateVARCHAR(10), mer_numintdefault0, CONSTRAINTPK_MERCHANTABLE_IDPRIMARYKEY(mer_id), CONSTRAINTFK_MERCHANTABLE_TYPE_IDFOREIGNKEY(mer_type_id)REFERENCEStypes(type_id));#商品评价表CREATETABLEevaluate( eval_idINT(3)AUTO_INCREMENT, eval_mem_idINT(5), eval_mer_idINT(6), eval_dateVARCHAR(20), eval_contentVARCHAR(200), CONSTRAINTPK_EVALUATE_IDPRIMARYKEY(eval_id), CONSTRAINTFK_EVALUATE_MEN_IDFOREIGNKEY(eval_mem_id)REFERENCESmember(mem_id), CONSTRAINTFK_EVALUATE_MER_IDFOREIGNKEY(eval_mer_id)REFERENCESmerchantable(mer_id));#购物车购物车号即为会员编号CREATETABLEcart( cart_idINT(5)AUTO_INCREMENT, cart_mem_idINT(5), cart_mer_idINT(6)unique, cart_numINT(3), CONSTRAINTPK_CART_IDPRIMARYKEY(cart_id), CONSTRAINTFK_CART_IDFOREIGNKEY(cart_mem_id)REFERENCESmember(mem_id), CONSTRAINTFK_CART_MER_IDFOREIGNKEY(cart_mer_id)REFERENCESmerchantable(mer_id));#订单表CREATETABLEorders( order_idINT(6)AUTO_INCREMENT, order_dateVARCHAR(20), order_mem_idINT(5), order_statusINT(1), order_send_timevarchar(60), order_remarkvarchar(100), order_sumDECIMAL(8,2), CONSTRAINTPK_ORDER_IDPRIMARYKEY(order_id), CONSTRAINTFK_ORDER_MEM_IDFOREIGNKEY(order_mem_id)REFERENCESmember(mem_id));#购物记录CREATETABLErecord( record_idint(6)AUTO_INCREMENT, record_mer_idint(6), record_mer_numint(3), record_order_idint(6), CONSTRAINTPK_RECORD_IDPRIMARYKEY(record_id), CONSTRAINTFK_RECORD_MER_IDFOREIGNKEY(record_mer_id)REFERENCESmerchantable(mer_id), CONSTRAINTFK_RECORD_ORDER_IDFOREIGNKEY(record_order_id)REFERENCESorders(order_id));5.2项目实现部分代码applicationContext.xml配置文件<?xmlversion="1.0"encoding="GBK"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xmlns:aop="/schema/aop" xmlns:tx="/schema/tx" xmlns:p="/schema/p" xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd /schema/tx/schema/tx/spring-tx-2.5.xsd /schema/aop/schema/aop/spring-aop-2.5.xsd"> <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!--指定连接数据库的驱动--> <propertyname="driverClass"value="com.mysql.jdbc.Driver"/> <!--指定连接数据库的URL--> <propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/db_eshop3?useUnicode=true&characterEncoding=utf8"/> <!--指定连接数据库的用户名--> <propertyname="user"value="root"/> <!--指定连接数据库的密码--> <propertyname="password"value="root"/> <!--指定连接数据库连接池的最大连接数--> <propertyname="maxPoolSize"value="40"/> <!--指定连接数据库连接池的最小连接数--> <propertyname="minPoolSize"value="1"/> <!--指定连接数据库连接池的初始化连接数--> <propertyname="initialPoolSize"value="1"/> <!--指定连接数据库连接池的连接的最大空闲时间--> <propertyname="maxIdleTime"value="20"/> <propertyname="idleConnectionTestPeriod"value="18000"/> </bean> <beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"> <refbean="dataSource"/> </property> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</prop> <!--是否根据需要每次自动创建数据库--> <propkey="hibernate.hbm2ddl.auto">update</prop> <!--显示Hibernate持久化操作所生成的SQL--> <propkey="hibernate.show_sql">true</prop> <!--将SQL脚本进行格式化后再输出--> <propkey="hibernate.format_sql">true</prop> </props> </property> <propertyname="mappingResources"> <list> <value>com/eshop/bean/Admin.hbm.xml</value> <value>com/eshop/bean/Cart.hbm.xml</value> <value>com/eshop/bean/Evaluate.hbm.xml</value> <value>com/eshop/bean/Member.hbm.xml</value> <value>com/eshop/bean/Merchantable.hbm.xml</value> <value>com/eshop/bean/Orders.hbm.xml</value> <value>com/eshop/bean/Record.hbm.xml</value> <value>com/eshop/bean/Types.hbm.xml</value> </list> </property> </bean> <!--****************事务管理配置***************--> <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <!--****************配置切面Bean,指定事务管理器--> <tx:adviceid="txAdvice"transaction-manager="transactionManager"> <tx:attributes> <tx:methodname="*"/> </tx:attributes> </tx:advice> <!--配置一个切入点匹配指定包下所有类--> <aop:config> <aop:pointcutid="pointcut"expression="execution(*com.eshop.service.impl.*Impl.*(..))"/> <aop:advisoradvice-ref="txAdvice"pointcut-ref="pointcut"/> </aop:config> <!--引进daoContext.xml配置文件--> <importresource="daoContext.xml"/> <!--*****************Service************************--> <beanid="headService"class="com.eshop.service.impl.HeadServiceImpl"> <propertyname="typesDAO"ref="typesDAO"/> <propertyname="merchantableDAO"ref="merchantableDAO"/> <propertyname="cartDAO"ref="cartDAO"/> <propertyname="evaluateDAO"ref="evaluateDAO"/> <propertyname="ordersDAO"ref="ordersDAO"/> <propertyname="recordDAO"ref="recordDAO"/> </bean> <beanid="userService"class="com.eshop.service.impl.UserServiceImpl"> <propertyname="memberDAO"ref="memberDAO"/> <propertyname="cartDAO"ref="cartDAO"/> <propertyname="adminDAO"ref="adminDAO"/> </bean> <beanid="pageService"class="com.eshop.service.impl.PageServiceImpl"> <propertyname="pageDAO"ref="pageDAO"/> </bean> <!--*****************Action***********************--> <beanid="typesAction"class="com.eshop.action.TypesAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="merchantableAction"class="com.eshop.action.MerchantableAction"scope="prototype"> <propertyname="headService"ref="headService"/> <propertyname="pageService"ref="pageService"/> </bean> <!--scope注意默认为单例模式sington--> <beanid="loginAction"class="com.eshop.action.LoginAction"scope="prototype"> <propertyname="userService"ref="userService"/> <propertyname="pageService"ref="pageService"/> </bean> <beanid="loginJsonAction"class="com.eshop.action.LoginJsonAction"scope="prototype"> <propertyname="userService"ref="userService"/> </bean> <beanid="cartAction"class="com.eshop.action.CartAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="cartJsonAction"class="com.eshop.action.CartJsonAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="evaluateJsonAction"class="com.eshop.action.EvaluateJsonAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="evalAction"class="com.eshop.action.EvaluateAction"scope="prototype"> <propertyname="headService"ref="headService"/> </bean> <beanid="orderAction"class="com.eshop.action.OrderAction"scope="prototype"> <propertyname="headService"ref="headService"/> <propertyname="pageService"ref="pageService"/> </bean> <beanid="adminAction"class="com.eshop.action.AdminAction"scope="prototype"> <propertyname="userService"ref="userService"/> </bean></beans>daoContext.xml配置文件<?xmlversion="1.0"encoding="UTF-8"?> <!--指定Spring配置文件的DTD信息--><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN2.0//EN" "/dtd/spring-beans-2.0.dtd"><beans> <beanid="template"abstract="true"lazy-init="true"> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <beanid="adminDAO"class="com.eshop.dao.impl.AdminDAOImpl"parent="template"/> <beanid="cartDAO"class="com.eshop.dao.impl.CartDAOImpl"parent="template"/> <beanid="evaluateDAO"class="com.eshop.dao.impl.EvaluateDAOImpl"parent="template"/> <beanid="memberDAO"class="com.eshop.dao.impl.MemberDAOImpl"parent="template"/> <beanid="merchantableDAO"class="com.eshop.dao.impl.MerchantableDAOImpl"parent="template"/> <beanid="ordersDAO"class="com.eshop.dao.impl.OrdersDAOImpl"parent="template"/> <beanid="recordDAO"class="com.eshop.dao.impl.RecordDAOImpl"parent="template"/> <beanid="typesDAO"class="com.eshop.dao.impl.TypesDAOImpl"parent="template"/> <beanid="pageDAO"class="com.eshop.dao.impl.PageImplDao"parent="template"/></beans>struts.xml配置文件<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd"><struts> <constantname="struts.i18.encoding"value="UTF-8"/> <constantname="struts.custom.i18n.resources"value="messageResource"/> <packagename="head"extends="struts-default"namespace="/head"> <actionname="index"class="typesAction"> <resultname="success">index.jsp</result> <resultname="exit"type="redirect">index.action</result> </action> <actionname="login"class="loginAction"> <resultname="error">index.jsp</result> <resultname="modify">member/modifyPwd.jsp</result> <resultname="modifyaddress">member/modifyAddress.jsp</result> <resultname="regist">registSucc.jsp</result> <resultname="input">member/modifyPwd.jsp</result> </action> <actionname="merchantable"class="merchantableAction"> <resultname="success">showByType.jsp</result> <resultname="showone">showById.jsp</result> <resultname="research">result.jsp</result> </action> <actionname="eval"class="evalAction"> <resultname="success">showById.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package> <packagename="headmember"extends="struts-default"namespace="/head/member"> <actionname="mycart"class="cartAction"> <resultname="error">/head/login.jsp</result> <resultname="success">mycart.jsp</result> </action> <actionname="order"class="orderAction"> <resultname="success">account.jsp</result> <resultname="finished">finish.jsp</result> <resultname="history">historyOrder.jsp</result> <resultname="modify">modifyOrder.jsp</result> <resultname="delete">modifyOrder.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package> <packagename="json"extends="json-default"namespace="/head"> <actionname="cartJson"class="cartJsonAction"> <resulttype="json"/> </action> <actionname="evalJson"class="evaluateJsonAction"> <resulttype="json"/> </action> <actionname="addEvalJson"class="evaluateJsonAction"method="add"> <resulttype="json"/> </action> <actionname="loginJson"class="loginJsonAction"> <resulttype="json"/> </action> </package> <packagename="back"extends="struts-default"namespace="/back"> <actionname="login"class="adminAction"> <resultname="success">jsp/index.jsp</result> <resultname="error">login.jsp</result> <resultname="input">login.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package> <packagename="back2"extends="struts-default"namespace="/back/jsp"> <actionname="mer"class="merchantableAction"> <interceptor-refname="fileUpload"> <paramname="allowedTypes"> image/bmp,image/png,image/gif,image/jpeg </param> <paramname="maximumSize">30000</param> </interceptor-ref> <interceptor-refname="defaultStack"/> <paramname="savePath">/image</param> <resultname="success">merInfo.jsp</result> <resultname="save">saveMerInfo.jsp</result> <resultname="delete"type="redirect">mer!showAllMer?page=1</result> <resultname="go">modifyMer.jsp</result> <resultname="update">modifyResult.jsp</result> <resultname="input">uploadError.jsp</result> </action> <actionname="*Type"class="typesAction"> <resultname="go">{1}.jsp</result> <resultname="delete">typeInfo.jsp</result> <resultname="add">typeInfo.jsp</result> <resultname="update">typeInfo.jsp</result> </action> <actionname="orders"class="orderAction"> <resultname="success">orderInfo.jsp</result> <resultname="submit">orderInfo.jsp</result> </action> <actionname="mem"class="loginAction"> <resultname="success">memInfo.jsp</result> <resultname="del">memInfo.jsp</result> </action> <actionname="admin"class="adminAction"> <resultname="success">adminInfo.jsp</result> <resultname="save">adminInfo.jsp</result> <resultname="update">modifyAdminResult.jsp</result> <resultname="modifyPwd">modifyPwd.jsp</result> <resultname="exit"type="redirect">/back/login.jsp</result> <resultname="input">/back/login.jsp</result> </action> <actionname="*"> <result>{1}.jsp</result> </action> </package></struts>业务层HeadServiceImpl类packagecom.eshop.service.impl;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importcom.eshop.bean.Cart;importcom.eshop.bean.Evaluate;importcom.eshop.bean.Member;importcom.eshop.bean.Merchantable;importcom.eshop.bean.Orders;importcom.eshop.bean.Record;importcom.eshop.bean.Types;importcom.eshop.dao.CartDAO;importcom.eshop.dao.EvaluateDAO;importcom.eshop.dao.MerchantableDAO;importcom.eshop.dao.OrdersDAO;importcom.eshop.dao.RecordDAO;importcom.eshop.dao.TypesDAO;importcom.eshop.service.HeadService;importcom.eshop.tool.DateTime;publicclassHeadServiceImplimplementsHeadService{ privateTypesDAOtypesDAO; privateMerchantableDAOmerchantableDAO; privateCartDAOcartDAO; privateEvaluateDAOevaluateDAO; privateOrdersDAOordersDAO; privateRecordDAOrecordDAO; publicRecordDAOgetRecordDAO(){ returnrecordDAO; } publicvoidsetRecordDAO(RecordDAOrecordDAO){ this.recordDAO=recordDAO; } publicOrdersDAOgetOrdersDAO(){ returnordersDAO; } publicvoidsetOrdersDAO(OrdersDAOordersDAO){ this.ordersDAO=ordersDAO; } publicEvaluateDAOgetEvaluateDAO(){ returnevaluateDAO; } publicvoidsetEvaluateDAO(EvaluateDAOevaluateDAO){ this.evaluateDAO=evaluateDAO; } publicTypesDAOgetTypesDAO(){ returntypesDAO; } publicvoidsetTypesDAO(TypesDAOtypesDAO){ this.typesDAO=typesDAO; } publicMerchantableDAOgetMerchantableDAO(){ returnmerchantableDAO; } publicvoidsetMerchantableDAO(MerchantableDAOmerchantableDAO){ this.merchantableDAO=merchantableDAO; } publicCartDAOgetCartDAO(){ returncartDAO; } publicvoidsetCartDAO(CartDAOcartDAO){ this.cartDAO=cartDAO; } publicList<Types>findAllTypes(){ returntypesDAO.findAll(); } publicList<Merchantable>findAllMerchantable(){ returnthis.merchantableDAO.findAll(); } publicMerchantablefindById(Stringid){ returnmerchantableDAO.findById(Integer.parseInt(id)); } publicList<Merchantable>findByType(Stringtype){ Typest=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国安全培训工作课件指导
- 游泳专业大学生就业前景
- 解密人工智能大模型的核心技术
- 现代医患关系发展特点
- 职业规划与前景分析
- 人工智能与未来
- 医患关系类型简述
- 门店销售沟通话术大全
- 光迅科技安全培训课件
- 人工智能学习实战经验分享
- 2026液态氧储罐泄漏事故应急处置方案
- 直肠解剖课件
- 2025天津大学招聘15人备考考试试题及答案解析
- 辽宁省丹东市凤城市2024-2025学年八年级上学期1月期末语文试题
- 2025年山西大地环境投资控股有限公司社会招聘116人备考题库有答案详解
- 2026元旦主题晚会倒计时快闪
- 物理试卷答案浙江省9+1高中联盟2025学年第一学期高三年级期中考试(11.19-11.21)
- 2025年交管12123学法减分考试题附含答案
- 楼宇智能弱电系统培训资料
- 2025抖音流量生态深度解析:算法逻辑、爆流密码与运营实战全指南
- 2025至2030中国警用装备行业项目调研及市场前景预测评估报告
评论
0/150
提交评论