图书商城
1. 功能分析
1、用户注册
2、用户登录
3、添加商品(CURD)
4、商品查看– 列表查询
5、商品详情页面
6、将商品添加购物车
7、查看购物车
8、修改购物车
9、生成订单
10、订单查看(取消)
11、在线支付
12.下载销售榜单
游客(未登录): 注册、登陆、商品查看
商城注册用户 : 商品查看、添加商品到购物车、购物车管理、生成订单、订单管理、在线支付
管理员 : 添加商品、商品管理、查看订单 、榜单查看(导出)
- 系统设计
1技术选型 (系统架构)
JSTL + JSP + Servlet + JavaBean + BeanUtils + FileUpload + JavaMail + DBUtils(JDBC) + C3P0 + MySQL + MyEclipse10+ Tomcat7.0 + JDK6 + Windows
MVC 模式
JavaEE 三层结构 web层 service层 dao层
DAO 模式
2数据库设计
系统存在以下实体:用户、商品、订单、购物车
购物车不放入数据库 (Session或者Cookie实现)
用户表
create table users (
id int primary key auto_increment,
username varchar(40),
password varchar(100),
nickname varchar(40),
email varchar(100),
role varchar(100) ,
state int ,
activecode varchar(100),
updatetime timestamp );
商品表
create table products(
id varchar(100) primary key ,
name varchar(40),
price double,
category varchar(40),
pnum int ,
imgurl varchar(100),
description varchar(255));
订单表
create table orders(
id varchar(100) primary key,
money double,
receiverinfo varchar(255),
paystate int,
ordertime timestamp,
user_id int ,
foreign key(user_id) references users(id)
);
用户与订单之间存在 一对多关系 : 在多方添加一方主键作为外键
订单和商品之间存在 多对多关系 : 创建第三张关系表,引入两张表主键作为外键 (联合主键)
订单项
create table orderitem(
order_id varchar(100),
product_id varchar(100),
buynum int ,
primary key(order_id,product_id),
foreign key(order_id) references orders(id),
foreign key(product_id) references products(id)
);
设置数据库环境
数据库 :create database estoresystem
3 工程环境搭建和网站部署
1) 导入jar包
导入mysql驱动 mysql driver / mysql-connector-java-5.0.8-bin.jar
导入c3p0 c3p0/c3p0-0.9.1.2.jar 将c3p0-config.xml 复制src下 将DataSourceUtils复制 cn.itcast.estore.utils —– 配置c3p0-config.xml数据库连接参数
导入dbutils apache commons\dbutils\commons-dbutils-1.4.jar
导入beanutils commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar
导入fileupload commons-fileupload-1.2.1.jar commons-io-1.4.jar
导入javamail mail.jar
导入jstl jstl.jar standard.jar
2) 建立package结构 按照JavaEE 三层结构
cn.itcast.estore.web.servlet
cn.itcast.estore.web.filter
cn.itcast.estore.web.listener
cn.itcast.estore.service
cn.itcast.estore.dao
cn.itcast.estore.domain
cn.itcast.estore.utils
3) domain类编写
4) 工程发布
将bookEstore项目配置虚拟主机,以顶级域名方式进行发布
1) 将工程根目录 bookEstore目录 配置虚拟主机目录 —- 配置conf/server.xml
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
2) 将工程目录下WebRoot 目录,配置缺省web应用
<Host name="www.estore.com" appBase=" myeclipse下的工程路径"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
3) 将www.estore.com 虚拟主机配置缺省虚拟主机 —– 能够用ip直接访问主机
4) 修改本机域名解析文件 hosts —- c:\windows\system32\drivers\etc
添加 127.0.0.1 www.bookEstore.com
- 功能实现
1用户注册
1、 功能一: 用户注册 (技术点:验证码技术 、激活邮件技术)
1) 一次性验证码
原理:在生成验证码Servlet程序中,将生成验证码保存Session中,用户提交验证码 与 保存在Session验证码进行比较,如果相同,请求合法
2) 注册表单 JS校验
考虑JS校验是否可以抽取成框架
3) 处理form乱码问题 —- 通用get post 乱码过滤器
4) 密码 MD5 加密
5) 激活邮件发送
6) 配置通用错误处理页面web.xml
500
/500.jsp
404
/404.jsp
500.jsp 显示错误的信息
404.jsp 自动刷新跳转回主页面
2用户登录
原理:用户输入正确用户名和密码,登陆成功,用户信息将会被保存Session对象中。 —— 记住用户名和密码 、自动登陆
1) 登陆表单中,添加记住用户名 和 自动登陆功能
2) 登陆过程中判断 账户是否激活
3) 在login.jsp 显示记住用户名
在username 的input项中添加 value=”${cookie.username.value}”
在勾选自动登陆 checkbox 添加
4) 登陆后注销功能
注销Session
3用户自动登录过滤器
自动登陆功能 对系统所有页面有效 (例如访问index.jsp list_product.jsp info_product.jsp 这些页面在访问时都将执行自动登陆 )
- 对于登陆相关页面不会执行自动登陆逻辑 (login.jsp 、LoginServlet 、InvalidateServlet )
1) 判断该请求页面是否需要自动登陆
2) 是否已经登陆
3) 是否含有自动登陆cookie
4) 自动登陆
5) 在LoginServlet 添加对于没有勾选记住用户名和自动登陆 处理代码 !!!!!!!
6) 在退出功能 InvalidateServlet 清除自动登陆信息
4商品添加
文件上传三个注意事项
1) input输入框 必须有name属性
2) 表单form 必须post提交方式
3) 设置form的enctype 为 multipart/form-data
表单提交时,校验分为两种 : 客户端校验 、服务器端校验 —— 只有服务器端校验才能确保数据准确
商品图片上传到服务器端后,保存在哪个目录 ??? 必须直接在WebRoot下及其除WEB-INF、META-INF 子目录外
一般情况下,一张表对应Domain类 — DAO类 —- Service类
5商品列表查看
列表中显示原图,因为原图比较大,页面加载非常缓慢 ,页面布局不会很美观 —————- 缩略图
- Java中通过图形界面技术,生成小图
在Product类中添加 getImgurl_s方法,用来获取缩略图路径
6商品详细信息查看
通过在列表中点击 商品图片或者商品名称 进入详情查看页面
7添加商品到购物车
购物车对象,不保存在数据库中,使用Session来保存用户购物车数据
保存购物车对象 Map