退出功能:
在前端中做一件事,点击退出按钮的跳转路径修改为这个servlet路径.
在servlet中做两件事:
1/手动销毁session,因为session中含有登录的user对象
2/直接转发到login.html登录页面
分类展示:
准备工作:创建CateGoryServlet继承BaseServlet进行servlet的抽取,
CateGoryServlet注解上写任意名称/*,意思是可以执行到这个任意名称下的所有文件及方法.
BaseServlet中做了三件事:1.截取到访问的uri路径后面的方法名2.获取到子类的方法执行对象3.利用反射机制执行子类中的方法.
分类展示流程:
1/前端页面:1.发送ajax请求,访问服务器的分页数据,获得一组数据 2.遍历数组,获取分页数据内容
2/servlet中直接调用service中的finAll()方法,返回 list集合对象,将list对象转换为json对象,响应到客户端
3.service层调用dao层的findall()方法,返回分页数据
4.dao层执行findall()方法,在数据库查询所有分页数据信息,返回一个集合给service层.
分页展示缓存优化流程:
在分页展示的基础上,在service层的实现类中进行redis缓存优化;
1/创建jedis客户端,使用java操作reids,使用zset中的zrangeWithScores获取到redis中的所有数据.
2/对获取到的数据集合进行判断,如果为null或者长度为0,说明redis中没有缓存,则从数据库中进行读取数据,然后将数据存入redis中进行缓存.
3/如果不为null或者长度不为0说明redis中有缓存,则直接从缓存中读取数据进行展示.
4/因为我们返回的是一个list集合对象,所有为了防止返回的对象不能是空的对象,在有缓存的情况下,我们要创建一个arraylist集合进行存储redis中已经缓存的数据,防止返回的是空的对象.
分类跳转功能:
创建一个PegeBean对象
public class PageBean<T>{
private int totalCount 总记录数 -->查询数据库,获取所有数据的次数 count(*)
private int totalPage总页码 --> 总记录数 % 每页显示的条目 == 0 ? 总记录数 / 每页显示的条目 : (总记录数 / 每页显示的条目)+1;
private int currentPage 当前页码 --> 前端传递的
private int pageSize 每页显示的条目 --> 前端传递的
private list<T> list 每页显示的数据集合 --> 获取到start索引 参数传递 start , currentPage , pageSize
}
servlet层:
创建一个RouteServlet 继承BaseServlet,执行pageQuery方法,注解上面写route/*执行route下的所有文件及方法.
获取三个参数currentPage,pageSize和cid作为pageQuery方法的主要参数传递到后端服务器进行查询,返回一个PageBean对象,然后使用json数据格式响应到浏览器客户端.
service层:
创建PageBean对象,封装PageBean中的各个参数到对象中,其中调用了dao层中的两个方法,然后返回PageBean对象到servlet层
dao层:
在数据库中对总记录数和每页显示的数据list集合两个方法进行查询操作,然后返回结果给service层,再传递到servlet.
前端页面:
发送ajax请求,请求路径写route/方法名,参数写{"cid":cid},回调函数,后面基本上都是一些字符串的拼接,注意" "里面嵌套' ', 用 ' ' 进行字符串的拼接即可.
|