失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 黑马旅游网编写练习(5)--目录的分类展示功能

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

时间:2022-08-26 14:52:43

相关推荐

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

黑马旅游网编写练习(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)--目录的分类展示功能》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。