从上周开始,就开始回顾了一下这个项目,因为当时自己做的时候,时间不够充裕,而且也没有多少求知欲,所以这个项目在当时就是一知半解。
需求分析,本次所做的项目名为电子书城项目,那么我们首先要探索客户的需求,而且因为此次项目面向的使用者就是用户自己,所以全部项目中只有一个用户角色,就是用户本人。
注册登录功能,我们知道每一个门户网站都少不了这两个功能。用户要使用一个网站的绝大部分功能,都必须经过注册和登录。那么在这里,问题就产生了,比如说:当前用户直接访问网站,看到的肯定是一个主页面或者欢迎页面,而且是没有任何有关于用户本人信息的一个网页,那么我们就在想,这里必须要做一个点击按钮或者其他形式的本文或者图标确保用户可以看到登录和注册的功能。好了,现在比如说,有两个a标签指向了登录页面和注册页面,那么用户就可以通过点击来进行一个跳转。
假如说现在用户没有账号,那么首先应该进行的一个操作就是去注册获得一个账号,那么在这里就有问题了,我们知道的是,数据库中有一张用户表,那么我们在其中有一个主键列,因为本次选用的数据库是MySQL,所以主键自动增长,我们的id是肯定不会重复的,但是,用户名可以重复吗?答案是否定的,账户的名称必须不能重复,怎么实现这一点呢?其实注册本质上就是一个插入操作,那么我们可以在插入数据库之前判断一下这个用户名,也即输入的应户名有没有在数据库中查到,如果能够查到相关信息,那么就代表用户名已经存在,当然这时候就要予以驳回,并且提示用户用户名已经被占用。好了,这是一个挺不错的解决方案,但是问题又来了,如果用户忘记输入用户名或者密码酒店及注册?我们肯定要求用户要输入合法的数据才会进行业务的走通。那么我们可以在前台页面中做一个js脚本,在浏览器中判断用户名或者密码是否为空,如果为空,就不进行提交,而是提示用户用户名或者密码不能为空。
现在,经过注册,用户已经获得一个合法的账号,我们便可以进行登录,那么注册成功之后就应该将页面跳转至登陆页面,然后进行登录,如果你的用户名和密码出现了问题,比如是空的或者密码是错的,那么就需要继续跳回登陆页面重新登录。
好了,到目前为止,你已经登陆成功,你现在看到了主页面,也就是类似于某宝的主页面,你可以在这里看到很多上平,那我们就该想一想,这些商品是直接写死在页面上的吗,其实不是,是当服务器一启动,就应该从数据库中加载出来的。于是我们在想,这里是不是要进行一个服务器一经启动便会触发的事件呀,于是我们想到了监听器,写一个监听器,在项目启动的时候就从数据库中加载所有的书籍并且将其存放到整个项目的作用域中去;还有一点要注意的是:我么可以看到很多分类信息,这些分类也并不是写死的,而是从数据库中动态查询出来的,而且我们最为熟知的是,一个大分类下面还会有很多小的分类,比如说在鱼这个分类下还有鲤鱼、草鱼等分类,那么我们想,既然都是分类信息,那就是对应一个实体类,在数据库表中对应的是一张表,那怎么做到分类的关联关系呢?我们可以在分类这个类里面,写一个集合,用于存储二级分类,集合的泛型就是分类自己本身,而在数据库表中我们可以用自连接来进行对应和查询。
到目前为止,我们始终没有查看某一个详细的商品信息,那必要的一个功能就是可以点击查看详情,那么在点击某一个商品之后,要机型一个页面的跳转,跳转到一个类似于detail.jsp的页面,但是问题又来了,我们跳转到的这个页面应该展示的是我们所点击的商品的信息,而不是写死某一个商品的信息,怎么做到这一点呢?我们可以利用一个servlet,在进行跳转之前,先从数据库中查找到关于这个商品的所有信息,然后存入一次请求中去,这个时候我们就需要一个关于这个商品的id来进行一个查询了,那么携带id参数是很简单的,我们可以拼接url也可以进行表单提交都可以实现。
好了,现在已经展示了我们点击的某一个商品的详情页,我们可以将其加入购物车吧,那么点击插入购物车,我们首先要将用户的购物车从数据库中查询出来,然后就可以添加书籍了,如果我们要添加的书籍已经在购物车中存在了,那么我们就要做的是一个数量的更新操作,如果要插入的书籍还没有在购物车中存在,那么要进行的就是一个插入操作,并且是可以携带插入的数量的。
现在购物车中已经有了我们想要购买的书籍了,该怎么办?应该点击去结算吧,那我们点击结算按钮的时候,就会跳转到一个订单确认页面,我们联想平时在某宝购物的时候,这个订单确认页的功能就是加载你的收货地址,然后让你选中某一个收获地址,并且填写清楚联系电话就可以提交订单了,在这里,我们就需要做一个加载数据库中已经存在的收货地址的功能,是什么时候加载呢?应该是点击去结算按钮的时候就去查询,所以我们在相应的servlet里面就可以利用关于收货地址的service层实现查询,并将其结果存储在session会话中去。
10.当用户选择完收货地址之后,就可以进行提交了,那么点击提交按钮的时候,我们就应该往数据库中插入两个信息,一个是订单信息,另一个是订单项信息,怎么理解这两个概念呢?这就好比是你去餐厅吃饭,你吃饭总得点餐吧,而前台会给你生成一张小票,这张小票就是你的订单,这个小票上的每一个菜品就是你的订单项,所以订单与订单项是一对多的关系,我们说了,一对多的关系,应该将维护关系的任务交给多的一方,在这里就是订单项,也就是咋爱订单项的表中可以插入一个外键,这个外键就是订单的主键,在相应的类关系中,也就是订单项类中有一个订单属性。还有我们应该明白的是:要进行保存订单和订单项,一点是要先保存订单,然后再保存订单项,也就是说,先保存被关联主键的表,然后再保存外键的表。好了,现在到最后一个模块了,那就是提交订单之后,应该怎么跳转,应该是跳转到提交成功的页面吧,然后我们可以点击查看订单这样一个选项,然后就可以看到已经提交的订单了。
关于这次项目,还有很多技术点没有写到,比如用的是三层架构思想,使用的持久层框架是mybatis,页面使用的jsp,日志模块使用的是log4j。
关于电子书城项目的一些总结点
版权声明:本文为haonan_code原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。