1. 前端用户登录,注册
先来说说前端用户登录,当我们在商城购买商品,在进行结算时,会生成订单,订单不仅包括商品的信息,还包括收货人的信息,比如收货人的姓名,收货地址,联系方式等。在数据库中,地址表与用户表存在对应关系,一个用户可能存在多个地址,因此他们的联系呢就是用户ID,所以再进行结算操作时,首先要判断当前是否有用户登录,若没有,提示正要结算的用户去登录,并跳转回登录页。用户登录这一操作是dao层根据用户名和密码查询并返回一个用户对象,将这个用户对象存放在session中,在进行结算时,就可以通过用户的id查询地址表对应的记录。
好,现在再来说说注册。用户注册实际上就是一个添加用户的操作,需要注意的是,为方便对数据的维护与管理,对用户名的要求一般是具有唯一性的,但是用户在进行注册时是不知道自己现在的注册的用户名是否重复,这时候是展现一个系统具有人性化这一特点时候了,也就是提示信息。注册校验运用到jQuery和ajax,通过jQuery选择器获得输入框的内容,并结合ajax局部刷新数据的功能进行校验。Ajax的工作机制,这么来说吧,在进行注册校验时,只是需要判断一个页面中的部分数据,因此只要将页面中需要校验的数据提交到服务器,不用提交整个页面数据,这也是体现一个性能的问题。这时就需要ajax,客户端发送一个注册的请求,ajax获得请求中需要校验的数据通过get/post提交方式给服务器,服务器根据请求的数据在dao层进行数据操作,比如根据注册名去用户表中查询有无该用户对象,然后返回一条成功的记录到ajax,如果已经存在该用户名,ajax设置提示信息并响应给客户端在注册页面提示用户该用户名已经被注册,请用户重新输入新的用户名。其他的像密码校验通过jQuery进行判断即可。
 
2. 前端页面商品类别展示,商品信息展示
前端商品类别展示需要注意的是商品类别有大类,大类下面还有小类,小类又有自己的子类,其中大类小类是存在数据库中商品类别表里,小类下面的子类是存放在商品信息表中,这两张表的对应关系是:一个大类可能有多个小类,一个小类可能有多个商品。因此实现展示的流程大致上是:先到数据库中查询全部的商品类别,返回一个商品类别的集合,存放在session中,在页面中遍历集合输出商品类别名称,当然集合中存放在着大类小类,他们的区别是通过父id判断的,这么说吧,小类的父id,就是大类的id。好,商品类别展示成功之后接着就是商品了,也就是小类下面的子类。同理,也是要到数据库中查询全部的商品并返回一个是商品集合,商品集合中也存放着大类id,小类id,可根据小类的id定位到该商品是属于哪个小类,然后再根据商品的id到数据库的商品表中找到对应的记录,展示商品名称就OK了
 
3. 前端购物车实现,如何对购物车商品进行增删改查
首先得有个购物车,购物车可以放在session,cookie或者数据库中,以放在session为例。在进行将商品添加到购物车这个操作时,还是先判断当前session中是否有购物车,有就用,没有就创建。在项目中,创建一个购物车的类,在这个类中,有购物车中的商品集合对象,商品的数量以及所有商品的总金额。以上三个都看作是属性,除了属性,还有创建购物车,以及对购物车中商品进行增删改查等方法。接下来着重说明增删改查学要注意的地方。
将商品添加到购物车,首先要判断在购物车是否已存在该商品,判断需要一个标识,默认设置为true,表示当前购物车中没有存在该商品。判断的流程:遍历购物车中商品的集合,新添加的商品id若等于集合中的商品的id,表示已存在该商品,将标识设置为false,这时只需要修改该商品的数量,就是在该商品原有的数量加上新添加的该商品数量就OK了。如果不存在该商品,即判断条件为:之前定义的标识为true,直接将该商品添加到集合就OK了。
接下来就是删除,流程大致是遍历购物车中的商品集合,根据商品的id定位到要删除的商品,然后调用remove()方法就OK了。
来说说修改,实际上就是修改购物车中商品的数量,这个购物车中商品的数量这一属性是商品信息实体类中的一个临时属性,也就是说,在商品信息表中是没有这一字段的,设置这个临时属性是方便计算价格和设置数量的,先来说说修改数量,大致流程也是遍历购物车中商品的集合,根据商品id定位到要修改的商品,然后调用设置数量的set方法,传入修改的数量参数就OK了。再来就是购物车中所有商品的总金额。计算总金额可以看成是单个商品的总价相加,那么呢,可以先在商品信息实体类中计算单个商品总价,因为在商品实体类中存放着商品的单价和数量,获得单个商品的总价后,在购物车类计算总金额的方法中传入单个商品的总价就OK了。
好了,现在购物车也有了,里面也有商品了,最后就是在页面中在展示了,因为购物车是放在session中,所以只需遍历购物车中的集合就能获取购物车中商品的信息了。好了,购物车的实现大致上就是这么些流程。
 
4. 添加订单和订单明细
订单是在进行商品结算后生成的,也就是说,订单里不仅存放收货人的信息,还有购物车中的商品信息,因为你购物车中可能存放着多个商品,因此购物车中的所有商品信息单独做一张表,称之为订单详情表,由此可见,订单与订单详情的关系,是一对多的关系,也就是说,一个订单里有多个订单详情。那么,订单与订单详情之间的关联外键就是订单id,好,关键点来了,我们在设计表的时候,表的id字段都是设为自增,即每添加一条记录主键自动生成,好,现在的订单表中,id是自增的,那我们要进行以下操作,在已登录的前提下结算购物车中的商品,意思就是往订单表添加商品的信息,假设购物车中有多个商品,多条记录,那么,每往订单表中添加一条商品记录,订单id自增,生成一条订单,再添加一条,订单id又自增,又生成一条订单,这就造成一条订单对应一个商品信息,违背我们当初的是设计原理。因此,我们在设计订单表时,订单的id不必设置为自动递增,而是在代码中采用主键回填的方式生成订单id。所以在添加订单详情时,传入采用主键回填方式生成的订单id就可以确保一个订单对应多个订单详情的记录了。
 
5. 后台系统登录检验
一个系统的后台数据是不允许对外公开的,所以必须先登录才能进行操作。首先创建一个登录过滤器类,在类中判断当前session中是否有用户登录,由于过滤器是拦截所有请求的,因此还要设置web.xml中需要拦截的请求的映射路径。设置完成之后,进入后台主页前会先判断是否有用户登录,若没有就跳转到后台登录页。当然,并不是所有用户都能登录,必须是管理员身份的用户才能进入后台。
 
6. 商品类别管理实现
与前端的商品类别展示实现流程差不多,也是要到数据库中查询所有商品,返回一个商品类别集合,放到session中,在jsp页面遍历集合,通过对象.属性名,获取数据库表中的数据,并展示,接着就是一系列的增删改查。
 
7. 用户管理实现
同理的,对用户的管理也是进行增删改查,需要注意的是对用户的冻结与解冻操作。根据用户id修改用户的状态,在jsp页面,通过jQuery的id选择器获取对象,判断并修改用户状态。
8. 商品管理实现
商品的查询和删除操作与往常一致,这里着重说明的是商品的添加和修改。添加商品需要上传照片,因此要用到文件上传下载的知识。文件的上传流程大致为:首先创建一个文件解析工厂,接着通过解析工厂创建一个文件解析器,解析器是用来解析request对象中的信息,就是添加商品jsp页面中,input输入框中的name属性。解析出来的信息放到一个文件对象的集合中,接着遍历集合,获得普通项和文件上传项。首先是普通项,获得普通项的名称和值,存放在map集合中。其次是文件上传项,这里需要注意的是文件上传项除了获取文件的名称之外,还要有一个存放文件的路径。可以创建一个文件对象用于存放文件路径,这里就称之为文件路径对象吧。接下来就是再创建一个文件对象,这个文件对象存放着上传文件的名称和路径对象,最后就是文件的拷贝了,通过遍历的集合对象获得输入流,创建一个文件输出流并传入上传文件对象。因为我们要添加的是一个商品对象,所以还要创建一个新的商品对象,由于map集合中存放普通项,所以通过BeanUtils.populate(goodInfo, map);方法将map对象装到新创建的商品对象中,因为商品的图片对象是属于文件上传项,所以还要设置图片的名称。好,商品的所有属性都封装好了,后面的只要调用业务层的添加方法就OK了。商品的修改与商品添加差不多,需要注意的是在修改商品时,要判断是否要更改图片,之后调用业务层的修改方法就OK了。
 
9. 订单管理实现
在订单这一块,只做了查询和删除。因为订单与订单详情的存在一对多的关系,所以采用连接查询。连接查询获得的数据用一个map集合接收,并设置到session中。其中,map的key存放的是订单对象,而他的value存放的是订单详情的集合。好的,以上就是我总结的商城项目实现过程。