1. 任务
1_用户激活
2_登录,
3_退出,
4_抽取公共页面
5_查询所有分类
6_首页热门商品_最新商品显示
7_商品详情显示
8_基础分页操作
9_首页分类商品带分页查询
开发通用步骤: 1_准备工作2_Servlet 3_service 4_Dao 5_jsp页面
2. 用户激活
-
原理
-
步骤实现
-
1_准备工作(忽略)
用户点击邮箱中的激活链接,向服务端发送method=active&code=234123adf22234 -
UserServlet___>active
获取到激活码
调用service功能,对账户进行激活操作
- service_dao
1 ServiceImp
2 Dao
- /jsp/login.jsp 获取到注册成功的提示信息
3. 用户登录功能
- 实现用户登录页面跳转
在 /jsp/index.jsp修改修改登录链接
<a href="${pageContext.request.contextPath}/UserServlet?method=loginUI">登录</a>
- 修改 servlet, 添加 loginUI方法
- 登录原理分析
- 编写步骤
- 完善 login.jsp 表单
- 在登录页面输入用户名和密码, 点击登录, 发送请求到 UserServlet
- 获得用户名和密码, 通过用户名和密码查询用/户
- 如果用户存在表示登录成功 , 将用户信息保存到 session, 并重定向到首页
- 如果用户不存在, 给用户错误提示, 井重新登录
- 代码实现
- 完善表单
- 修改 UserServlet, 添加 login 方法 3. DaoImp中的方法 4. serviceImp
5. 完善首页, 根据是否登录, 实现不同的程序入口。
## 用户退出
- 分析
- 实现
1_准备工作
/jsp/index.jsp 修改连接
<a href="${pageContext.request.contextPath}/UserServlet?method=logOut">退出</a>
2_UserServlet___>logOut
清除session
重新定向到首页
return null;
4. 抽取公共页面
-
步骤
- 复制info.jsp___>header.jsp
- 打开/jsp/index.jsp ,将页面部分的导航和菜单区域复制到header.jsp
在header.jsp通过tag导入标签库
3. 打开其他的所有页面进行替换
5. 获取首页分类信息
- 原理分析
- 代码实现
- 完善IndexServlet,显示/jsp/index.jsp 前查询分类
2. 创建分类模块的相关程序
CategoryServlet CategoryService CategoryServiceImp CategoryDao
CategoryDaoImp Category
3. 调用业务层获取全部分类数据
4. 将全部分类信息放入request 转发到真实的首页/jsp/index.jsp
*_/jsp/header.jsp 获取全部分类信息
PS: 由于获取分类要遍历数据,需要用到c:forEach标签,需要导入标签库
弊端:当访问首页是可以看到全部分类信息,但是如果访问其它页面,看不到分类信息.
- 优化 Ajax 异步加载
- 分析
当访问首页时可以显示分类导航条,但访问其他模块时无法访问显示分类。通过比较程序我们发现,显示首页前我们查询了所有分类,显示登录等其他模块时我们没有查询分类。为了所有模块都可以显示分类,我们需要发送 ajax 单独查询分类。
2. 步骤实现
- 分析
> 1_/jsp/header.jsp
当页面加载完毕之后,向服务端发起Ajax请求,服务端经过处理,
将所有分类信息以JSON格式的数据返回,客户端获取到返回的所有分类,
绑定在页面的显示分类区域
页面底部
$.post(url,{},function(data){},”json”){}
2_CategoryServlet__>getAllCats
//调用业务层获取全部分类
//将全部分类转换为JSON格式的数据
//将全部分类信息响应到客户端
3_调试
观察本次请求,响应网络传输情况,
目的:排除2端错误
4_实现/jsp/header.jsp中AJAX代码的剩余部分
弊端:如果用户频繁的访问包含分类信息的页面,每次都要去DB中取获取分类信息,影响性能.
4. 增强:缓存技术
- 当我们在不同模块之间切换时,发现菜单栏显示的分类数据都是一样的。浏览器每发送一次请
求,服务器端都会查询一次数据库,从而对数据库服务器造成不必要的访问。实际开发中,我们采 缓存(Cache):通常指的就是内存中的一块空间,介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。
常见的缓存技术
redis 是一个 key-value 存储系统。和 Memcached 类似,它支持存储的 value 类型相对更多。
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。
EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点。
导入 jar 包:- 代码
6. 首页热门商品和最新商品显示
- sql语句
#查询商品表中最新的9件商品信息
SELECT * FROM product WHERE pflag=0 ORDER BY pdate DESC LIMIT 0 ,9
#查询商品表中最热,最新的9件商品信息
SELECT * FROM product WHERE pflag=0 AND is_hot=1 ORDER BY pdate DESC LIMIT 0 ,9
- 分析
3.实现
7. 商品详情显示
- 分析
- 分析