javaweb网上商城系统
网上商城系统项目开发流程数据库分析设计b/s架构web开发的理解web技术回顾练习前端技术加强新技术学习一、网上商城网上商城介绍网上商城类似于现实商店,利用电子商务,达成买卖过程。商城类别英文类别介绍典型代表B2B商家对商家中国制造网B2C商家对顾客销售京东C2C客户和客户淘宝O2O线上线下相结合象屿商城商城常见模块3.1 后台常见功能模块:1、商品管理:商品库存、上货、出货、编辑管理、商品分类
网上商城系统
- 项目开发流程
- 数据库分析设计
- b/s架构web开发的理解
- web技术回顾练习
- 前端技术加强
- 新技术学习
一、网上商城
-
网上商城介绍
网上商城类似于现实商店,利用电子商务,达成买卖过程。
-
商城类别
英文类别 介绍 典型代表 B2B 商家对商家 中国制造网 B2C 商家对顾客销售 京东 C2C 客户和客户 淘宝 O2O 线上线下相结合 象屿商城 -
商城常见模块
3.1 后台常见功能模块:
1、商品管理:商品库存、上货、出货、编辑管理、商品分类管理、商品品牌管理。
2、订单管理:生成购买订单。
3、商品促销:商品促销功能。
4、 支付方式:网上钱包、银行卡(网银在线)、支付宝、微信、货到付款、微信。
5、配送方式:在线选择物流模式,顺丰、邮政、。。。
6、会员模块:集成会员注册,二次购买、提升转化率。
3.2 前端页面功能模块
1、模块风格自定义:通过系统内置引擎,通过后台可视化编辑,设计出客户需求的风格界面。
2、商品多图展示:提供前台多张图片展示。
3、自定义广告模块:内置系统中的广告模块,网站管理员可以通过操作在前端添加各种广告图片。
4、商品展示:通过前端界面,以标准化或者个性化方式展示商品信息。
5、购物车:随时增加、删除商品。
二、软件开发概要
-
周期和阶段
- 起始阶段(Inception):有一个想法
- 细化阶段(Elaboration):计划必要的活动和资源,确定功能设计架构
- 构建阶段(Construction):构建产品,发展最初设想、架构和计划。
- 移交阶段(Translition):移交用户使用,包括:交付、培训、维护。
-
开发流程
2.1 需求分析
1、初步了解
2、深入分析,形成需求文档
3、确认需求
2.2 概要分析
系统基本处理流程、系统组织架构、模块划分、功能分配、接口设计、数据结构、出错设计等。
2.3 详细设计
具体模块所用到的算法、数据结构、类的层次结构及调用关系,各个层次中程序设计考虑。
2.4 编码
2.5 测试
2.6 交付
2.7 验收
2.8 维护
三、EStop项目介绍
- 开发环境
| 分类 | 名称 | 语种 |
|---|---|---|
| 操作系统 | 无要求 | 简体中文 |
| 数据库平台 | mysql | |
| 应用服务器 | tomcat | |
| java开发工具 | idea | |
| 框架 | 无 | |
| 项目名称 |
- 主要功能
| 序号 | 模块名称 | 主要功能 |
|---|---|---|
| 1 | 商品显示模块 | 分页显示所有商品查看 单个商品详细信息搜索商品 |
| 2 | 用户模块 | 新用户注册 用户登录 用户退出 |
| 3 | 购物车模块 | 加入商品 修改商品数量 |
| 4 | 订单模块 | 提交订单 显示订单 用户确认后生成正式订单 查看历史订单 |
| 5 | 支付模块 | 完成支付 |
| 6 | 收货地址 | 管理收货地址 |
| 7 | 后台模块 | 实现商品增删改查 |
-
项目展示
1、导入项目
2、导入数据库
3、运行
4、效果展示
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpnExM1V-1650366514448)(TyporaIMG/网上商城系统/image-20220416125326337.png)]](https://i-blog.csdnimg.cn/blog_migrate/72593ccd97ff585ce1a9c5c963cb005e.png)
四、数据库设计
-
PoweDesigner设计软件介绍
数据库设计软件,开发人员常用数据库建模工具。从概念模型和数据模型两个方面对数据库进行设计。
1.1 概念数据模型cdm
描述实体定义和实体关系定义。用来标识实体的是属性。
1.2 物理数据模型pdm
针对目标数据库管理系统的具体化。
pdm对象:表(table)、表中的列(table column)、主外键(primary 、foreign key)、参照(reference)、索引(index)、试图(view)。
1.3 cdm和pdm比较
cmd:描述存储的实体、属性、实体关系。
pdm:带概念数据库模型进行升级,将实体转化成具有数据库特性的模型!
1.4 数据库设计步骤
1、设计cdm模型
2、生成pdm模型
3、生成dbms脚本
-
用户模块涉及表
2.1 用户表user
字段 类型 主键 约束 备注 id int 是 自增 序号 username varchar(20) not null 用户名称 password varchar(64) not null 密码,使用md5 email varchar(50) not null 邮箱,不可重复 gender char(1) 性别 flag int 状态标记:0未激活;1激活;2无效 role int 角色:0管理员;1会员 code varchar(100) 激活码 2.2 收货地址表address
字段 类型 主键 约束 备注 id int 是 自增 序号 name varchar(30) 地址收件人 phone varchar(14) 收件人手机号 detail varchar(200) 收件人详细地址 state int 默认地址:0-不是;1-是 注意:一个用户多个收货地址:用户-收货地址一对多。
-
商品模块涉及表
3.1类别表(类别实体type)
名字 字段 类型 主键 约束 备注 类别主键 t_id int 是 自增 类别主键 类别名称 t_name varchar(20) 类别名称 类别描述 t_info varchar(200) 类别描述 3.1商品表(商品实体product)
名字 字段 类型 主键 约束 备注 商品主键 p_id int 是 自增 商品唯一标识 商品名称 p_name varchar(50) 商品名称 商品上市时间 p_time date 商品上市时间 商品图片 p_image varchar(100) 商品图片路径 商品价格 p_price decimal(12,2) 商品价格 热门指数 p_state int 商品热门指数 商品描述 p_info varchar(200) 商品描述 注意:一个类别多件商品:类别-商品一对多。
-
购物车模块涉及表
4.1 购物车实体(cart)
名字 字段 类型 主键 约束 备注 购物车主键 c_id int 是 自增 购物车唯一标识 购物车商品的小计 c_count decimal(12,2) 购物车的小计 购物车商品数量 c_num int 购物车商品数量 注意:一个用户多个购物车:用户-购物车一对多;
一个购物车多个商品:购物车-商品一对多。
-
订单模块
5.1 订单实体(orders)
名字 字段 类型 主键 约束 备注 订单编号 o_id varchar(64) 是 自增 订单编号是字符串类型,也是唯一标识 订单金额 o_count decimal(12,2) 订单总金额 订单时间 o_time detetime 订单详细时间 订单支付状态 o_state int 状态:0-未付款;1-付款未发货;2-发货未收货;3-收货待评价;4-订单完成;5-退货状态。 订单收货地址 o_detail varchar(200) 订单收货地址 订单收件人联系电话 o_phone varchar(14) 订单收件人联系方式 订单收件人 o_name varchar(20) 订单收件人姓名 注意:用户-订单多对一;
地址-订单一对多。
5.2 订单项(item)
名字 字段 类型 主键 约束 备注 订单项主键 i_id int 是 自增 订单项唯一标识符 订单项的小计 i_count decimal(12,2) 订单项小计 订单项的数量 i_num int 订单项数量 注意:商品-订单项一对多;
五、项目搭建和准备工作
-
创建项目
-
导入工具类
-
导入jar包

-
导入配置文件
-
导入页面
-
创建baseServlet
-
创建baseServlet必要性
现在我们只要实现一个功能,我们需要创建一个servlet
例如:用户模块(登录、注册、退出登录、激活、发送邮件等功能)
也就是说,我们必须创建一些系列的servlet:UserServlet——》登录功能
UserRegister——》注册功能
总之想要实现一个功能就需要一个servlet
弊端:
- 创建大量servlet!servlet实例——》web容器(tomcat)管理,有大量的servlet实例必然会占用更大的运行内存,会间接拖慢web容器速度。
- servlet它的是service(doget/dopost)方法是一个多线程方法,,一个servlet可以处理很多次请求,可以并发处理!一个servlet能力很强,但是只对应一个功能会浪费。
BaseServlet简化和优化servlet的创建和数量。
-
实现BaseServlet思路
-
为什么servlet只对应一个功能
一个servlet被访问之后只有一个方法被调用,通常我们习惯一个方法中写一个业务逻辑!
一个servlet对应方法对应一个业务功能。
-
分析Baseservlet实现的思路
-
让一个servlet对应多个方法,每个方法实现一个业务逻辑
-
具体实现思路
步骤1:在servlet声明多个处理业务逻辑方法。
步骤2:在每次访问servlet时在路径上添加一个标识,标识用于判断要访问的具体业务逻辑方法。
步骤3:当每次请求到doget/dopost/servlet方法的时候,判断参数的标识,调用对应的业务逻辑方法。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLiQCWNN-1650366559984)(TyporaIMG/网上商城系统/image-20220417083710679.png)]](https://i-blog.csdnimg.cn/blog_migrate/4d6479363f2c9730ec88667f3b476d18.png)
-
-
-
具体BaseServlet实现
-
实现基本的baseservlet
-
优化方法调用
利用标识符的字符串和方法名相同
我们可以利用反射技术,调用对应的执行方法。
避免大量的判断
当有新的方法出现时,也不需要额外添加判断的方法。
service(){
1.获取标识符
2.根据标识符调用对应的逻辑方法
利用反射技术
}
-
优化servlet实现
实现思路:
创建一个BaseServlet类,继承HttpServlet,在BaseServlet中写service方法
在service写获取标识符和反射调用业务逻辑
每个模块对应的Controller只需要集成BaseServlet即可。
HttpServlet——》BaseServlet——》模块的Controller
-
优化返回值问题
每个方法都要进行响应
响应方式固定:转发、 重定向 、返回字符串 、返回字节流
如果每个方法写转发和重定向和返回字符串的语法比较繁琐
我们可以统一在BaseServlet进行处理
操作:步骤1:将方法的返回值改为字符串即可
步骤2:根据约定的内容,添加特殊标志
例如:转发“forword”路径
步骤3:BaseServlet集中处理
执行方法,获取标识符,进行非空判断
截取标识,进行重定向或者写回字符串处理
好处:简化方法响应的处理
注意:没有管返回字节。
返回字节,我们只需要将方法的返回值改成void,只需要使用response对象自己手动操作即可。
-
处理标识符异常情况
/** * BaseServlet用于集中处理方法的调用! * 以及返回值处理! * 以及默认页对应方法! */ public class BaseServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取请求参数(标识符) String methodStr = req.getParameter(Constants.TAG); //2.如果method没有获取到值!我们就跳转到首页!(标识符异常处理) if (methodStr == null && methodStr.equals("")) { methodStr = Constants.INDEX; } //3.反射调用对应的业务逻辑方法 Class clazz = this.getClass(); try { Method method = clazz.getMethod(methodStr, HttpServletRequest.class, HttpServletResponse.class); Object result = method.invoke(this,req,resp); //4.集中处理返回值响应 if (result != null) { //转发 重定向 返回字符 String str = (String) result; if (str.startsWith(Constants.FORWARD)) { //转发 String path = str.substring(str.indexOf(Constants.FLAG) + 1); req.getRequestDispatcher(path).forward(req,resp); }else if (str.startsWith(Constants.REDIRECT)){ //重定向 String path = str.substring(str.indexOf(Constants.FLAG) + 1); resp.sendRedirect(path); }else{ resp.getWriter().println(str); } } } catch (Exception e) { e.printStackTrace(); //controller 和 service dao 有异常都会到此处! req.getSession().setAttribute("msg", "程序异常!请稍后再试!"); resp.sendRedirect("/message.jsp"); } } /** * 当method标识符‘没有值’ 我们默认赋 index 访问每个controller的index方法! * 我们将方法提取到baseservlet中即可! * 默认处理:跳转到程序的首页! * @param req * @param resp * @return * @throws IOException * @throws ServletException */ public String index(HttpServletRequest req,HttpServletResponse resp) throws IOException, ServletException { return Constants.FORWARD+"/index.jsp"; } }
-
-
-
运行项目
六、项目编码
-
用户管理模块
用户模块涉及功能:注册,登录,自动登录,退出登录
1.1 新用户注册
需求编号 Shopping_004 功能名称 新用户注册 功能描述 1. 用户名Ajax认证
2. 注册功能(未激活状态)
3.发送激活邮件
4.账号激活备注 账号需要激活才可以使用(邮箱验证) 1.2 用户登录
1.3 用户退出
-
商品模块
2.1 商品展示
2.2 查看商品详情
-
购物车模块
3.1 加入商品到购物车
3.2 生成订单并显示
-
收货地址管理
4.1 查看地址
-
后台管理
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)