旅游线路的分页展示

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

解决获取cid问题

header.html

var li = '<li><a href="route_list.html?cid='+data[i].cid+'">'+data[i].cname+'</a></li>';
 @Overridepublic List<Category> findAll() {//1.从redis中查询,需要获取Jedis客户端//获取Jedis客户端Jedis jedis = JedisUtil.getJedis();//因为想要获得的数据具有顺序,所以使用sortedset排序查询
//        Set<String> category = jedis.zrange("category", 0, -1);//为了实现跳转问题,所以必须把分数也保存,传递//查询sortedset中的分数(cid)和值(cname)Set<Tuple> category = jedis.zrangeWithScores("category", 0, -1);//2.判断查询的集合是否为空List<Category> all = null;if (category == null || category.size() == 0){System.out.println("从数据库查询");//3.如果为空,需要从数据库查询,在将数据存入redis//从数据库查询all = categoryDao.findAll();//将集合数据存储到redis的名为category的key的sortedset里面去//sortedset里面的分数使用idfor (int i = 0; i < all.size(); i++) {//cid分数,cname内容jedis.zadd("category",all.get(i).getCid(),all.get(i).getCname());}}else {System.out.println("从redis去查询");//访问的是category,而category又是set集合,但是序列化的时候拿到的是list集合//所以的把set集合里面的数据存储到list集合里面去,进行数据结构的统一all = new ArrayList<Category>();for(Tuple tuple:category){Category c = new Category();c.setCname(tuple.getElement());c.setCid((int)tuple.getScore());all.add(c);}}//4.如果不为空,缓存有数据。return all;}

取出cid(传递)

location有一个属性search:设置或返回从问号(?)开始的URL (查询部分)。

route_list.html

<script>//location有一个属性**search**:设置或返回从问号(?)开始的URL (查询部分)。$(function (){//获取cidvar search = location.search;//?id=5var id = search.split("=")[1];//5});
</script>

根据id(cid)查询不同类别的旅游线路数据

分页展示

分析

首先需要创建pageBean对象

客户端代码

全部代码
route_list.html
<script>//location有一个属性:search:设置或返回从问号(?)开始的URL (查询部分)。$(function (){//获取cidvar search = location.search;//?id=5var cid = search.split("=")[1];//5//当页码加载完成后,调用load方法,发送ajax请求加载数据load(cid);});function load(cid,currentPage){//发送ajax请求,请求route/pageQuery,传递cid$.get("route/pageQuery",{cid:cid,currentPage:currentPage},function (pb){//解析pagebean数据,展示到页面上//1.分页工具条数的展示//展示总页码和总记录数$("#totalPage").html(pb.totalPage);$("#totalCount").html(pb.totalCount);/*<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 = "";//上一页和首页//首页就是没有i的值,或者是i等于1var firstPage = '<li  οnclick="javascript:load('+cid+')"><a href="javascript:void(0)">首页</a></li>';//计算上一页的页码var beforeNum = pb.currentPage - 1;if (beforeNum <= 0){beforeNum = 1;}var beforePage = '<li οnclick="javascript:load('+cid+','+beforeNum+')" class="threeword"><a href="javascript:void(0)">上一页</a></li>';lis += firstPage;lis += beforePage;//展示10条分页页码/*1.一共展示10个页码,能够达到前5后4的效果2.如果前边不够5个,后边补齐10个3.如果后边不足4个,前边补齐10个*/// 定义开始位置begin,结束位置 endvar begin;//开始位置var end;//加结束位置//1.一共展示10个页码,能够达到前5后4的效果if (pb.totalPage < 10){//总页码不够10页begin = 1;end = pb.totalPage;}else {//总页码超过10页,达到前5后4的效果begin = pb.currentPage - 5;end = pb.currentPage + 4;//如果前面不够5个,后面补全10个if (begin < 1){begin = 1;end = begin + 9;}//如果后面不够4个,前面补全10个if (end > pb.totalPage){end = pb.totalPage;begin = end - 9;}}for (var i = begin; i <= end; i++) {//添加点击时的样式,实现选择该框时出现选中的结果var li;//判断当前页面是否等于iif(pb.currentPage == i){//添加样式var li = '<li class="curPage" οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}else {//创建页码的li// var li = '<li><a href="javascript:load('+cid+','+i+')">'+i+'</a>';//这样修改后可以实现点击li实现跳转,只需要点击框就可以了,不然的话,必须得点击数字才可以var li = '<li οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}//拼接字符串lis += li;}/*//展示全部分页页码for (var i = 1; i <= pb.totalPage; i++) {//添加点击时的样式,实现选择该框时出现选中的结果var li;//判断当前页面是否等于iif(pb.currentPage == i){//添加样式var li = '<li class="curPage" οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}else {//创建页码的li// var li = '<li><a href="javascript:load('+cid+','+i+')">'+i+'</a>';//这样修改后可以实现点击li实现跳转,只需要点击框就可以了,不然的话,必须得点击数字才可以var li = '<li οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}//拼接字符串lis += li;}*///尾页var lastPage = '<li οnclick="javascript:load('+cid+','+pb.totalPage+')" class="threeword"><a href="javascript:void(0)">末页</a></li>';//计算下一页的页码var nextNum = pb.currentPage + 1;if (nextNum > pb.totalPage){nextNum = pb.totalPage;}var nextPage = '<li  οnclick="javascript:load('+cid+','+nextNum+')" class="threeword"><a href="javascript:void(0)">下一页</a></li>';lis += nextPage;lis += lastPage;//将lis内容设置到ul$("#pageNum").html(lis);/*<li><div class="img"><img src="data: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>299</span><span>起</span></p><p><a href="route_detail.html">查看详情</a></p></div></li>*///2.列表数据展示var route_lis = "";for (var i = 0; i < pb.list.length; i++) {//获取JSON里面的list数组,// 因为其所有的商品信息都是封装在list里面,// 并且每一个索引里面都有一整个商品信息//如:{rid:1,rname:..,price:....}var route = pb.list[i];var li = '<li>\n' +'                    <div class="img"><img src="'+route.rimage+'" style="width: 299px;" 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">查看详情</a></p>\n' +'                    </div>\n' +'                </li>';route_lis += li;}//遍历完过后将route_li里面的li的内容添加进ul里面$("#route").html(route_lis);//scrollTo(xpos,ypos)方法实现,点击选择的页面时,跳转到网页的首部/*定义:把内容滚动到指定的坐标。xpos:必需。要在窗口文档显示区左上角显示的文档的x坐标。ypos:必需。 要在窗口文档显示区左上角显示的文档的y坐标。*///定位到页面顶部window.scrollTo(0,0);});}
</script>
页码
页码整体显示
<script>//location有一个属性:search:设置或返回从问号(?)开始的URL (查询部分)。$(function (){//获取cidvar search = location.search;//?id=5var cid = search.split("=")[1];//5//发送ajax请求,请求route/pageQuery,传递cid$.get("route/pageQuery",{cid:cid},function (pb){//解析pagebean数据,展示到页面上//1.分页工具条数的展示//展示总页码和总记录数$("#totalPage").html(pb.totalPage);$("#totalCount").html(pb.totalCount);/*<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 href="">首页</a></li>';var beforePage = '<li class="threeword"><a href="#">上一页</a></li>';lis += firstPage;lis += beforePage;//展示分页页码for (var i = 1; i <= pb.totalPage; i++) {//创建页码的livar li = '<li><a href="#">'+i+'</a>';//拼接字符串lis += li;}var lastPage = '<li class="threeword"><a href="javascript:;">下一页</a></li>';var nextPage = '<li class="threeword"><a href="javascript:;">末页</a></li>';lis += nextPage;lis += lastPage;//将lis内容设置到ul$("#pageNum").html(lis);//2.列表数据展示......});});
</script>
页面跳转功能

全部代码:

<script>//location有一个属性:search:设置或返回从问号(?)开始的URL (查询部分)。$(function (){//获取cidvar search = location.search;//?id=5var cid = search.split("=")[1];//5//当页码加载完成后,调用load方法,发送ajax请求加载数据load(cid);});function load(cid,currentPage){//发送ajax请求,请求route/pageQuery,传递cid$.get("route/pageQuery",{cid:cid,currentPage:currentPage},function (pb){//解析pagebean数据,展示到页面上//1.分页工具条数的展示//展示总页码和总记录数$("#totalPage").html(pb.totalPage);$("#totalCount").html(pb.totalCount);/*<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 = "";//上一页和首页//首页就是没有i的值,或者是i等于1var firstPage = '<li  οnclick="javascript:load('+cid+')"><a href="javascript:void(0)">首页</a></li>';//计算上一页的页码var beforeNum = pb.currentPage - 1;if (beforeNum <= 0){beforeNum = 1;}var beforePage = '<li οnclick="javascript:load('+cid+','+beforeNum+')" class="threeword"><a href="javascript:void(0)">上一页</a></li>';lis += firstPage;lis += beforePage;//展示分页页码for (var i = 1; i <= pb.totalPage; i++) {//添加点击时的样式,实现选择该框时出现选中的结果var li;//判断当前页面是否等于iif(pb.currentPage == i){//添加样式var li = '<li class="curPage" οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}else {//创建页码的li// var li = '<li><a href="javascript:load('+cid+','+i+')">'+i+'</a>';//这样修改后可以实现点击li实现跳转,只需要点击框就可以了,不然的话,必须得点击数字才可以var li = '<li οnclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}//拼接字符串lis += li;}var lastPage = '<li οnclick="javascript:load('+cid+','+pb.totalPage+')" class="threeword"><a href="javascript:void(0)">末页</a></li>';//计算下一页的页码var nextNum = pb.currentPage + 1;if (nextNum > pb.totalPage){nextNum = pb.totalPage;}var nextPage = '<li  οnclick="javascript:load('+cid+','+nextNum+')" class="threeword"><a href="javascript:void(0)">下一页</a></li>';lis += nextPage;lis += lastPage;//将lis内容设置到ul$("#pageNum").html(lis);/*<li><div class="img"><img src="data: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>299</span><span>起</span></p><p><a href="route_detail.html">查看详情</a></p></div></li>*///2.列表数据展示var route_lis = "";for (var i = 0; i < pb.list.length; i++) {//获取JSON里面的list数组,// 因为其所有的商品信息都是封装在list里面,// 并且每一个索引里面都有一整个商品信息//如:{rid:1,rname:..,price:....}var route = pb.list[i];var li = '<li>\n' +'                    <div class="img"><img src="'+route.rimage+'" style="width: 299px;" 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">查看详情</a></p>\n' +'                    </div>\n' +'                </li>';route_lis += li;}//遍历完过后将route_li里面的li的内容添加进ul里面$("#route").html(route_lis);});}
</script>

具体实现功能

  • 这些都依靠load方法
function load(cid,currentPage){//发送ajax请求,请求route/pageQuery,传递cid$.get("route/pageQuery",{cid:cid,currentPage:currentPage},function (pb){//解析pagebean数据,展示到页面上//1.分页工具条数的展示//展示总页码和总记录数$("#totalPage").html(pb.totalPage);$("#totalCount").html(pb.totalCount);/*<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 = "";//上一页和首页//首页就是没有i的值,或者是i等于1var firstPage = '<li  onclick="javascript:load('+cid+')"><a href="javascript:void(0)">首页</a></li>';//计算上一页的页码var beforeNum = pb.currentPage - 1;if (beforeNum <= 0){beforeNum = 1;}var beforePage = '<li onclick="javascript:load('+cid+','+beforeNum+')" class="threeword"><a href="javascript:void(0)">上一页</a></li>';lis += firstPage;lis += beforePage;//展示分页页码for (var i = 1; i <= pb.totalPage; i++) {//添加点击时的样式,实现选择该框时出现选中的结果var li;//判断当前页面是否等于iif(pb.currentPage == i){//添加样式var li = '<li class="curPage" onclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}else {//创建页码的li// var li = '<li><a href="javascript:load('+cid+','+i+')">'+i+'</a>';//这样修改后可以实现点击li实现跳转,只需要点击框就可以了,不然的话,必须得点击数字才可以var li = '<li onclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}//拼接字符串lis += li;}var lastPage = '<li onclick="javascript:load('+cid+','+pb.totalPage+')" class="threeword"><a href="javascript:void(0)">末页</a></li>';//计算下一页的页码var nextNum = pb.currentPage + 1;if (nextNum > pb.totalPage){nextNum = pb.totalPage;}var nextPage = '<li  onclick="javascript:load('+cid+','+nextNum+')" class="threeword"><a href="javascript:void(0)">下一页</a></li>';lis += nextPage;lis += lastPage;//将lis内容设置到ul$("#pageNum").html(lis);/*<li><div class="img"><img src="data: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>299</span><span>起</span></p><p><a href="route_detail.html">查看详情</a></p></div></li>*///2.列表数据展示var route_lis = "";for (var i = 0; i < pb.list.length; i++) {//获取JSON里面的list数组,// 因为其所有的商品信息都是封装在list里面,// 并且每一个索引里面都有一整个商品信息//如:{rid:1,rname:..,price:....}var route = pb.list[i];var li = '<li>\n' +'                    <div class="img"><img src="'+route.rimage+'" style="width: 299px;" 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">查看详情</a></p>\n' +'                    </div>\n' +'                </li>';route_lis += li;}//遍历完过后将route_li里面的li的内容添加进ul里面$("#route").html(route_lis);});}
  • 点击某一页跳转
//展示分页页码
for (var i = 1; i <= pb.totalPage; i++) {//添加点击时的样式,实现选择该框时出现选中的结果var li;//判断当前页面是否等于iif(pb.currentPage == i){//添加样式var li = '<li class="curPage" onclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}else {//创建页码的li// var li = '<li><a href="javascript:load('+cid+','+i+')">'+i+'</a>';//这样修改后可以实现点击li实现跳转,只需要点击框就可以了,不然的话,必须得点击数字才可以var li = '<li onclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}//拼接字符串lis += li;
}
  • 上一页

  • 首页

//上一页和首页
//首页就是没有i的值,或者是i等于1
var firstPage = '<li  onclick="javascript:load('+cid+')"><a href="javascript:void(0)">首页</a></li>';
//计算上一页的页码
var beforeNum = pb.currentPage - 1;
if (beforeNum <= 0){beforeNum = 1;
}
var beforePage = '<li onclick="javascript:load('+cid+','+beforeNum+')" class="threeword"><a href="javascript:void(0)">上一页</a></li>';
  • 尾页

  • 下一页

//尾页
var lastPage = '<li onclick="javascript:load('+cid+','+pb.totalPage+')" class="threeword"><a href="javascript:void(0)">末页</a></li>';
//计算下一页的页码
var nextNum = pb.currentPage + 1;
if (nextNum > pb.totalPage){nextNum = pb.totalPage;
}
var nextPage = '<li  onclick="javascript:load('+cid+','+nextNum+')" class="threeword"><a href="javascript:void(0)">下一页</a></li>';
实现页码的折叠

//展示10条分页页码
/*1.一共展示10个页码,能够达到前5后4的效果2.如果前边不够5个,后边补齐10个3.如果后边不足4个,前边补齐10个
*/
// 定义开始位置begin,结束位置 end
var begin;//开始位置
var end;//加结束位置
//1.一共展示10个页码,能够达到前5后4的效果
if (pb.totalPage < 10){//总页码不够10页begin = 1;end = pb.totalPage;
}else {//总页码超过10页,达到前5后4的效果begin = pb.currentPage - 5;end = pb.currentPage + 4;//如果前面不够5个,后面补全10个if (begin < 1){begin = 1;end = begin + 9;}//如果后面不够4个,前面补全10个if (end > pb.totalPage){end = pb.totalPage;begin = end - 9;}}for (var i = begin; i <= end; i++) {//添加点击时的样式,实现选择该框时出现选中的结果var li;//判断当前页面是否等于iif(pb.currentPage == i){//添加样式var li = '<li class="curPage" onclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}else {//创建页码的li// var li = '<li><a href="javascript:load('+cid+','+i+')">'+i+'</a>';//这样修改后可以实现点击li实现跳转,只需要点击框就可以了,不然的话,必须得点击数字才可以var li = '<li onclick="javascript:load('+cid+','+i+')"><a href="javascript:void(0)">'+i+'</a>';}//拼接字符串lis += li;
}
商品显示
/*<li><div class="img"><img src="data: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>299</span><span>起</span></p><p><a href="route_detail.html">查看详情</a></p></div></li>*///2.列表数据展示var route_lis = "";for (var i = 0; i < pb.list.length; i++) {//获取JSON里面的list数组,// 因为其所有的商品信息都是封装在list里面,// 并且每一个索引里面都有一整个商品信息//如:{rid:1,rname:..,price:....}var route = pb.list[i];var li = '<li>\n' +
'                    <div class="img"><img src="'+route.rimage+'" style="width: 299px;" 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">查看详情</a></p>\n' +
'                    </div>\n' +
'                </li>';route_lis += li;}//遍历完过后将route_li里面的li的内容添加进ul里面$("#route").html(route_lis);
滚动到页面顶部
//scrollTo(xpos,ypos)方法实现,点击选择的页面时,跳转到网页的首部
/*定义:把内容滚动到指定的坐标。xpos:必需。要在窗口文档显示区左上角显示的文档的x坐标。ypos:必需。 要在窗口文档显示区左上角显示的文档的y坐标。*/
//定位到页面顶部
window.scrollTo(0,0);

服务器端代码

1.创建PageBean对象

2.RouteServlet

3.RouteService

4.RouteDao

1.PageBean对象
/*** 分页对象*/
public class PageBean<T> {//数据流查询的数据:totalCount、list集合//pageSize、currentPage:是客户端提交的//totalPage:可以计算出来的,通过totalCount和pageSizeprivate int totalCount;//总记录数private int totalPage;//总页数private int currentPage;//当前页码private int pageSize;//每页显示的条数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 getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}
}
2.RouteServlet
@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {private RouteService routeService = new RouteServiceImpl();/*** 分页查询* @param request* @param response* @throws ServletException* @throws IOException*/public void pageQuery(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.接收参数//需要将currentPageStr转为int类型的网service里面传String currentPageStr = request.getParameter("currentPage");String pageSizeStr = request.getParameter("pageSize");String cidStr = request.getParameter("cid");//处理参数int cid = 0;//前面所获取的类别idif (cidStr != null && cidStr.length() > 0){cid = Integer.parseInt(cidStr);}int pageSize = 0;//每页显示条数,如果不传递,默认每页显示5条记录if (pageSizeStr != null && pageSizeStr.length() > 0){pageSize = Integer.parseInt(pageSizeStr);}else {pageSize = 5;}int currentPage = 0;//当前页码,如果不传递,则默认为第一页if (currentPageStr != null && currentPageStr.length() > 0){currentPage = Integer.parseInt(currentPageStr);}else {currentPage = 1;}//3.调用service查询PageBean对象PageBean<Route> pb = routeService.pageQuery(cid, currentPage, pageSize);//4.将pageBean对象序列化为json,返回writeValue(pb,response);}}
3.RouteService
public interface RouteService {/*** 根据类别进行分页查询* @param cid* @param currentPage* @param pageSize* @return*/public PageBean<Route> pageQuery(int cid,int currentPage,int pageSize);
}
public class RouteServiceImpl implements RouteService {RouteDao routeDao = new RouteDaoImpl();@Overridepublic PageBean<Route> pageQuery(int cid, int currentPage, int pageSize) {//封装一个PageBean对象,并将这个对象返回//数据流查询的数据:totalCount、list集合//pageSize、currentPage:是客户端提交的//totalPage:可以计算出来的,通过totalCount和pageSizePageBean<Route> pb = new PageBean<Route>();//设置当前页pb.setCurrentPage(currentPage);//设置每页显示的条数pb.setPageSize(pageSize);//设置总记录数int totalCount = routeDao.findTotalCount(cid);pb.setTotalCount(totalCount);//设置当前页显示的数据集合//开始的记录数int start = (currentPage - 1)*pageSize;List<Route> list = routeDao.findByPage(cid,start,pageSize);pb.setList(list);//设置总页数 = 总记录数/每页显示条数int totalPage = totalCount % pageSize == 0 ? totalCount/pageSize : (totalCount/pageSize)+1;pb.setTotalPage(totalPage);return pb;}
}
4.RouteDao
public interface RouteDao {/*** 根据cid查询总记录数*/public int findTotalCount(int cid);/*** 根据cid、start、pageSize查询当前页的数据集合,start代表从哪里开始,因为SQL* 里面的limit ?,? ,第一个?:从哪一个记录数开始*/public List<Route> findByPage(int cid,int start,int pageSize);
}
public class RouteDaoImpl implements RouteDao {//使用template去执行sqlprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic int findTotalCount(int cid) {String sql = "select count(*) from tab_route where cid = ?";//返回一个Integer.class,再去给一个cid的参数return template.queryForObject(sql,Integer.class,cid);}@Overridepublic List<Route> findByPage(int cid, int start, int pageSize) {String sql = "select * from tab_route where cid = ? limit ? , ?";return template.query(sql,new BeanPropertyRowMapper<>(Route.class),cid,start,pageSize);}
}

旅游网(5)-------------- 旅游线路的分页展示相关推荐

  1. html大学生网站开发实践作业:旅游网站设计——联途旅游网(39页) HTML+CSS+JavaSc 旅游网页html 开心旅游网html 旅游网前端框架HTML模板...

    HTML5期末大作业:旅游网站设计--联途旅游网(39页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材 ...

  2. html大学生网站开发实践作业:旅游网站设计——联途旅游网(39页) HTML+CSS+JavaSc 旅游网页html 开心旅游网html 旅游网前端框架HTML模板

    HTML5期末大作业:旅游网站设计--联途旅游网(39页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材 ...

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

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

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

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

  5. 4-黑马旅游网-分页展示

    旅游线路的分页展示 点击了不同的分类后,将来看到的旅游线路不一样的.通过分析数据库表结构,发现,旅游线路表和分类表时一个多对一的关系 类别id的传递 Redis中查询score(cid) packag ...

  6. 黑马旅游网完整代码_JavaWeb+黑马旅游网

    JavaWeb+黑马旅游网 |____资料 |____16.黑马旅游网 |____15.Maven基础 |____14.Redis |____13.Ajax和JSON |____12.Jquery | ...

  7. 黑马旅游网完整代码_JavaWeb黑马旅游网 视频 下载

    课程目录: JavaWeb+黑马旅游网 |____资料 |____16.黑马旅游网 |____15.Maven基础 |____14.Redis |____13.Ajax和JSON |____12.Jq ...

  8. JavaWeb - 《黑马旅游网》系列博客及笔者源码传送门

    <黑马旅游网>系列博客及笔者源码传送门 系列博客 正篇 番外 笔者源码 系列博客 正篇 项目启动 用户注册 登录与退出 首页线路分类展示 旅游线路分页展示 旅游线路详情展示 线路搜索分页展 ...

  9. 旅游网项目案例以及源码

    旅游网案例 技术选型 Web层 Servlet:前端控制器 html:视图 Filter:过滤器 BeanUtils:数据封装 Jackson:json序列化工具 Service层 Javamail: ...

最新文章

  1. Linux命令缩写来由
  2. windows令牌学习
  3. javascript计时原理
  4. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)
  5. oracle命名空间使用,揭秘ADO.NET OracleClient命名空间对象
  6. Chrome浏览器的自动保存密码提示功能禁用方法
  7. Thinking in Java 17.8 理解Map
  8. 标准输入输出详解(C++)
  9. 计算机中缺失freeimage.dll,FreeImage.dll
  10. 【java毕业设计】基于javaEE+Mybatis的WEB仓库管理系统设计与实现(毕业论文+程序源码)——仓库管理系统
  11. 什么是静态代理,什么是动态代理
  12. VB6.0 Select Case语句
  13. 在Chrome、Firefox等高版本浏览器中实现在线编辑、审阅Office文档新方案
  14. 赶紧收藏!网上疯传的150个ChatGPT「超级提问模型」,都在这里了
  15. 为什么要使用异常及java异常的使用--及js、php、golang的异常机制
  16. 三位一撇:处理数字12345.67——12,345.67
  17. 基于Xilinx CPLD的看门狗电路设计
  18. 人工智能---我们的骄傲
  19. SegmentFault 社区访谈 | 依云: 一只想依偎在云上的野百合
  20. 信息学奥赛一本通(C++版)continue

热门文章

  1. DataTable数据加载不成功,而且不报错
  2. 三种方式实现生产者-消费者模型
  3. c语言中的exit函数
  4. 微信小程序人脸识别的实现
  5. 计算机报时间校准错误无法启动,电脑时间校准,详细教您怎么校正电脑时间
  6. JS实践(乾坤未定,你我皆是黑马4-3)
  7. Kubernetes学习笔记【2年以前的笔记】
  8. ubuntu系统安装charm-crypto
  9. 项目上线的积极准备工作
  10. Require.js的基本用法详解