header.html
1 <!-- 头部 start --> 2 <script src="js/getParameter.js"></script> 3 <script> 4 $(function () { 5 6 //请求登录用户信息 7 $.get( 8 // "findUserServlet", 9 "user/findOne", 10 {}, 11 function (data) { 12 var msg = "欢迎回来," + data.name; 13 $("#span_username").html(msg); 14 }, 15 "json" 16 ); 17 18 19 //请求分类数据 20 $.get( 21 "category/findAll", 22 {}, 23 function (data) { //data: [{cid:1,cname:国内游},{},{},...] 24 //初始化<li>字符串(第一个是首页,固定的) 25 var lis = ‘<li class="nav-active"><a href="index.html">首页</a></li>‘; 26 27 //遍历数组,拼接<li>字符串 28 for (var i=0; i<data.length; i++){ 29 var li = ‘<li><a href="route_list.html?cid=‘ + data[i].cid + ‘">‘ + data[i].cname + ‘</a></li>‘; 30 lis += li; 31 } 32 33 //拼接收藏排行榜的<li>(最后一个也是固定的) 34 lis += ‘<li><a href="favoriterank.html">收藏排行榜</a></li>‘; 35 36 //将lis字符串,设置到ul的html内容中 37 $("#category").html(lis); 38 }, 39 "json" 40 ); 41 42 43 //给搜索按钮绑定单击事件,获取搜索输入框的内容 44 $("#search_button").click(function () { 45 var rname = $("#search_input").val(); //线路名称 46 // alert(rname); 47 var cid = getParameter("cid"); //利用getParameter.js中封装好的获取方法(自定义) 48 // alert(cid); 49 50 // 跳转路径 51 location.href = "http://localhost/travel/route_list.html?cid="+cid+"&rname="+rname; 52 }); 53 54 }); 55 </script> 56 57 58 <header id="header"> 59 <div class="top_banner"> 60 <img src="images/top_banner.jpg" alt=""> 61 </div> 62 <div class="shortcut"> 63 <!-- 未登录状态 --> 64 <div class="login_out"> 65 <a href="login.html">登录</a> 66 <a href="register.html">注册</a> 67 </div> 68 <!-- 登录状态 --> 69 <div class="login"> 70 <!--<span>欢迎回来,admin</span>--> 71 <span id="span_username"></span> 72 <a href="myfavorite.html" class="collection">我的收藏</a> 73 <!--<a href="javascript:location.href=‘exitServlet‘;">退出</a>--> 74 <a href="javascript:location.href=‘user/exit‘;">退出</a> 75 </div> 76 </div> 77 <div class="header_wrap"> 78 <div class="topbar"> 79 <div class="logo"> 80 <a href="/"><img src="images/logo.jpg" alt=""></a> 81 </div> 82 <div class="search"> 83 <input id="search_input" name="" type="text" placeholder="请输入路线名称" class="search_input" autocomplete="off"> 84 <a id="search_button" href="javascript:;" class="search-button">搜索</a> 85 </div> 86 <div class="hottel"> 87 <div class="hot_pic"> 88 <img src="images/hot_tel.jpg" alt=""> 89 </div> 90 <div class="hot_tel"> 91 <p class="hot_time">客服热线(9:00-6:00)</p> 92 <p class="hot_num">400-618-9090</p> 93 </div> 94 </div> 95 </div> 96 </div> 97 </header> 98 <!-- 头部 end --> 99 <!-- 首页导航 --> 100 <div class="navitem"> 101 <ul class="nav" id="category"> 102 <!--<li class="nav-active"><a href="index.html">首页</a></li> 103 <li><a href="route_list.html">门票</a></li> 104 <li><a href="route_list.html">酒店</a></li> 105 <li><a href="route_list.html">香港车票</a></li> 106 <li><a href="route_list.html">出境游</a></li> 107 <li><a href="route_list.html">国内游</a></li> 108 <li><a href="route_list.html">港澳游</a></li> 109 <li><a href="route_list.html">抱团定制</a></li> 110 <li><a href="route_list.html">全球自由行</a></li> 111 <li><a href="favoriterank.html">收藏排行榜</a></li>--> 112 </ul> 113 </div> 114
route_list.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 8 <title>黑马旅游-搜索</title> 9 <link rel="stylesheet" type="text/css" href="css/common.css"> 10 <link rel="stylesheet" href="css/search.css"> 11 <script src="js/jquery-3.3.1.js"></script> 12 <script src="./js/getParameter.js"></script> 13 <script> 14 $(function () { 15 /*var search = location.search; //BOM-location-search:设置或返回从?开始的URL 16 // alert(search); //?cid=5 17 var cid = search.split("=")[1]; //切割字符串,获取cid 18 // alert(cid);*/ 19 20 //利用getParameter.js中封装好的获取方法(自定义) 21 var cid = getParameter("cid"); 22 var rname = getParameter("rname"); //%E7%AA%9D%E5%AB%A9%E5%8F%A0 23 if (rname){ 24 //URI解码 25 rname = window.decodeURIComponent(rname); //窝嫩叠 26 } 27 28 //当页码加载完成后,调用load方法,发送ajax请求加载数据 29 // load(cid); 30 load(cid, null, rname); 31 }); 32 33 // function load(cid, currentPage) { 34 function load(cid, currentPage, rname) { 35 //发送ajax请求,请求route/pageQuery,传递cid 36 $.get( 37 "route/pageQuery", 38 // {cid:cid, currentPage:currentPage}, 39 {cid:cid, currentPage:currentPage, rname:rname}, 40 function (pb) { //解析pagebean数据,展示到页面上 41 // ========================================================================== 42 //1 分页工具条展示 43 44 //1.1 展示总页码和总记录数 45 $("#totalPage").html(pb.totalPage); 46 $("#totalCount").html(pb.totalCount); 47 48 //1.2 展示分页页码 49 var lis = ""; 50 var beforeNum = pb.currentPage - 1; //上一页页码 51 if (beforeNum <= 0){ 52 beforeNum = 1; 53 } 54 55 // var firstPage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ 1 +‘)"><a href="javascript:void(0)">首页</a></li>‘; 56 var firstPage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ 1 +‘,\‘‘+ rname +‘\‘)"><a href="javascript:void(0)">首页</a></li>‘; 57 // var beforePage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ beforeNum +‘)"><a href="javascript:void(0)">上一页</a></li>‘; 58 var beforePage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ beforeNum +‘,\‘‘+ rname +‘\‘)"><a href="javascript:void(0)">上一页</a></li>‘; 59 lis += firstPage; 60 lis += beforePage; 61 62 /*for (var i=1; i<=pb.totalPage; i++){ 63 var li; 64 if (currentPage == i){ //当前页码添加样式 65 li = ‘<li class="curPage" onclick="javascripy:load(‘+ cid +‘,‘+ i +‘)"><a href="javascript:void(0)">‘+ i +‘</a></li>‘; 66 }else { 67 li = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ i +‘)"><a href="javascript:void(0)">‘+ i +‘</a></li>‘; //递归 68 } 69 lis += li; 70 }*/ 71 //------------------------------------------------------------------------- 72 /* 73 1.一共展示10个页码,能够达到前5后4的效果 74 2.如果前边不够5个,后边补齐10个 75 3.如果后边不足4个,前边补齐10个 76 */ 77 var begin; // 开始位置 78 var end ; // 结束位置 79 80 //1 显示10个页码 81 if (pb.totalPage < 10){ 82 //总页码不够10页 83 begin = 1; 84 end = pb.totalPage; 85 }else { 86 //总页码超过10页 87 begin = pb.currentPage - 5; 88 end = pb.currentPage + 4; 89 90 //2 如果前边不够5个,后边补齐10个 91 if (begin < 1){ 92 begin = 1; 93 end = begin + 9; 94 } 95 //3 如果后边不足4个,前边补齐10个 96 if (end > pb.totalPage){ 97 end = pb.totalPage; 98 begin = end - 9; 99 } 100 } 101 102 for (var i=begin; i<=end; i++){ 103 var li; 104 if (currentPage == i){ //当前页码添加样式 105 // li = ‘<li class="curPage" onclick="javascripy:load(‘+ cid +‘,‘+ i +‘)"><a href="javascript:void(0)">‘+ i +‘</a></li>‘; 106 li = ‘<li class="curPage" onclick="javascripy:load(‘+ cid +‘,‘+ i +‘,\‘‘+ rname +‘\‘)"><a href="javascript:void(0)">‘+ i +‘</a></li>‘; 107 }else { 108 // li = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ i +‘)"><a href="javascript:void(0)">‘+ i +‘</a></li>‘; //递归 109 li = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ i +‘,\‘‘+ rname +‘\‘)"><a href="javascript:void(0)">‘+ i +‘</a></li>‘; //递归 110 } 111 lis += li; 112 } 113 //------------------------------------------------------------------------- 114 115 var nextNum = pb.currentPage + 1; //下一页页码 116 if (nextNum > pb.totalPage){ 117 nextNum = pb.totalPage; 118 } 119 120 // var nextPage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ nextNum +‘)"><a href="javascript:void(0)">下一页</a></li>‘; 121 var nextPage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ nextNum +‘,\‘‘+ rname +‘\‘)"><a href="javascript:void(0)">下一页</a></li>‘; 122 // var lastPage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ pb.totalPage +‘)"><a href="javascript:void(0)">尾页</a></li>‘; 123 var lastPage = ‘<li onclick="javascripy:load(‘+ cid +‘,‘+ pb.totalPage +‘,\‘‘+ rname +‘\‘)"><a href="javascript:void(0)">尾页</a></li>‘; 124 lis += nextPage; 125 lis += lastPage; 126 127 $("#pageNum").html(lis); 128 129 //2 列表数据展示 130 var route_lis = ""; 131 for (var i=0; i<pb.list.length; i++){ 132 var route = pb.list[i]; //获取json格式的route对象,{rid:1,rname:"xxx",...} 133 var li = ‘<li>\n‘ + 134 ‘ <div class="img"><img src="‘+ route.rimage +‘" style="width: 299px"></div>\n‘ + 135 ‘ <div class="text1">\n‘ + 136 ‘ <p>‘+ route.rname +‘</p>\n‘ + 137 ‘ <br/>\n‘ + 138 ‘ <p>‘+ route.routeIntroduce +‘</p>\n‘ + 139 ‘ </div>\n‘ + 140 ‘ <div class="price">\n‘ + 141 ‘ <p class="price_num">\n‘ + 142 ‘ <span>¥</span>\n‘ + 143 ‘ <span>‘+ route.price +‘</span>\n‘ + 144 ‘ <span>起</span>\n‘ + 145 ‘ </p>\n‘ + 146 ‘ <p><a href="route_detail.html">查看详情</a></p>\n‘ + 147 ‘ </div>\n‘ + 148 ‘ </li>‘; 149 route_lis += li; 150 } 151 $("#route").html(route_lis); 152 window.scrollTo(0,0); //换页后定位到页面顶部 153 // ========================================================================== 154 }, 155 "json" 156 ); 157 } 158 </script> 159 </head> 160 <body> 161 <!--引入头部--> 162 <div id="header"></div> 163 <div class="page_one"> 164 <div class="contant"> 165 <div class="crumbs"> 166 <img src="images/search.png" alt=""> 167 <p>黑马旅行><span>搜索结果</span></p> 168 </div> 169 <div class="xinxi clearfix"> 170 <div class="left"> 171 <div class="header"> 172 <span>商品信息</span> 173 <span class="jg">价格</span> 174 </div> 175 <ul id="route"> 176 177 </ul> 178 <div class="page_num_inf"> 179 <i></i> 共 180 <span id="totalPage"></span>页<span id="totalCount"></span>条 181 </div> 182 <div class="pageNum"> 183 <ul id="pageNum"> 184 185 </ul> 186 </div> 187 </div> 188 <div class="right"> 189 <div class="top"> 190 <div class="hot">HOT</div> 191 <span>热门推荐</span> 192 </div> 193 <ul> 194 <li> 195 <div class="left"><img src="images/04-search_09.jpg" alt=""></div> 196 <div class="right"> 197 <p>清远新银盏温泉度假村酒店/自由行套...</p> 198 <p>网付价<span>¥<span>899</span>起</span> 199 </p> 200 </div> 201 </li> 202 <li> 203 <div class="left"><img src="images/04-search_09.jpg" alt=""></div> 204 <div class="right"> 205 <p>清远新银盏温泉度假村酒店/自由行套...</p> 206 <p>网付价<span>¥<span>899</span>起</span> 207 </p> 208 </div> 209 </li> 210 <li> 211 <div class="left"><img src="images/04-search_09.jpg" alt=""></div> 212 <div class="right"> 213 <p>清远新银盏温泉度假村酒店/自由行套...</p> 214 <p>网付价<span>¥<span>899</span>起</span> 215 </p> 216 </div> 217 </li> 218 <li> 219 <div class="left"><img src="images/04-search_09.jpg" alt=""></div> 220 <div class="right"> 221 <p>清远新银盏温泉度假村酒店/自由行套...</p> 222 <p>网付价<span>¥<span>899</span>起</span> 223 </p> 224 </div> 225 </li> 226 <li> 227 <div class="left"><img src="images/04-search_09.jpg" alt=""></div> 228 <div class="right"> 229 <p>清远新银盏温泉度假村酒店/自由行套...</p> 230 <p>网付价<span>¥<span>899</span>起</span> 231 </p> 232 </div> 233 </li> 234 </ul> 235 </div> 236 </div> 237 </div> 238 </div> 239 240 <!--引入头部--> 241 <div id="footer"></div> 242 <!--导入布局js,共享header和footer--> 243 <script type="text/javascript" src="js/include.js"></script> 244 </body> 245 246 </html>
1 package cn.haifei.travel.web.servlet; 2 3 import cn.haifei.travel.domain.PageBean; 4 import cn.haifei.travel.domain.Route; 5 import cn.haifei.travel.service.RouteService; 6 import cn.haifei.travel.service.impl.RouteServiceImpl; 7 8 import javax.servlet.ServletException; 9 import javax.servlet.annotation.WebServlet; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 import java.io.IOException; 14 15 @WebServlet("/route/*") 16 public class RouteServlet extends BaseServlet { 17 18 private RouteService service = new RouteServiceImpl(); 19 20 /** 21 * 分页查询 22 * @param request 23 * @param response 24 * @throws ServletException 25 * @throws IOException 26 */ 27 public void pageQuery(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 String currentPageStr = request.getParameter("currentPage"); 29 String pageSizeStr = request.getParameter("pageSize"); 30 String cidStr = request.getParameter("cid"); 31 32 String rname = request.getParameter("rname"); //中文乱码 33 rname = new String(rname.getBytes("iso-8859-1"),"utf-8"); 34 35 int cid = 0; //category类别id 36 // if (cidStr!=null && cidStr.length()>0){ 37 if (cidStr!=null && cidStr.length()>0 && !"null".equals(cidStr)){ 38 cid = Integer.parseInt(cidStr); 39 } 40 int currentPage = 0; //当前页码,如果不传递,则默认为第一页 41 if (currentPageStr!=null && currentPageStr.length()>0){ 42 currentPage = Integer.parseInt(currentPageStr); 43 }else { 44 currentPage = 1; //指定默认值(首次访问currentPageStr==null) 45 } 46 int pageSize = 0; //每页显示条数,如果不传递,默认每页显示5条记录 47 if (pageSizeStr!=null && pageSizeStr.length()>0){ 48 pageSize = Integer.parseInt(pageSizeStr); 49 }else { 50 pageSize = 5; //指定每页显示记录数的默认值 51 } 52 53 // PageBean<Route> pb = service.pageQuery(cid, currentPage, pageSize); 54 PageBean<Route> pb = service.pageQuery(cid, currentPage, pageSize, rname); 55 56 writeValue(pb, response); 57 } 58 59 }
1 package cn.haifei.travel.service; 2 3 import cn.haifei.travel.domain.PageBean; 4 import cn.haifei.travel.domain.Route; 5 6 /** 7 * 旅游路线的service接口 8 */ 9 public interface RouteService { 10 11 /** 12 * 根据类别进行分页查询 13 * @param cid 14 * @param currentPage 15 * @param pageSize 16 * @return 17 */ 18 public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize); 19 public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize, String rname); 20 21 }
1 package cn.haifei.travel.service.impl; 2 3 import cn.haifei.travel.dao.RouteDao; 4 import cn.haifei.travel.dao.impl.RouteDaoImpl; 5 import cn.haifei.travel.domain.PageBean; 6 import cn.haifei.travel.domain.Route; 7 import cn.haifei.travel.service.RouteService; 8 9 import java.util.List; 10 11 public class RouteServiceImpl implements RouteService { 12 13 private RouteDao dao = new RouteDaoImpl(); 14 15 @Override 16 public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize) { 17 //封装PageBean 18 PageBean<Route> pb = new PageBean<>(); 19 20 pb.setCurrentPage(currentPage); 21 pb.setPageSize(pageSize); 22 23 int totalCount = dao.findTotalCount(cid); 24 pb.setTotalCount(totalCount); 25 26 int start = (currentPage - 1) * pageSize; 27 List<Route> list = dao.findByPage(cid, start, pageSize); 28 pb.setList(list); 29 30 int totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize) + 1; 31 pb.setTotalPage(totalPage); 32 33 return pb; 34 } 35 36 37 @Override 38 public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize, String rname) { 39 //封装PageBean 40 PageBean<Route> pb = new PageBean<>(); 41 42 pb.setCurrentPage(currentPage); 43 pb.setPageSize(pageSize); 44 45 int totalCount = dao.findTotalCount(cid, rname); 46 pb.setTotalCount(totalCount); 47 48 int start = (currentPage - 1) * pageSize; 49 List<Route> list = dao.findByPage(cid, start, pageSize, rname); 50 pb.setList(list); 51 52 int totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize) + 1; 53 pb.setTotalPage(totalPage); 54 55 return pb; 56 } 57 }
1 package cn.haifei.travel.dao; 2 3 import cn.haifei.travel.domain.Route; 4 5 import java.util.List; 6 7 public interface RouteDao { 8 9 /** 10 * 根据cid查询总记录数 11 * @param cid 12 * @return 13 */ 14 public int findTotalCount(int cid); 15 public int findTotalCount(int cid, String rname); 16 17 18 /** 19 * 根据cid start pageSize查询当前页的数据集合 20 * @param cid 21 * @param start 22 * @param pageSize 23 * @return 24 */ 25 public List<Route> findByPage(int cid, int start, int pageSize); 26 public List<Route> findByPage(int cid, int start, int pageSize, String rname); 27 28 }
1 package cn.haifei.travel.dao.impl; 2 3 import cn.haifei.travel.dao.RouteDao; 4 import cn.haifei.travel.domain.Route; 5 import cn.haifei.travel.util.JDBCUtils; 6 import org.springframework.jdbc.core.BeanPropertyRowMapper; 7 import org.springframework.jdbc.core.JdbcTemplate; 8 9 import java.util.ArrayList; 10 import java.util.List; 11 12 public class RouteDaoImpl implements RouteDao { 13 14 JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 15 16 @Override 17 public int findTotalCount(int cid) { 18 String sql = "select count(*) from tab_route where cid = ?"; 19 return template.queryForObject(sql, Integer.class, cid); //实际返回Integer,预期返回int,自动拆箱了 20 } 21 22 @Override 23 public int findTotalCount(int cid, String rname) { 24 String sql = "select count(*) from tab_route where 1=1 "; 25 StringBuilder sb = new StringBuilder(sql); 26 List params = new ArrayList(); 27 28 if (cid != 0){ 29 sb.append(" and cid = ? "); 30 params.add(cid); //添加?对应的值 31 } 32 if (rname != null && rname.length()>0){ 33 sb.append(" and rname like ? "); 34 params.add("%" + rname + "%"); 35 } 36 sql = sb.toString(); 37 38 return template.queryForObject(sql, Integer.class, params.toArray()); 39 } 40 41 @Override 42 public List<Route> findByPage(int cid, int start, int pageSize) { 43 String sql = "select * from tab_route where cid = ? limit ?,?"; 44 return template.query(sql, new BeanPropertyRowMapper<>(Route.class), cid, start, pageSize); 45 } 46 47 @Override 48 public List<Route> findByPage(int cid, int start, int pageSize, String rname) { 49 String sql = "select * from tab_route where 1=1 "; 50 StringBuilder sb = new StringBuilder(sql); 51 List params = new ArrayList(); 52 53 if (cid != 0){ 54 sb.append(" and cid = ? "); 55 params.add(cid); //添加?对应的值 56 } 57 if (rname != null && rname.length()>0){ 58 sb.append(" and rname like ? "); 59 params.add("%"+ rname +"%"); 60 } 61 sb.append(" limit ?,? "); 62 params.add(start); 63 params.add(pageSize); 64 sql = sb.toString(); 65 66 return template.query(sql, new BeanPropertyRowMapper<>(Route.class), params.toArray()); 67 } 68 69 }
原文:https://www.cnblogs.com/yppah/p/15005503.html