SSH酒店点菜系统笔记
我做的是一个酒店点菜系统,其中包括用户表,VIP表,前台管理表,后台管理表,菜表,汤表,酒表,点心表,菜单表共九个表,用户分为普通用户和VIP,后者可以给予优惠。用户表和VIP表要和菜单表关联为外键,用来给每一个用户添加一份菜单;用户每次注册成功后,才能和VIP登陆,成功后进入点菜模块,其中的数据均从数据库中获取。
建一个主页面,中间四个超链接,普通消费,会员消费,前台登陆,后台登陆,分别给予四个用户登陆。只有普通用户需要注册。点菜页面,用的是复选框,提交后菜单信息放入数据库。用户最终进入一个菜单显示页面,其中有客户所点的菜,数量,消费额,打折后总额。如需接着点菜,则点返回登陆页面接着点菜。会员消费没有注册,其他和普通用户没有区别,会给予适当的打折优惠并增加积分 。前台管理员根据房间号寻找帐单,负责给客户结帐。后台管理员,主要是老板,来对菜、VIP信息增删改查,日帐单、月帐单、年帐单查询,还可以对自己的登陆信息进行修改,或者增加新的用户。
后台代码部分,出现过很多问题。在写的过程中再一一叙述。首先建一个WEB工程,写入struts.xml,给web.xml中加入过滤器(dispatcher),加入监听器(org.springframework.web.context.ContextLoaderListener),先后加入hibernate和spring支持,其中部分spring功能在hibernate中已添加,故不用重复添加。我用MYSQL数据库,把所有数据放入solid数据库中,然后反向工程,生成相应的java文件和相应的hbm.xml文件,集中放在一个model包中。建一个dao包集中处理jsp页面与数据库之间的业务,建一个action包中集中处理jsp页面获取判断的业务。
以用户注册登陆为例。dao包中先写一个接口,其中写入一个无方法体的方法,然后再写一个java文件接口实现它,里面写相应的获取、验证信息的方法,用的最重要的一条语句是Query query=this.getHibernateTemplate().getSessionFactory().openSession().createQuery("from Member where mname=? and mpwd=?");类似语句,然后用query.setString()方法获取jsp页面信息,用一个List集合来把数据库中的信息查询到,然后两者作比较,如果相应则返回一个值,不同则返回另一个值。注册同样如此,只不过它是验证数据库中是否存在此用户名。
在action包中写入一个login.java文件,其中要写入登陆信息所需字段,在souce中写入set,get方法,再写入excute执行方法。用model中的java文件声明一个登陆者,用dao中的DAO接口文件再声明一个dao,用来处理登陆信息。其中还有菜,酒,点心,汤DAO声明的dao,并用List写相应的这些吃的东西的list用选择的东西全放里面,集中处理,来把数据库中菜的信息通过登陆带入!
总体来说,是这样实现的,使用三层架构,表现层,业务层和数据层。
表现层,主要使用jsp页面来完成。实现jsp和struts之间交互。
业务层:由struts完成。通过它来处理jsp页面和hibernate数据层。
数据层:由hibernate完成。通过它,来实现struts和数据层信息的交互。
HttpServletRequest请求到达ActionMapper,然后由过FilterDispatcher转发给ActionProxy,这时候,会调用struts.xml来比照相应信息,转发给拦截器,由拦截器发给对应的Action,由Action来调用相应的dao类实现,获得结果,返回给拦截器,由HttpServletResponse转发出去。注意:拦截器1,2,3,经过Action后,调用顺序为3,2,1