Spring整合Struts 2与Hibernate实现网上订餐系统前台PPT幻灯片课件_第1页
Spring整合Struts 2与Hibernate实现网上订餐系统前台PPT幻灯片课件_第2页
Spring整合Struts 2与Hibernate实现网上订餐系统前台PPT幻灯片课件_第3页
Spring整合Struts 2与Hibernate实现网上订餐系统前台PPT幻灯片课件_第4页
Spring整合Struts 2与Hibernate实现网上订餐系统前台PPT幻灯片课件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第22章Spring整合Struts2与Hibernate实现网上订餐系统前台,1,目录,1,2,需求与系统分析,数据库设计,3,4,项目环境搭建,Spring及Struts2配置文件,5,6,创建实体类和映射文件,创建DAO接口及实现类,7,创建Service接口及实现类,8,开发订餐系统前台各功能模块,2,22.1,需求与系统分析,3,前台即客户端,前台用户进入首页后,可以查看一些形色艳丽的餐品图片。可以通过点击餐品图片来查看餐品的详细信息。在用户看中某一餐品时,可以事先登录,或者注册,然后可以随心订购自己所需要的餐品。可以使用购物车暂存喜爱的餐品,也可以对购物车中的餐品进行管理。最后可以提交订单。系统前台用户的用例图如图22-1所示。,22.1需求与系统分析,4,根据需求分析,订餐系统前台功能如下所示:(1)前台用户注册为会员。(2)登录网上订餐系统浏览餐品。(3)用户根据菜系和餐品名称查询餐品。(4)用户对自己的个人信息进行更改,如送餐地址、联系电话和账户密码等。(5)对暂存入购物车中的餐品进行更改,如选择的数量或者取消选择。(6)当用户确定订餐完毕后,将其提交到服务器,生成订单。根据上述分析,可以得到系统的模块结构,如图22-2所示。,4,22.2,数据库设计,5,根据系统需求,创建了8张表,如下所示:(1)用户信息表(users):用于记录前台用户基本信息。(2)管理员信息表(admin):用于记录管理员基本信息。(3)菜系表(mealseries):用于记录各种菜系。(4)餐品信息表(meal):用于记录餐品信息。(5)订单主表(orders):用于记录订单主要信息。(6)订单子表(orderdts):用于记录订单详细信息。(7)系统功能表(functions):用来记录系统提供的功能信息。(8)权限表(powers):用来记录管理员的权限信息。,5,22.2数据库设计,6,用户信息表(users)的字段说明如表22-1所示。,22.2数据库设计,7,管理员信息表(admin)的字段说明如表22-2所示。,7,22.2数据库设计,8,菜系表(mealseries)的字段说明如表22-3所示。,8,22.2数据库设计,9,餐品信息表(meal)的字段说明如表22-4所示。,9,22.2数据库设计,10,订单主表(orders)的字段说明如表22-5所示。,10,22.2数据库设计,11,订单子表(orderdts)的字段说明如表22-6所示。,11,22.2数据库设计,12,系统功能表(functions)的字段说明如表22-7所示。,12,22.2数据库设计,13,权限表(powers)的字段说明如表22-8所示。,13,22.2数据库设计,14,创建数据表后,设计数据表之间的关系,如图22-3所示。,14,22.3,项目环境搭建,15,在第20章的20.1小节中,以用户登录为例详细介绍了基于XML配置文件使用Spring整合Struts2与Hibernate,读者可参照完成网上订餐系统前台的框架搭建。当然,读者也可以直接将20.1小节创建的项目s2sh复制一份并重新命名为restaurant,再导入到MyEclipse中。为避免部署重复,需要修改项目的部署名称。修改过程如下:在MyEclipse中右击复制后的项目restaurant,依次选择“PropertiesMyEclipseDeploymentAssembly”,将WebContextRoot修改为“restaurant”即可。,15,22.3项目环境搭建,16,订餐系统前台的目录结构如图22-4所示,其中com.restaurant.action包用于存放Action类,com.restaurant.dao包用于存放数据访问层接口,com.restaurant.dao.impl包用于存放数据访问层接口的实现类,com.restaurant.service包用于存放业务逻辑层接口,com.restaurant.service.impl包用于存放业务逻辑层接口的实现类,com.restaurant.entity包用于存放实体类,com.restaurant.filter包用于存放过滤器类,erceptor包用于存放拦截器类。,16,22.4,Spring及Struts2配置文件,17,Spring框架使用的配置文件为applicationContext.xml,Struts2使用的配置文件为struts.xml,这些配置文件的含义在20.1小节中已具体介绍过,由于篇幅,在此不再赘述。,17,22.5,创建实体类和映射文件,18,在com.restaurant.entity包中,依次创建实体类Users.java、Mealseries.java、Meal.java、Orders.java和Orderdts.java。在com.restaurant.entity包中,依次创建上述实体类对应的映射文件Users.hbm.xml、Mealseries.hbm.xml、Meal.hbm.xml、Orders.hbm.xml和Orderdts.hbm.xml。,18,22.6,创建DAO接口及实现类,19,在com.restaurant.dao包中,依次创建数据访问层接口BaseDao.java、UserDAO.java、MealDAO.java、MealSeriesDAO.java、OrdersDAO.java和OrderDtsDAO.java。,19,22.6创建DAO接口及实现类,20,在接口BaseDao.java中声明如下方法:,20,22.6创建DAO接口及实现类,21,在接口UserDAO.java中声明如下方法:,21,22.6创建DAO接口及实现类,22,在接口MealDAO.java中声明如下方法:,22,22.6创建DAO接口及实现类,23,在接口MealSeriesDAO.java中声明如下方法:,23,22.6创建DAO接口及实现类,24,在接口OrdersDAO.java中声明如下方法:,24,22.6创建DAO接口及实现类,25,在接口OrderDtsDAO.java中声明如下方法:,25,22.6创建DAO接口及实现类,26,在com.restaurant.dao包中,依次创建上述接口的实现类BaseDaoImpl.java、UserDAOImpl.java、MealDAOImpl.java、MealSeriesDAOImpl.java、OrdersDAOImpl.java、OrderDtsDAOImpl.java。,26,22.7,创建Service接口及实现类,27,在com.restaurant.service包中,依次创建业务逻辑层接口UserService.java、MealService.java、MealSeriesService.java、OrdersService.java和OrderDtsService.java。,27,22.7创建Service接口及实现类,28,在接口UserService.java中声明如下方法:,28,22.7创建Service接口及实现类,29,在接口MealService.java中声明如下方法:,29,22.7创建Service接口及实现类,30,在接口MealSeriesService.java中声明如下方法:,30,22.7创建Service接口及实现类,31,在接口OrdersService.java中声明如下方法:,31,22.7创建Service接口及实现类,32,在接口OrderDtsService.java中声明如下方法:,32,22.7创建Service接口及实现类,33,在com.restaurant.service.impl包中,依次创建业务接口的实现类UserServiceImpl.java、MealServiceImpl.java、MealSeriesServiceImpl.java、OrdersServiceImpl.java和OrderDtsServiceImpl.java,并实现接口中的方法。,33,22.8,餐品与菜系展示,34,网上订餐系统前台餐品与菜系展示页为show.jsp,如图22-5所示。在show.jsp页面中,最顶端是网站logo、登录和注册链接、餐品搜索栏,下面是餐品分类(菜系),再下面是餐品列表展示,其右侧是餐品浏览历史和销售排行,底端是网站的版权信息。,34,22.8餐品与菜系展示,35,实现餐品与菜系展示页的步骤如下所示:(1)Action开发在项目的com.restaurant.action包中,创建MealAction类,让其继承ActionSupport,并实现RequestAware、ServletRequestAware、SessionAware和ServletResponseAware接口,在该Action中,添加toShowMeal方法,获取指定页码、符合查询条件的餐品列表,再转到餐品显示页show.jsp(2)在Spring配置文件中实例化MealAction类(3)修改项目的struts.xml配置文件,添加toShowMeal的action请求(4)编写页面在show.jsp页面中,编辑与餐品展示相关的代码,编写与餐品分类(菜系)显示相关的代码,设置分页超链接。(5)部署项目,启动Tomcat,在浏览器中输入“http:/localhost:8080/restaurant/toShowMeal”,测试程序。,35,22.9,查询餐品,36,在餐品与菜系展示页show.jsp中,使用include指令包含了餐品查询页search.jsp。在餐品查询页中,输入餐品名称,单击“搜索”按钮,会将请求发送到“toShowMeal”,即执行MealAction类中的toShowMeal方法,将餐品名称作为查询条件传递过去,并通过隐藏表单域保存用户选择过的菜系,可根据餐品名称和菜系组合查询。在餐品分类(菜系)显示中,每个菜系都设置了超链接,单击该超链接,也将请求发送到“toShowMeal”,并将菜系编号作为查询条件传递到MealAction类中的toShowMeal方法。,36,22.10,查看餐品详情,37,在show.jsp页的餐品列表显示部分,餐品图片设置了超链接。单击餐品图片,即可跳转至该餐品的详情页,如图22-8所示。,37,22.10查看餐品详情,38,实现餐品详情显示的步骤如下所示:(1)Action开发在com.restaurant.action包中的MealAction类中,添加toShowDetails()方法,再转到餐品详情页details.jsp。(2)修改Struts2配置文件在struts.xml配置文件中,添加toShowDetails的action请求。(3)编写页面在餐品详情页中,编写显示餐品信息的代码。,38,22.11,用户登录与注册,39,登录与注册是网上订餐系统不可或缺的功能,当用户注册为系统的用户,并成功登录到系统,确定为本网站合法用户后,可进行网站的浏览,对购物车、订单进行操作;如果没有登录,用户只能浏览餐品,不能进行餐品的交易。,39,22.11.1用户登录,40,网上订餐系统前台登录页为login.jsp,如图22-9所示。,40,22.11.1用户登录,41,网上订餐系统前台登录页为login.jsp,如图22-9所示。,41,22.11.1用户登录,42,实现用户登录的过程如下所示:(1)Action开发在com.restaurant.action包中,创建UserAction类,继承自ActionSupport类,并实现RequestAware、SessionAware和ServletResponseAware接口。在UserAction类中添加一个doLogin()方法,用于处理登录验证请求。(2)在Spring配置文件中定义UserAction,并为其中属性userService注入值。(3)在Struts2配置文件中,为UserAction类中的doLogin()方法配置映射。在登录表单中,输入登录名和密码,单击“登录”图片按钮,触发该按钮的onclick事件,处理该事件的函数为submitLogin,代码如下所示:functionsubmitLogin()document.getElementsByName(loginForm)0.action=doLogin;document.getElementsByName(loginForm)0.submit();在submitLogin函数中,将请求提交到“doLogin”,即执行UserAction类中的doLogin方法。,42,22.11.2用户注册,43,在登录页中,单击“立即注册”图片按钮,或者单击页面顶部的“注册”超链接,打开用户注册页reg.jsp,如图22-10所示。,43,22.11.2用户注册,44,实现用户注册的过程如下所示:(1)Action开发在UserAction类中添加一个register()方法,用于处理登录注册请求。(2)在Struts2配置文件中,为UserAction类中的register()方法配置映射。注册表单的校验使用了Struts2的验证框架,为此在com.restaurant.action包中,创建了文件UserAction-register-validation.xml,对登录名、真实姓名、邮箱、手机号码、通讯地址、密码和确认密码进行了校验。在注册页面中,填写注册信息后,单击“立即注册”图片按钮,会触发该按钮的onclick事件,处理该事件的函数为submitReg,代码如下所示:functionsubmitReg()document.getElementsByName(regForm)0.action=register;document.getElementsByName(regForm)0.submit();在submitReg函数中,将请求提交到“register”,即执行UserAction类中的register方法。,44,22.12,购物车功能,45,购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而已。用户可以在订餐系统网站中,点击添加至购物车时,该餐品就保存到购物车中,可以多次选购,最后将放在购物车中的所有餐品统一提交订单,这也是尽量让客户体验到现实生活中购物的感觉,购物车的功能包括以下几项:(1)把餐品添加到购物车,即订购;(2)删除购物车中已选购的餐品;(3)修改购物车中某个餐品的订购数量;(4)清空购物车;(5)显示购物车中餐品清单及数量、价格。,45,22.12购物车功能,46,购物车的实现思路如下:(1)选中餐品并放进购物车时进入购物车页面。(2)进入购物车页面时,判断购物车是否已经存在。如果购物车不存在,添加第一件餐品时,初始化购物车,并把餐品数据放进HashMap,然后在保存在session中。如果购物车已经存在,则把购物车数据从存在的购物车数据取出并放在HashMap中,并将新的餐品数据插入HashMap中,后再存入session。(3)继续购物,选中新的餐品放进购物车,进入第(2)步。在餐品与分类展示页的餐品列表中,每件餐品显示区域的右下角,都有一个“购物车”的图片超链接,超链接的设置如下:在餐品详情页中,也有一个“加入购物车”图片超链接,超链接的设置如下:,46,22.12购物车功能,47,用户登录后,单击“购物车”图片超链接,可将该餐品放入购物车暂存。用户购物车显示页效果,如图22-11所示。,47,22.12购物车功能,48,1.实现餐品放入购物车功能。购物车实现过程中使用了Map来保存顾客购买的商品,Meal、CartItemBean、HashMap和session之间的关系如图22-12所示。,由餐品信息类(Meal.java)和购买的数量构成了购物车内商品信息的描述类(CartItemBean.java),再将CartItemBean类的对象存放到HashMap中,其中HashMap对象的键是餐品的编号,值是CartItemBean类对象。最后将包含了购买商品信息的HashMap对象保存到session中。这样,就可以操作session对象中的数据,来实现不同顾客的购买功能。,48,22.12购物车功能,49,具体步骤如下所示:(1)在项目com.restaurant.entity包中,创建购物车内餐品信息的描述类CartItemBean.java。(2)在com.restaurant.action包中,创建名为CartAction的Action,让其继承ActionSupport类,并实现SessionAware接口。在CartAction类中添加addtoshopcart()方法,实现添加商品到购物车。在CartAction类中,定义了两个属性mealId和quantity,分别用来封装表单传递来的餐品编号mealId参数值和餐品数量quantity参数值。(3)在Spring配置文件中定义CartAction,为其属性mealService注入值。(4)在Struts2配置文件中为CartAction类的addtoshopcart()方法配置映射。(5)编辑购物车显示页shopCart.jsp。(6)部署项目,运行程序,添加商品至购物车,用户没有登录,也能够添加,为阻止未登录用户直接通过addtoshopcart()方法访问购物车,可以使用登录验证拦截器“loginCheck”,这样在需要添加验证的地方,添加该验证拦截器即可。,49,22.12购物车功能,50,设置拦截器过程如下所示:(1)首先,在src目录下新建erceptor的包,在该包中创建名为AuthorityInterceptor的类,该类继承自AbstractInterceptor,实现intercept(ActionInvocationinvocation)方法。(2)然后,在struts.xml文件中定义拦截器,定义全局变量,并在相应需要实现登录验证的Action中,引用该拦截器。(3)重新部署项目,运行程序,当用户未登录,添加商品至购物车时,再次跳转回首页。,50,22.12购物车功能,51,2.修改购物车中餐品数量在shopCart.jsp页面中,在餐品数量文本框中输入新的数量,文本框内容发生变化后,可直接修改购物车中餐品数量,实现修改购物车中餐品数量流程如下:(1)首先,在CartAction类中添加updateSelectedQuantity()方法,用以更改购物车中餐品数量。(2)然后,在Struts2配置文件中为CartAction类的updateSelectedQuantity()方法配置映射。(3)在shopCart.jsp页面中,餐品数量文本框的设置如下所示:当餐品数量文本框内容发生变化时,会触发onchange事件,将请求提交到“updateSelectedQuantity”,即执行CartAction类的updateSelectedQuantity()方法,并传递两个参数,mealId参数为要修改数量的餐品编号,quantity参数为要修改的数量。updateSelectedQuantity()方法根据这两个参数值,更新购物车中相应餐品的数量。,51,22.12购物车功能,52,3.删除购物车中餐品在shopCart.jsp页面的购物车中,每条餐品记录后面都有一个“删除”的叉号图片超链接,其设置如下所示:实现删除购物车中餐品的流程如下所示:(1)首先,在CartAction类中添加方法deleteSelectedMeal()。(2)然后,在Struts2配置文件中为CartAction类的deleteSelectedMeal()方法配置映射。单击“删除”的叉号图片超链接后,将请求提交到“deleteSelectedMeal”,即执行CartAction类中的deleteSelectedMeal()方法,并传递一个参数mealId。deleteSelectedMeal()方法中根据参数mealId值,从Map中移除相应的商品对象。,52,22.12购物车功能,53,4.清空购物车在shopCart.jsp页面下方,有一个“清空购物车”的图片超链接,其设置如下所示:实现清空购物车的流程如下所示:(1)首先,在CartAction类中添加方法clearCart(),清除购物车中全部餐品。(2)然后,在Struts2配置文件中为CartAction的clearCart()方法配置映射。单击“清空购物车”的图片超链接后,将请求提交到“clearCart”,即执行CartAction类中的clearCart()方法,从Map中移除所有餐品对象。,53,22.13,订单功能,54,订餐系统客户对订单的处理功能包括:生成订单、查看我的订单及订单明细、删除订单。,54,22.13.1生成订单,55,购物车只是暂时用来存储客户的购买信息,为了长久保存,需要将购物车中的内容存入订单信息表(订单主表)和订单明细表(订单子表)中。在shopCart.jsp页面购物车下方,有“确认提交订单”的图片超链接,其设置如下所示:单击该按钮后,将请求提交到“addOrders”,即执行OrderAction类中的addOrders()方法。,55,22.13.1生成订单,56,实现将购物车中的餐品提交生成订单的步骤如下所示:(1)Action开发在com.restaurant.action包中,创建OrdersAction类,继承自ActionSupport类,并实现RequestAware和SessionAware接口。在OrdersAction类中添加一个addOrders()方法,用于处理生成订单请求。(2)在Spring配置文件中定义OrdersAction,并为其中属性ordersService和orderDtsService注入值。(3)在Struts2配置文件中为OrdersAction类中的addOrders()方法配置映射。在图22-11所示的购物车显示页shopCart.jsp中,单击“确认提交订单”的图片超链接,查看数据库中订单信息表orders和订单明细表orderdts中的记录。,56,22.13.2查看“我的订单”,57,用户登录成功后,在页面右上角,有一个“我的订单”超链接,其设置如下所示:我的订单单击“我的订单”超链接,可查看登录用户提交的订单列表,如图22-15所示。单击“我的订单”超链接后,将请求发送到“toMyOrders”,即执行OrdersAction类中的toMyOrders方法。,57,22.13.2查看“我的订单”,58,实现查看“我的订单”功能的步骤如下所示:(1)Action开发在OrdersAction类中添加toMyOrders()方法,获取指定用户的订单列表,再转到我的订单页myorders.jsp。(2)配置Struts2映射文件在Struts2配置文件中,为OrdersAction类中的toMyOrders()方法配置映射。(3)我的订单页myorders.jsp我的订单页myorders.jsp的主体结构与购物车页shopCart.jsp的类似,在myorders.jsp页面中显示我的订单列表。(4)在myorders.jsp页面中,设置分页的超链接。,58,22.13.3查看订单明细,59,在图22-15所示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论