商城项目之简述

 这是最近学完servlet后做的第一个小项目,大概总结一下,前面写用户模块的时候总感觉不得劲。所以先将这个项目的大体的东西写一下吧,后续如果想起来什么还会再加进去。

一、设计思想

 这个项目,用到的设计思想就是mvc的一种设计模式,简单介绍一下mvc的发展历史吧。。写的不全

 1、刚开始人们在使用servlet的时候就发现了一些不好的地方,servlet在向前端网页做输出操作的时候过于复杂,虽然可以使用response.getwriter()的方式去写,但这样一句一句的写,太复杂了。所以sun公司就推出了一种动态向

网页输出的技术:jsp。

 2、随着jsp的推出,servlet就被人们遗忘了,因为jsp既可以在html中写java代码,也可以写html的标签。有着

servlet无法比拟的优点,所以人们就开始用jsp做开发。

 3、这样的情况持续了一段时间后,人们又发现jsp虽然有着这样那样的好处,但在封装数据方面还差点意思。所以

人们就想到可以使用JavaBean的方式来封装数据,使用jsp来传输数据,这样就看起来天衣无缝了。这个被也被称为

mvc设计模式的model1.

 4、而又过了一段时间,人们又发现了一些不好的地方,使用jsp和JavaBean来开发的程序扩展起来很不方便,因为

太乱了。任何java代码都可以来取数据,放数据,很不利于程序的扩展性。这时候,我们的servlet终于被人们想起来了,

它在jsp与JavaBean中间可以充当一个控制器的效果,这也被称为mvc的model2.

 m:model 用来封装数据的JavaBean,后面讲到的service和dao层其实也被称为m

v:view用于数据的展示,其实就是jsp所做的工作

c:就是控制器,在v 及 m之间。用来处理请求以及请求的转发

以上就是对mvc设计模式的大概介绍:

二、目录结构

 而这个项目也是用到了这种设计模式,将所有前端传过来的http请求通过servlet的处理,再转发到前端,或者

传到service层,再传到dao层做数据的增删改查。


 这个就是这个项目中的包结构,没有很复杂。。。

三、BaseServlet模板类

 刚开始就碰到了一个问题,如果一次请求就建立一个servlet来处理,那么服务器里的servlet就会很多,所占用的内存也会很大

这里为了避免这个问题,我们会建立一个BaseServlet来做所有servlet的父类,来减少服务器内servlet的数量。BaseServelt的代码

也很简单。

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		try {
			req.setCharacterEncoding("utf-8");
			resp.setContentType("text/html;charset=utf-8");
			//使用前端发送请求时所携带的参数来确定请求的模块
			String methodName = req.getParameter("method");
			resp.setContentType("text/html;charset=utf-8");
			if(methodName == null || "".equals(methodName)){
				resp.getWriter().write("方法参数为空");
				return;
			}
			//使用反射方式判断请求的模块
			Class clazz = this.getClass();
			//获取子类处理请求的方法
			Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			//若处理请求的方法中需要进行转发或重定向,则可以返回路径
			String path = (String) method.invoke(this, req,resp);
			if(path!=null){
				if(path.startsWith(req.getContextPath()))
					resp.sendRedirect(path);
				else{
					req.getRequestDispatcher(path).forward(req, resp);
				}
					
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
这段代码中比较难以理解的可能就下面这句:

//若处理请求的方法中需要进行转发或重定向,则可以返回路径
 String path = (String) method.invoke(this, req,resp);
 这个方法在反射中的Method类中,用来执行当前method对象代表的方法,而方法参数需要传递的是方法所在类的对象以及执行方法

所需要的参数。而这里的this就是指继承BaseServlet类的子类的对象。其实换一种思路想就很好理解了,该方法最终在子类中执行,那么,this

指代当前类的对象也是理所当然的。如果把这段代码copy到子类中,这个this就很好理解了。

 编写BaseServlet类这种方式也被称为是模板设计模式,这里先简单提一个,以后再做系统的总结。

四、数据模型的分析
这里大概总结一下这个项目中的数据模型,就是建表的一个概述。
1、首先,用户表:
 用户id、 用户名、 密码、昵称、邮箱、电话、生日、地址、性别、状态及激活码
 字段都比较简单,没必要做特别说明
2、商品分类表:
 分类id及分类名称。也很简单
3、商品表:
  商品id、商品名称、市场价及商城价、图片路径、上架时间、是否热门、简介、商品状态及分类id
 这里由于商品表与分类表有多对一的关系,所以在多方(商品表)中加一个外键,用来记录商品所属分类信息。
 4、订单表:
  订单id、订单名称、订单总价、订单状态、送货地址、收货人姓名、收货人电话、用户id、支付方式
 这里订单状态:1 未付款 、2 未发货、 3 未签收、4 已收货
 另一个支付方式是我自己加的,也没什么必要
 这里因为订单表与用户表也是一对多的关系,所以加了一个外键用户id来表示这种关系
5、购物项表,由于订单表与商品表为多对多之间的关系,所以建了一个中间表来描述这种关系
 购物项id(可以不写)、商品数量、小计、商品id、订单id
商品数量与小计均为描述每一购物项的属性。
 6、后期为了持久化购物车的数据,可能还会建立一个购物车中购物项表,这里也列一下
  用户id、商品id、商品数量、创建时间、小计
 购物车逻辑后面会讲到。
 以上就是全部的表了。都是一些基本表,没什么逻辑可言,重要的是需要清楚这中间各个表中的关系。
好了,以上就是这个项目的一些准备工作。没什么特别重要或者难以理解的,只要清楚流程即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值