1、首页 index.jsp 的跳转
web下的index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--只负责请求转发--%>
<jsp:forward page="/client/bookServlet?action=page"></jsp:forward>
复制一份原来的index.jsp到web下的pages下添加文件夹client下
/**
* 首页的分页
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 获取请求的参数 pageNo 和 pageSize
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
//2 调用BookService.page(pageNo,pageSize):Page对象
Page<Book> page = bookService.page(pageNo, pageSize);
//3 保存Page对象到Request域中
req.setAttribute("page",page);
//4 请求转发到pages/manager/book_manager.jsp页面
req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
}
其web.xml配置文件:
<servlet>
<servlet-name>ClientBookServlet</servlet-name>
<servlet-class>com.atguigu.web.ClientBookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ClientBookServlet</servlet-name>
<url-pattern>/client/bookServlet</url-pattern>
</servlet-mapping>
2、分页条的抽取
2.1、抽取分页条中请求地址为 url 变量
1.在 page 对象中添加 url 属性
// 分页条的请求地址
private String url;
2 在 Servlet 程序的 page 分页方法中设置 url 的分页请求地址
BookServlet.java:
Page<Book> page = bookService.page(pageNo, pageSize);
page.setUrl("manager/bookServlet?action=page");
// //3 保存Page对象到Request域中
req.setAttribute("page",page);
ClientBookServlet.java:
//3 保存Page对象到Request域中
req.setAttribute("page",page);
page_nav.jsp:
<%--大 于 首 页 , 才 显 示 --%>
<c:if test="${requestScope.page.pageNo > 1}">
<a href="${requestScope.page.url}&pageNo=1">首页</a>
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageNo-1}">上一页</a>
</c:if>
<c:if test="${requestScope.page.pageNo != i}">
<a href=${requestScope.page.url}&pageNo=${i}>${i}<a/>
</c:if>
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageNo+1}">下一页</a>
<a href="${requestScope.page.url}&pageNo=${requestScope.page.pageTotal}">末页</a>
3、首页价格搜索
BookDao:
/**
* 查询价格在区间[min,max]里的总记录数
* @param min 最低价
* @param max 最高价
* @return 价格在区间[min,max]里的记录条数
*/
Integer queryForPageTotalCountByPrice(int min,int max);
/**
* 查询价格在区间[min,max]里的数据信息
* @param begin 本页数据开始的索引
* @param pageSize 本页显示多少条数据
* @param min 最低价
* @param max 最高价
* @return 返回该查询结果的数据信息集合
*/
List<Book> queryForPageItemsByPrice(int begin,int pageSize,int min,int max);
BookDaoImpl:
@Override
public Integer queryForPageTotalCountByPrice(int min, int max) {
String sql = "select count(*) from t_book where price between ? and ?";
Number count = (Number) queryForSingleValue(sql, min, max);
return count.intValue();
}
@Override
public List<Book> queryForPageItemsByPrice(int begin, int pageSize, int min, int max) {
String sql = "select `id`,`bookName`,`author`,`price`,`sales`,`stock`,`img_path` imgPath from t_book " +
"where price between ? and ? order by price limit ?,?";
return queryForList(Book.class,sql,min,max,begin,pageSize);
}
BookDaoTest:
@Test
public void queryForPageTotalCountByPrice() {
System.out.println(bookDao.queryForPageTotalCountByPrice(0, 20));
}
@Test
public void queryForPageItemsByPrice() {
List<Book> books = bookDao.queryForPageItemsByPrice(0, 2, 0, 20);
for (Book book : books) {
System.out.println(book);
}
}
BookService:
/**
* 价格在区间[min,max]的page对象所含信息
* @param pageNo 第几页
* @param pageSize 一页显示几条数据
* @param min 最低价
* @param max 最高价
* @return
*/
Page<Book> pageByPrice(int pageNo,int pageSize,int min,int max);
BookServiceImpl:
@Override
public Page<Book> pageByPrice(int pageNo, int pageSize, int min, int max) {
Page<Book> page = new Page<Book>();
// 设置每页显示的数量
page.setPageSize(pageSize);
// 求总记录数
Integer pageTotalCount = bookDao.queryForPageTotalCountByPrice(min,max);
// 设置总记录数
page.setPageTotalCount(pageTotalCount);
Integer pageTotal = pageTotalCount / pageSize;
if (pageTotalCount % pageSize > 0) {
pageTotal += 1;
}
// 设置总页码
page.setPageTotal(pageTotal);
//设置当前页为第几页
page.setPageNo(pageNo);
// 求当前页数据的开始索引
int begin = (page.getPageNo() - 1) * pageSize;
// 求当前页数据
List<Book> items = bookDao.queryForPageItemsByPrice(begin,pageSize,min,max);
page.setItems(items);
return page;
}
BookServiceTest:
@Test
public void pageByPrice() {
Page<Book> bookPage = bookService.pageByPrice(1, 4, 0, 30);
System.out.println(bookPage);
}
ClientBookServlet:
protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 获取请求的参数 pageNo 和 pageSize
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
int min = WebUtils.parseInt(req.getParameter("min"), 0);
int max = WebUtils.parseInt(req.getParameter("max"), Integer.MAX_VALUE);
//2 调用BookService.page(pageNo,pageSize):Page对象
Page<Book> page = bookService.pageByPrice(pageNo,pageSize,min,max);
//3 保存Page对象到Request域中
req.setAttribute("page",page);
//4 请求转发到pages/manager/book_manager.jsp页面
req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
}
index.jsp:
<div class="book_cond">
<form action="client/bookServlet" method="get">
<input type="hidden" name="action" value="pageByPrice">
价格:<input id="min" type="text" name="min" value="${param.min}"> 元 -
<input id="max" type="text" name="max" value="${param.max}"> 元
<input type="submit" value="查询" />
</form>
</div>
修改在区间[min,max]里显示出来数据的页码
protected void pageByPrice(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1 获取请求的参数 pageNo 和 pageSize,min,max
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
int pageSize = WebUtils.parseInt(req.getParameter("pageSize"), Page.PAGE_SIZE);
int min = WebUtils.parseInt(req.getParameter("min"), 0);
int max = WebUtils.parseInt(req.getParameter("max"), Integer.MAX_VALUE);
//2 调用BookService.pageByPrice(pageNo,pageSize):Page对象
Page<Book> page = bookService.pageByPrice(pageNo, pageSize, min, max);
StringBuilder sb = new StringBuilder("client/bookServlet?action=pageByPrice");
// 如果最小价格的参数,追加到分页条的地址参数中
if(req.getParameter("min") != null){
sb.append("&min=").append(req.getParameter("min"));
}
// 如果最大价格的参数,追加到分页条的地址参数中
if(req.getParameter("max") != null){
sb.append("&max=").append(req.getParameter("max"));
}
page.setUrl(sb.toString());
//3 保存Page对象到Request域中
req.setAttribute("page",page);
//4 请求转发到pages/manager/book_manager.jsp页面
req.getRequestDispatcher("/pages/client/index.jsp").forward(req,resp);
}