黑马旅游网-旅游分类线路分页显示(七)

目录

一、先查旅游分类所有内容

二、查询分页数据

三、实现后端代码

RouteServlet

RouteServiceImpl​​​​​​​

RouteService

RouteDaoImpl

RouteDao

PageBean

四、分页与数据展示

修改route_list.html

修改header.html

五、测试


一、先查旅游分类所有内容

点击了不同的分类后,将来看到的旅游线路不一样的。通过分析数据库表结构,发现,旅游线路表和分类表时一个多对一的关系

查询sql: select * from tab_route where cid=5

二、查询分页数据

查询: select * from 表 where 1=1 and cid=? and rname like ? limit ?,?

三、实现后端代码

​​​​​​​RouteServlet

package com.hotdas.travel.web.servlet;import com.hotdas.travel.domain.PageBean;
import com.hotdas.travel.domain.Route;
import com.hotdas.travel.service.RouteService;
import com.hotdas.travel.service.impl.RouteServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {private RouteService routeService = new RouteServiceImpl();public void queryPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException,Exception {//接收参数String currentPageStr = request.getParameter("currentPage");String cidStr = request.getParameter("cid");String pageSizeStr = request.getParameter("pageSize");System.out.println("cid="+cidStr);//有可能通过线路名称查询String rnameStr = request.getParameter("rname");System.out.println("rname="+rnameStr);//判断cidint cid =0;if(cidStr!=null && cidStr.length()>0 && !"null".equals(cidStr)){cid=Integer.parseInt(cidStr);}int currentPage=1;if(currentPageStr!=null && currentPageStr.length()>0){currentPage=Integer.parseInt(currentPageStr);}else{currentPage=1;}int pageSize = 0;if(pageSizeStr!=null && pageSizeStr.length()>0){pageSize=Integer.parseInt(pageSizeStr);}else{pageSize=5;}//调用service查询数据PageBean<Route> pageBean = routeService.queryPage(cid,currentPage,pageSize,rnameStr);writeValue(pageBean,response);}
}

​​​​​​​RouteServiceImpl​​​​​​​

package com.hotdas.travel.service.impl;import com.hotdas.travel.dao.RouteDao;
import com.hotdas.travel.dao.impl.RouteDaoImpl;
import com.hotdas.travel.domain.PageBean;
import com.hotdas.travel.domain.Route;
import com.hotdas.travel.service.RouteService;import java.util.List;public class RouteServiceImpl implements RouteService {private RouteDao routeDao = new RouteDaoImpl();@Overridepublic PageBean<Route> queryPage(int cid, int currentPage, int pageSize, String rnameStr) {PageBean<Route> pageBean =  new PageBean<>();pageBean.setCurrentPage(currentPage);pageBean.setPageSize(pageSize);//每页的记录集//先求出开始的索引int start = (currentPage-1)*pageSize;List<Route> list = routeDao.queryPageList(cid,start,pageSize,rnameStr);pageBean.setList(list);//总记录数int totalCount = routeDao.queryCount(cid,rnameStr);pageBean.setTotalCount(totalCount);//求出总页数int pageCount = totalCount% pageSize ==0 ? totalCount/pageSize : (totalCount/pageSize)+1;pageBean.setTotalPage(pageCount);return pageBean;}
}

RouteService

package com.hotdas.travel.service;import com.hotdas.travel.domain.PageBean;
import com.hotdas.travel.domain.Route;public interface RouteService {PageBean<Route> queryPage(int cid, int currentPage, int pageSize, String rnameStr);
}

RouteDaoImpl

package com.hotdas.travel.dao.impl;import com.hotdas.travel.dao.RouteDao;
import com.hotdas.travel.domain.Route;
import com.hotdas.travel.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.ArrayList;
import java.util.List;public class RouteDaoImpl implements RouteDao {private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic int queryCount(int cid, String rnameStr) {//定义sqlString sql = "select count(*) from tab_route where 1=1";StringBuffer sb = new StringBuffer(sql);List params = new ArrayList();//判断cidif (cid!=0){sb.append(" and cid=? ");params.add(cid);//cid对应的值}//判断是否通过rname查询if (rnameStr!=null && rnameStr.length()>0){sb.append(" and rname like ? ");params.add("%"+rnameStr+"%");}sql = sb.toString();//执行sql返回return template.queryForObject(sql,Integer.class,params.toArray());}@Overridepublic List<Route> queryPageList(int cid, int start, int pageSize, String rnameStr) {//select * from tab_route where 1=1 cid=? and rname like ? limit ?,?;String sql = "select * from tab_route where 1=1 ";StringBuffer sb = new StringBuffer(sql);List params = new ArrayList();//判断cidif (cid!=0){sb.append(" and cid=? ");params.add(cid);//cid对应的值}//判断是否通过rname查询if (rnameStr!=null && rnameStr.length()>0){sb.append(" and rname like ? ");params.add("%"+rnameStr+"%");}//分页参数sb.append(" limit ?,? ");params.add(start);params.add(pageSize);sql=sb.toString();return template.query(sql,new BeanPropertyRowMapper<Route>(Route.class),params.toArray());}
}

RouteDao

package com.hotdas.travel.dao;import com.hotdas.travel.domain.Route;import java.util.List;public interface RouteDao {int queryCount(int cid, String rnameStr);List<Route> queryPageList(int cid, int start, int pageSize, String rnameStr);
}

PageBean

package com.hotdas.travel.domain;import java.util.List;public class PageBean<T> {private int totalCount;//总记录数private int totalPage;//总页数private int pageSize;//每页显示记录数private int currentPage; //当前页private List<T> list;//每页显示的数据集合public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}
}

四、分页与数据展示

修改route_list.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>卓越旅游-搜索</title><link rel="stylesheet" type="text/css" href="css/common.css"><link rel="stylesheet" href="css/search.css"><script src="js/jquery-3.3.1.js"></script><script src="js/getParameter.js"></script><script>$(function () {var cid=getParameter("cid");var rname =getParameter("rname");//解码urlif (rname){rname =  window.decodeURIComponent(rname);}//通过ajax访问servlet获取数据库的数据//为了方便记录当前页load(cid,null,rname);});//通过ajax访问servlet获取数据库的数据function load(cid,currentPage,rname) {$.get("route/queryPage",{cid:cid,currentPage:currentPage,rname:rname},function (pb) {//pb其实是pageBean的json数据,需要解释到页面中$("#totalCount").html(pb.totalCount);$("#totalPage").html(pb.totalPage);//  <li><a href="">首页</a></li>// <li class="threeword"><a href="#">上一页</a></li>// <li><a href="#">1</a></li>// <li><a href="#">2</a></li>// <li><a href="#">3</a></li>// <li><a href="#">4</a></li>// <li><a href="#">5</a></li>// <li><a href="#">6</a></li>// <li><a href="#">7</a></li>// <li><a href="#">8</a></li>// <li><a href="#">9</a></li>// <li><a href="#">10</a></li>// <li class="threeword"><a href="javascript:;">下一页</a></li>// <li class="threeword"><a href="javascript:;">末页</a></li>var lis = "";var firstPage='<li><a onclick="javascript:load('+cid+',1,'+rname+');" href="javascript:void(0)">首页</a></li>';//计算上一页var beforNum = pb.currentPage-1;if (beforNum<=0){beforNum=1;}var secondePage='<li class="threeword"><a onclick="javascript:load('+cid+',beforNum,'+rname+');" href="javascript:void(0)">上一页</a></li>';lis+=firstPage;lis+=secondePage;var begin;//开始位置var end;//结束位置if (pb.totalPage<10){begin=1;end=pb.totalPage;}else{//总页数超过10页begin=pb.currentPage-5;end=pb.currentPage+4;//如果前边不够5个,后面补够10个if(begin<1){begin=1;end=begin+9;}//如果右边不够4条,前面补够10个if (end>pb.totalPage){begin=pb.totalPage-9;end=pb.totalPage;}}for(var i=begin;i<=end;i++){//判断是否是当前页if(pb.currentPage==i){li='<li class="curPage"><a onclick="javascript:load('+cid+','+i+','+rname+');" href="javascript:void(0)">'+i+'</a></li>';}else{li='<li><a onclick="javascript:load('+cid+','+i+','+rname+');" href="javascript:void(0)">'+i+'</a></li>';}//把遍历的内容拼串lis+=li;}//下一页var nextPage ='<li class="threeword"><a onclick="javascript:load('+cid+',pb.currentPage+1,'+rname+');" href="javascript:void(0)">下一页</a></li>';var lastPage ='<li><a onclick="javascript:load('+cid+',pb.totalPage,'+rname+');" href="javascript:void(0)">首页</a></li>';lis+=nextPage;lis+=lastPage;$("#pageNum").html(lis);// <li>//     <div class="img"><img src="images/04-search_03.jpg" alt=""></div>//         <div class="text1">//         <p>【减100元 含除夕/春节出发】广州增城三英温泉度假酒店/自由行套票</p>//     <br/>//     <p>1-2月出发,网付立享¥1099/2人起!爆款位置有限,抢完即止!</p>//     </div>//     <div class="price">//         <p class="price_num">//         <span>&yen;</span>//     <span>1199</span>//     <span>起</span>//     </p>//     <p><a href="route_detail.html">查看详情</a></p>//     </div>//     </li>//列表的数据展示var routelis = "";for(var i=0;i<pb.list.length;i++){//{cid=1,rname=xxx}var route = pb.list[i];var li='<li>'+'<div class="img"><img src="'+route.rimage+'" alt=""></div>\n'+'<div class="text1">\n'+'<p>'+route.rname+'</p>\n'+'<br/>\n'+'<p>'+route.routeIntroduce+'</p>\n'+'</div>\n'+'<div class="price">\n'+'<p class="price_num">\n'+'<span>&yen;</span>\n'+'<span>'+route.price+'</span>\n'+'<span>起</span>\n'+'</p>\n'+'<p><a href="route_detail.html?rid='+route.rid+'">查看详情</a></p>\n'+'</div>\n'+'</li>';routelis+=li;}$("#route").html(routelis);});}</script>
</head>
<body>
<!--引入头部-->
<div id="header"></div><div class="page_one"><div class="contant"><div class="crumbs"><img src="images/search.png" alt=""><p>卓越旅行><span>搜索结果</span></p></div><div class="xinxi clearfix"><div class="left"><div class="header"><span>商品信息</span><span class="jg">价格</span></div><ul id="route"></ul><div class="page_num_inf"><i></i> 共<span id="totalPage"></span>页<span id="totalCount"></span>条</div><div class="pageNum"><ul id="pageNum"></ul></div></div><div class="right"><div class="top"><div class="hot">HOT</div><span>热门推荐</span></div><ul><li><div class="left"><img src="images/04-search_09.jpg" alt=""></div><div class="right"><p>清远新银盏温泉度假村酒店/自由行套...</p><p>网付价<span>&yen;<span>899</span>起</span></p></div></li><li><div class="left"><img src="images/04-search_09.jpg" alt=""></div><div class="right"><p>清远新银盏温泉度假村酒店/自由行套...</p><p>网付价<span>&yen;<span>899</span>起</span></p></div></li><li><div class="left"><img src="images/04-search_09.jpg" alt=""></div><div class="right"><p>清远新银盏温泉度假村酒店/自由行套...</p><p>网付价<span>&yen;<span>899</span>起</span></p></div></li><li><div class="left"><img src="images/04-search_09.jpg" alt=""></div><div class="right"><p>清远新银盏温泉度假村酒店/自由行套...</p><p>网付价<span>&yen;<span>899</span>起</span></p></div></li><li><div class="left"><img src="images/04-search_09.jpg" alt=""></div><div class="right"><p>清远新银盏温泉度假村酒店/自由行套...</p><p>网付价<span>&yen;<span>899</span>起</span></p></div></li></ul></div></div></div></div><!--引入头部--><div id="footer"></div><!--导入布局js,共享header和footer--><script type="text/javascript" src="js/include.js"></script>
</body></html>

修改header.html

<!-- 头部 start --><script>$(function () {$.post("user/findUser",{},function (data) {if (data.name!="undefined" && data.name!=null){var msg = "欢迎回来,"+data.name;$("#span_username").html(msg);$(".login").css("display","block");}else{$(".login").css("display","none");}});//通过ajax获取分类数据$.get("category/findAll",{},function (data) {var lis = '<li class="nav-active"><a href="index.html">首页</a></li>';//数据遍历for(var i=0;i<data.length;i++){var li = '<li><a href="route_list.html?cid='+data[i].cid+'">'+data[i].cname+'</a></li>';lis +=li;}lis+='<li><a href="favoriterank.html">收藏排行榜</a></li>';//往ul标签下插入html代码块$("#category").html(lis);});});</script><header id="header"><div class="top_banner"><img src="images/top_banner.jpg" alt=""></div><div class="shortcut"><!-- 未登录状态  --><div class="login_out"><a href="login.html">登录</a><a href="register.html">注册</a></div><!-- 登录状态  --><div class="login" style="display:none;"><span id="span_username">欢迎回来,admin</span><a href="myfavorite.html" class="collection">我的收藏</a><a href="javascript:location.href='user/exit';">退出</a></div></div><div class="header_wrap"><div class="topbar"><div class="logo"><a href="/"><img src="images/logo.jpg" alt=""></a></div><div class="search"><input name="rname" type="text" placeholder="请输入路线名称" class="search_input" autocomplete="off"><a href="javascript:;" class="search-button">搜索</a></div><div class="hottel"><div class="hot_pic"><img src="images/hot_tel.jpg" alt=""></div><div class="hot_tel"><p class="hot_time">客服热线(9:00-6:00)</p><p class="hot_num">400-618-9090</p></div></div></div></div></header><!-- 头部 end --><!-- 首页导航 --><div class="navitem"><ul id="category" class="nav">
<!--            <li class="nav-active"><a href="index.html">首页</a></li>-->
<!--            <li><a href="route_list.html">门票</a></li>-->
<!--            <li><a href="route_list.html">酒店</a></li>-->
<!--            <li><a href="route_list.html">香港车票</a></li>-->
<!--            <li><a href="route_list.html">出境游</a></li>-->
<!--            <li><a href="route_list.html">国内游</a></li>-->
<!--            <li><a href="route_list.html">港澳游</a></li>-->
<!--            <li><a href="route_list.html">抱团定制</a></li>-->
<!--            <li><a href="route_list.html">全球自由行</a></li>-->
<!--            <li><a href="favoriterank.html">收藏排行榜</a></li>--></ul></div>

五、测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22461.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT最有实力的竞争对手Claude也开放API申请了

申请地址&#xff1a;https://www.anthropic.com/product 或者点击“阅读原文 ”直接申请

ChatGPT与低代码平台谁更适合快速开发

近来&#xff0c;关于生成式AI技术即将颠覆各个行业的预测在网络上随处可见。虽然生成式AI技术在自然语言处理、文本生成等领域已经取得了令人瞩目的成果&#xff0c;但是在低代码平台开发领域&#xff0c;尤其是在企业内部应用方面&#xff0c;其影响并不明显。 低代码平台作…

我曾做过陈士成,也做过孔乙己,还做过阿Q

一、 我现在是陈士成&#xff0c;陈士成现在是我。为什么这么说呢&#xff1f; 那年那天&#xff0c;天刚微微亮&#xff0c;似乎还在打着哈欠。我和父亲去得很早&#xff0c;为的就是在“小升初的考试成绩榜单”前面占一个有利的位置。我不记得当时穿的厚还是不厚&#xff0c;…

码农版孔乙己

改变自己 也许有一天你能改变这个世界&#xff0c;但是请在改变世界之前&#xff0c;先让自己存活下来&#xff0c;看到一篇文章分享一下不知道你们能从中看出什么呢 听人家背地里谈论&#xff0c;孔乙己原来也读过研&#xff0c;但终于没有实习经历&#xff0c;又没关系内推&a…

浅谈“孔乙己的长衫“是脱不下来还是难脱下?

名人说&#xff1a;往者不可谏&#xff0c;来者犹可追。——《论语微子篇》 创作者&#xff1a;Code_流苏(CSDN) ★温馨提示&#xff1a;以下仅代表个人观点&#xff0c;不代表其它任何人看法。 目录 〇、缘由一、社会对于学历和职业之间的关系认知是怎样的&#xff1f;二、学历…

Unity 蒙皮动画 SkinnedMesh 使用GPU Instance

GPU Instance合批技术是不支持 SkinnedMeshRender的&#xff0c;不过可以转换为Mesh Render以支持GPU Instance. 0x00 前言 我想很多开发游戏的小伙伴都希望自己的场景内能渲染越多物体越好&#xff0c;甚至是能同时渲染成千上万个有自己动作的游戏角色就更好了。 但不幸的是…

Unity毛发系统TressFX Exporter

Unity 数字人交流群&#xff1a;296041238 一&#xff1a;在Maya下的TressFX Exporter 插件安装步骤&#xff1a; 1. 下载Maya的TressFX Exporter插件 下载地址&#xff1a;TressFX Exporter 链接&#xff1a;https://github.com/Unity-China/cn.unity.hairfx.core/tree/m…

vscode配置go开发环境,插件超时问题解决

今天想试下golang&#xff0c;用goland太贵所以打算配置vscode来试一试&#xff0c;但是发现许多插件安装超时&#xff0c;查阅资料说是配置一下环境变量开启代理就好&#xff0c; go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.io,direct 但是尝试后发现依然没…

解决IDEA插件安装慢、超时、不成功问题

解决IDEA插件安装慢、超时、不成功问题 1.修改本地hosts文件&#xff0c;打开文件位置&#xff1a; Windows 系统 Hosts 文件路径&#xff1a;C:\Windows\System32\drivers\etc\hosts 用工具打开hosts文件 2.打开国内插件的节点IP地址 http://tool.chinaz.com/speedtest/pl…

chatgpt赋能python:Python如何突破VIP限制

Python如何突破VIP限制 在这个数字内容时代&#xff0c;我们经常使用各种网站和应用程序来获取视频、音乐、软件等数字资源。但是&#xff0c;某些资源可能受到VIP限制&#xff0c;这意味着我们需要付费才能获得完整的访问权限。但是&#xff0c;如果你了解Python编程&#xf…

武汉总部裁掉九成35岁以上员工?小米最新回应→

上一篇&#xff1a;00后太猛了&#xff0c;正强势整顿职场 导读&#xff1a;小米方面表示&#xff0c;在社交媒体平台上陆续出现有关小米武汉总部35岁以上员工只保留10%的信息&#xff0c;经查皆为谣言。 5月14日&#xff0c;微博端有消息称小米武汉总部正式裁掉90% 35岁以上员…

来上海一个月的记录、思考和感悟

作者 | gongyouliu 编辑 | gongyouliu 从4月3号早上来上海&#xff0c;到今天差不多整整一个月了&#xff0c;也是自己正式从杭州离职创业&#xff08;我更愿意称之为自由职业者&#xff0c;毕竟我没有招聘全职员工&#xff0c;有两个朋友业余时间在帮我&#xff09;的第一个月…

Prompt learning 教学[案例篇]:文生文案例设定汇总,你可以扮演任意角色进行专业分析

Prompt learning 教学[案例篇]&#xff1a;文生文案例设定汇总&#xff0c;你可以扮演任意角色进行专业分析 1.角色扮演 行为Prompt写法“牙医”““我想让你扮演一名牙医。我会向你提供有关寻找牙科服务&#xff08;例如 X 光、清洁和其他治疗&#xff09;的个人的详细信息。…

桌面管理,Windows自带工具!很强!

这两天看到自己桌面上的快捷方式图标越来越多&#xff0c;真是折磨&#xff0c;有时候找个软件找半天&#xff08;悄悄bb一句&#xff0c;主要是挡住我的壁纸了&#xff09;&#xff0c;真的是很令人难受&#xff01;就想着整理一下桌面&#xff0c;如下是用windows自带的工具整…

基于GMap.NET库实现的Windows桌面地图工具软件分享

0 前言 由于工作中经常和地图、GPS坐标转换、GPS轨迹查看等内容相关&#xff0c;经常要借助一些在线网站和工具来查看地图和位置等&#xff0c;在一次偶然的机会中了解到一个GMap.NET开源的桌面地图库和基于GMap.NET实现的MapDownloader地图下载工具&#xff0c;于是也想实现一…

小伙用AI“复活”奶奶引争议 科技边界在哪里(图)

小伙用AI“复活”奶奶引争议 科技边界在哪里(图) 上海00后用AI“复活”奶奶引发巨大争议&#xff1a;科技的边界在哪里。(图片来源&#xff1a;视频截图) 上海00后小伙用AI“复活”奶奶&#xff0c;还原其生前的音容笑貌&#xff0c;却引发巨大争议&#xff0c;人们在思考&…

音视频技术开发周刊 | 300

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 著名数据和AI企业Databricks&#xff0c;收购类ChatGPT开源平台MosaicML 6月27日&#xff0c;Databricks在官网宣布&#xff0c;以13亿美元&#xff08;约94亿元&#xff…

比GPT-4 Office还炸裂!阿里版GPT全家桶来袭

Datawhale干货 发布&#xff1a;阿里巴巴&#xff0c;来源&#xff1a;新智元 【导读】通义千问一出世&#xff0c;阿里版GPT全家桶立马来了。草图秒变程序&#xff0c;开会还能摸鱼&#xff0c;会议记录邮件文案全整活&#xff01;这只是开始&#xff0c;工作和生活将全面进入…

大咖齐聚CCIG论坛——文档图像智能分析的产业前沿

目录 1 文档图像智能分析技术2 大咖齐聚CCIG20233 议题介绍3.1 从模式识别到类脑研究3.2 视觉-语言预训练模型演进及应用3.3 篡改文本图像的生成和检测3.4 智能文档处理在工业界的应用与挑战 4 观看入口&议程 1 文档图像智能分析技术 文档图像智能分析是指使用计算机视觉和…

谷歌tryOnDiffusion实现了高度逼真的虚拟试穿;ChatGPT 或将推出 AI 应用商店

&#x1f989; AI新闻 &#x1f680; ChatGPT Plus 用户已支持联网和插件功能&#xff0c;OpenAI 或将推出 AI 应用商店 摘要&#xff1a;OpenAI 宣布 ChatGPT Plus 用户已支持联网和插件功能。据外媒 The Information 报道&#xff0c;OpenAI 正考虑为 AI 软件创建一个应用商…