一、搭建环境
1.导入原型:复制原型中的src、webRoot。
用户模块
分类模块
图书模块
购物车模块
订单模块
二、功能分析
前台
1)用户模块:
注册、 激活 、登录 、退出
2)分类模块:
查看所有分类
3)图书模块:
查询所有图书、 分类查询图书、 查询图书详细(按id查)
4)购物车模块:
添加购物车条目、 清空所有条目、 删除指定条目 、 我的购物车(按用户查询购物车)
5)订单模块:
生成订单
我的订单(按用户查询订单)
按id查询订单
确认收货
付款功能(只是跳转到银行页面)
付款回调功能(由银行来调用我们这个方法,表示用户已经付款成功)
后台:
1)分类管理:
添加分类 、 查看所有分类、 删除分类、 修改分类
2)图书管理(我的)
查看所有图书、 删除图书 、修改图书、 添加图书(上传图片)
三、 框架的搭建
3.1 导包
1)数据库:
mysql驱动
c3p0(jar包和配置文件)
dbutils
itcast-tools
commons-beanutils
commons-logging
javamail
2)mail.jar
activation.jar
3)上传
commons-fileupload
commons-io
4)校验-ajax
json-lib
3.2 创建package
根:ywnxbx.bookstore
user
domain
dao
service
web.servlet
category
domain
dao
service
web.servlet
book
domain
dao
service
web.servlet
cart
domain
web.servlet
order
domain
dao
service
web.servlet
3.3 表
tb_user
category
book
orders
orderitem
用户模块
1 用户模块的相关类创建
domain:User
dao:UserDao
service:UserDao
web.servlet:UserServlet
2 用户注册
流程:
/jsps/user/regist.jsp
---> UserServlet#regist()
---> msg.jsp
页面:
regist.jsp
表面页面,请求UserServlet#regist()方法
参数:整个表单数据
msg.jsp
Servlet:
UserServlet#regist()
1)一键封装表单数据到User form对象
2)补全:uid、激活码
3)校验输入(表单数据):
若错误:
保存错误信息到request
保存当前表单数据(form)到request(回显);
转发回到regist.jsp
4)调用service的regist()方法,传递form过去;
抛出异常:
保存错误信息(异常信息)、保存表单数据(回显)、转发到regist.jsp
没有抛出异常:
发邮件(发件人、收件人、标题、内容),内容中包含超链接,超链接指向可完成激活的Servlet地址!链接中要有激活码参数!
保存成功信息到request中
转发到msg.jsp
Service:
UserService#regist(User form)
校验用户是否被注册,如果注册,抛出UserException;
校验邮箱是否被注册,如果注册,抛出UserException;
把user插入到数据库中
Dao:
User findByUsername(String username):按用户名查询用户
User findByEmail(String email):按emal查询用户
void add(User form):插入用户到数据库中
3 用户激活
流程:用户的邮件中 --> UserServlet#active() --> msg.jsp
4 用户登录
流程:/jsps/user/login.jsp --> UserServlet#login() --> index.jsp
5 用户退出
流程:top.jsp --> UserServlet#quit() --> login.jsp
quit():把session销毁!
代码:
domian
/**
* User的领域对象
* 对应表单
* 对应数据库表
*
* @author 一万年行不行
*
*/
public class User {
private String uid; //主键
private String username; //用户名
private String password; //密码
private String email; //邮箱
private String code; //激活码
private boolean state; //状态(激活和未激活)
}
do:
/**
* User持久层 (对数据的持久化操作)
*
* @author 一万年行不行
*
*/
public class UserDao {
private QueryRunner qr = new TxQueryRunner();
/**
* 通过用户名查询
*
* @param Username
* @return
*/