黑马旅游网编写练习(5)–目录的分类展示功能

我们已经把项目的结构进行了优化,接下来编写目录展示相关的功能,所以我们单独创建其文件,包含dao层,service层,以及web层,全部重新创建文件,封装这一分类功能。
分析
数据库中已经包含了一个目录相关的表。我们只需要在主页面加载完成后,自动向服务器发送一个Ajax请求,查询数据库,并将其显示到页面。分析完成后,我们开始编写文件,从dao层到servlet层,最后编写前端页面。
dao层的数据库查询代码如下:

    // 定义templateprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 查询数据库中tab_category,返回list集合* @return*/@Overridepublic List<Category> findTab() {// 定义list集合List<Category> list = new ArrayList<Category>();// 定义sqlString sql = "select * from tab_category ";try {// 执行sqllist = template.query(sql,new BeanPropertyRowMapper<Category>(Category.class));} catch (DataAccessException e) {e.printStackTrace();return null;}return list;}

service层的查询数据库方法如下:

    // 定义CategoryDaoprivate CategoryDao dao = new CategoryDaoImpl();/*** 查询数据库中tab_category,查询成功返回list集合* @return*/@Overridepublic List<Category> findTab() {// 调用dao层方法查询数据List<Category> list = dao.findTab();return list;}

servlet编写内容如下,按照之前的修改,此类需要继承BaseServlet,并且在其中定义的方法名与访问路径有关。记得要配置该文件的servlet访问路径。

    @WebServlet("/category/*")public class CategoryServlet extends BaseServlet {// 创建CategoryService对象private CategoryService service = new CategoryServiceImpl();// 创建错误信息对象private ResultInfo info = new ResultInfo();public void findTab(HttpServletRequest request, HttpServletResponse response) throws IOException {// 调用service层查询方法查询数据List<Category> list = service.findTab();// 判断是否查询成功if(list != null && list.size() > 0){// 查询成功System.out.println("查询成功");// 将查询结果序列化为json,并响应给客户端responseJson(response,list);}else {// 查询失败System.out.println("Category查询失败,服务器错误!");}}}

接下来在前端header.html中加入Ajax请求,其代码如下:

    // 获取分类目录请求$.post("category/findTab",{},function (data) {// data格式:[{"cid":8,"cname":"全球自由行"},{"cid":5,"cname":"国内游"},{},{},{}]var list = '<li class="nav-active"><a href="index.html">首页</a></li>';var li;// 遍历集合for (var i=0;i<data.length; i++){li = '<li><a href="route_list.html">'+data[i].cname+'</a></li>';list+=li;}list+='<li><a href="favoriterank.html">收藏排行榜</a></li>';// 将list字符串,显示到ul标签中$("#category").html(list);});

据此,在页面加载完成后,便会从数据库查询分类数据,并显示到页面中;注意,是每次页面加载后,都会去访问数据库查询表格;进一步分析,该目录内容基本是不会改变的,所以可以使用redis缓存技术来优化访问

进一步分析
使用redis可以减少数据库的访问次数,我们又希望主页中的目录是按照数据库中的cid顺序展示的,所以可以考虑使用redis中的有序集合来存储表中的数据。然而redis中集合是set集合,我们使用的是list集合存储表中数据,所以在使用redis时还需要进行数据转换。
接下来,我们在service层添加redis缓存来进行优化。

    // 定义CategoryDaoprivate CategoryDao dao = new CategoryDaoImpl();// 获取jedis连接Jedis jedis = JedisUtil.getJedis();/*** 查询数据库中tab_category,查询成功返回list集合* 使用redis缓存进行优化* @return*/@Overridepublic List<Category> findTab() {// 定义一个set集合,存放redis中集合Set<String> categorys = null;// 定义一个list集合,存放数据库中集合List<Category> list = null;// 查询缓存中是否存在categorycategorys = jedis.zrange("category",0,-1);if(categorys == null || categorys.size() == 0){// redis中不存在System.out.println("redis中不存在Category,从数据库中查询...");// 调用dao层方法查询数据list = dao.findTab();// 将查询的结果存到redis中,key为categoryfor (Category category : list) {jedis.zadd("category",category.getCid(),category.getCname());}}else{// redis中存在System.out.println("redis中存在Category,从redis中查询...");// 将redis中的set集合转换为list集合list = new ArrayList<Category>();for (String cname : categorys) {Category category = new Category();category.setCname(cname);list.add(category);}}return list;}

黑马旅游网编写练习(5)--目录的分类展示功能相关推荐

  1. 黑马旅游网编写练习(3)--登录和退出功能

    黑马旅游网编写练习(3)–登录和退出功能 完成用户的注册和邮箱激活功能之后,接下来进行登录功能的编写. 分析: 当用户在登陆界面输入用户名,密码以及验证码后,点击登录按钮:我们让其发送Ajax请求:s ...

  2. 黑马旅游网编写练习(4)--优化工程目录结构

    黑马旅游网编写练习(4)–优化工程目录结构 经过前面的三次练习,已经实现了用户的登录,账户激活,以及用户退出的相关功能:然而在实际项目过程中,这些当然只能算是基础功能:在此过程中,我们为每一个小功能都 ...

  3. 黑马旅游网编写练习(6)--旅游线路分页展示功能

    黑马旅游网编写练习(6)–旅游线路分页展示功能 首页的目录展示功能已经完成,在进入主页后,页面会自动向服务器发送Ajax请求,从而获取目录数据,我们将其名称cname展示到页面中:接下来要实现的是分页 ...

  4. 黑马旅游网编写练习(2)--邮箱激活功能

    黑马旅游网编写练习(2)–邮箱激活功能 当用户进行注册时,一般会需要使用邮箱进行激活:所以在这里也模拟一下注册后邮箱的激活功能. 首先导入发送邮箱的jar包mail.jar:或者配置maven地址为: ...

  5. 黑马旅游网编写练习(1)--注册功能

    黑马旅游网编写练习 黑马旅游网是包含学习完java-web的一个综合项目:项目中既包含前端,也包含后端的逻辑处理.项目使用三级结构,并未使用框架技术. 本次项目使用maven管理.练习使用一些编写好的 ...

  6. 黑马旅游网编写练习(10)--用户收藏线路的展示功能

    黑马旅游网编写练习(10)–用户收藏线路的展示功能 分析 当用户点击我的收藏按钮时,需要将用户所收藏的所有线路进行展示:并且点击响应的线路,就会跳转到该线路对应的详情页面. 旅游线路的分页展示功能之前 ...

  7. 黑马旅游网编写练习(9)--旅游线路收藏功能

    黑马旅游网编写练习(9)–旅游线路收藏功能 旅游线路收藏功能分析 在旅游详情页面,用户点击收藏按钮后,我们向服务器发送Ajax请求:然后查询用户是否登录:若用户已登录,则需要查询数据库表格判断该用户是 ...

  8. 黑马旅游网编写练习(7)--某一旅游线路详情展示

    黑马旅游网编写练习(7)–某一旅游线路详情展示 在分页展示的页面中,我们点击某一个旅游,想要查看详细信息,则点击了查看详情后,会跳转到该旅游路线对应的详细信息页面.接下来对该详细信息页面的查询与展示. ...

  9. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

最新文章

  1. 2016-2022年AutoCAD起重机吊装计划和索具图纸
  2. 几款黄色LED的反相电流测量以及检测PCB制作要求
  3. 放大器和比较器的区别
  4. 把十进制的n转化成r进制的数的模板
  5. ubuntu系统如何切换到root用户登录
  6. 常见笔试面试问题点(转载)
  7. IOS学习:常用第三方库(GDataXMLNode:xml解析库)
  8. php 识别图片主色调,PHP 判断图片主色调的简单示例
  9. leetcode题解179-最大数
  10. java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计
  11. 9day条件语句和基本数据类型
  12. springMVC学习(10)-上传图片
  13. 手游自动挂机脚本开发历程
  14. 全面解析特斯拉自动驾驶体系
  15. 信息系统项目管理师计算题(三点估算)
  16. 【Linux基础】Linux简史
  17. JAVA 之父高斯林:廉颇老矣,尚能饭否?
  18. Python——类和对象、魔术方法(day07)
  19. Android系统屏幕亮度调节Brightness
  20. 周末参加“北京干部管理职业技术学院”关于高职课程改革的专家讨论会

热门文章

  1. JS操作图片的利器:Jimp VS GM
  2. 使用openOffice实现在线预览
  3. Dreamweaver cs3 cpu使用100%的解决方法
  4. 巧遇卡自动聊天(约炮加强板)
  5. vue 打包部署去掉#注意事项
  6. 4G模块 EC20 AT+QIACT=1 激活失败
  7. hdu 1166 敌兵布阵(单点更新)
  8. 一份笔记让你从 15K 涨薪并跳槽到32K+16
  9. 软件设计实验三 结构型设计模式实验
  10. 华为ensp模拟双isp出口