jsp实现分页(限定显示指定页数)和页面跳转功能 |
您所在的位置:网站首页 › 台式机运行内存一般多大 › jsp实现分页(限定显示指定页数)和页面跳转功能 |
本文主要介绍在jsp中实现分页功能和页面跳转功能,能够实现数据的分页显示和跳转到指定页面的功能,具体效果如图
由于该功能是一个书城项目的一部分,所以数据来源于该项目,具体数据库(数据库方面采用c3p0连接池,使用的是MySQL数据库)文件可以在点击打开链接下载,整个项目可以在点击打开链接下载(不过由于使用的是MyeElipse2013,所以请使用此版本或者更高版本导入工程)。 下面具体介绍一下这个小功能 1. 这个项目的目录结构: 2.显示的数据主要是图书的相关信息因此Bean类是图书Book的相关信息即com.page.book.domain中Book类的相关信息如下 [java] view plain copy print ? package com.page.book.domain; import org.apache.log4j.Category; public class Book { private String bid;//主键 private String bname;//图名 private String author;//作者 private double price;//定价 private double currPrice;//当前价 private double discount;//折扣 private String press;//出版社 private String publishtime;//出版时间 private int edition;//版次 private int pageNum;//页数 private int wordNum;//字数 private String printtime;//刷新时间 private int booksize;//开本 private String paper;//纸质 private Category category;//所属分类 private String image_w;//大图路径 private String image_b;//小图路径 public String getBid() { return bid; } public void setBid(String bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public double getCurrPrice() { return currPrice; } public void setCurrPrice(double currPrice) { this.currPrice = currPrice; } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } public String getPress() { return press; } public void setPress(String press) { this.press = press; } public String getPublishtime() { return publishtime; } public void setPublishtime(String publishtime) { this.publishtime = publishtime; } public int getEdition() { return edition; } public void setEdition(int edition) { this.edition = edition; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getWordNum() { return wordNum; } public void setWordNum(int wordNum) { this.wordNum = wordNum; } public String getPrinttime() { return printtime; } public void setPrinttime(String printtime) { this.printtime = printtime; } public int getBooksize() { return booksize; } public void setBooksize(int booksize) { this.booksize = booksize; } public String getPaper() { return paper; } public void setPaper(String paper) { this.paper = paper; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } public String getImage_w() { return image_w; } public void setImage_w(String image_w) { this.image_w = image_w; } public String getImage_b() { return image_b; } public void setImage_b(String image_b) { this.image_b = image_b; } } package com.page.book.domain; import org.apache.log4j.Category; public class Book { private String bid;//主键 private String bname;//图名 private String author;//作者 private double price;//定价 private double currPrice;//当前价 private double discount;//折扣 private String press;//出版社 private String publishtime;//出版时间 private int edition;//版次 private int pageNum;//页数 private int wordNum;//字数 private String printtime;//刷新时间 private int booksize;//开本 private String paper;//纸质 private Category category;//所属分类 private String image_w;//大图路径 private String image_b;//小图路径 public String getBid() { return bid; } public void setBid(String bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public double getCurrPrice() { return currPrice; } public void setCurrPrice(double currPrice) { this.currPrice = currPrice; } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } public String getPress() { return press; } public void setPress(String press) { this.press = press; } public String getPublishtime() { return publishtime; } public void setPublishtime(String publishtime) { this.publishtime = publishtime; } public int getEdition() { return edition; } public void setEdition(int edition) { this.edition = edition; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getWordNum() { return wordNum; } public void setWordNum(int wordNum) { this.wordNum = wordNum; } public String getPrinttime() { return printtime; } public void setPrinttime(String printtime) { this.printtime = printtime; } public int getBooksize() { return booksize; } public void setBooksize(int booksize) { this.booksize = booksize; } public String getPaper() { return paper; } public void setPaper(String paper) { this.paper = paper; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } public String getImage_w() { return image_w; } public void setImage_w(String image_w) { this.image_w = image_w; } public String getImage_b() { return image_b; } public void setImage_b(String image_b) { this.image_b = image_b; } } 3.dao层的实现 [java] view plain copy print ? package com.page.book.dao; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import cn.itcast.jdbc.TxQueryRunner; import com.page.book.domain.Book; import com.page.pager.Expression; import com.page.pager.PageBean; import com.page.pager.PageConstants; public class BookDao { private QueryRunner qr = new TxQueryRunner(); /** * 按分类查询 * @param cid * @param pc * @return * @throws SQLException */ public PageBean findByCategory(String cid, int pc) throws SQLException { List exprList = new ArrayList(); exprList.add(new Expression("cid", "=", cid)); return findByCriteria(exprList, pc); } /** * 通用的查询方法 * @param exprList * @param pc * @return * @throws SQLException */ private PageBean findByCriteria(List exprList, int pc) throws SQLException { /* * 1. 得到ps * 2. 得到tr * 3. 得到beanList * 4. 创建PageBean,返回 */ /* * 1. 得到ps */ int ps = PageConstants.BOOK_PAGE_SIZE;//每页记录数 /* * 2. 通过exprList来生成where子句 */ StringBuilder whereSql = new StringBuilder(" where 1=1"); List params = new ArrayList();//SQL中有问号,它是对应问号的值 for(Expression expr : exprList) { /* * 添加一个条件上, * 1) 以and开头 * 2) 条件的名称 * 3) 条件的运算符,可以是=、!=、>、、< ... is null,is null没有值 * 4) 如果条件不是is null,再追加问号,然后再向params中添加一与问号对应的值 */ whereSql.append(" and ").append(expr.getName()) .append(" ").append(expr.getOperator()).append(" "); // where 1=1 and bid = ? if(!expr.getOperator().equals("is null")) { whereSql.append("?"); params.add(expr.getValue()); } } /* * 3. 总记录数 */ String sql = "select count(*) from t_book" + whereSql; Number number = (Number)qr.query(sql, new ScalarHandler(), params.toArray()); int tr = number.intValue();//得到了总记录数 /* * 4. 得到beanList,即当前页记录 */ sql = "select * from t_book" + whereSql + " order by orderBy limit ?,?"; params.add((pc-1) * ps);//当前页首行记录的下标 params.add(ps);//一共查询几行,就是每页记录数 List beanList = qr.query(sql, new BeanListHandler(Book.class), params.toArray()); /* * 5. 创建PageBean,设置参数 */ PageBean pb = new PageBean(); /* * 其中PageBean没有url,这个任务由Servlet完成 */ pb.setBeanList(beanList); pb.setPc(pc); pb.setPs(ps); pb.setTr(tr); return pb; } } 4.service层的实现 [java] view plain copy print ? package com.page.book.service; import java.sql.SQLException; import com.page.book.dao.BookDao; import com.page.book.domain.Book; import com.page.pager.PageBean; public class BookService { private BookDao bookDao = new BookDao(); /** * 按分类查 * @param cid * @param pc * @return */ public PageBean findByCategory(String cid, int pc) { try { return bookDao.findByCategory(cid, pc); } catch (SQLException e) { throw new RuntimeException(e); } } } package com.page.book.service; import java.sql.SQLException; import com.page.book.dao.BookDao; import com.page.book.domain.Book; import com.page.pager.PageBean; public class BookService { private BookDao bookDao = new BookDao(); /** * 按分类查 * @param cid * @param pc * @return */ public PageBean findByCategory(String cid, int pc) { try { return bookDao.findByCategory(cid, pc); } catch (SQLException e) { throw new RuntimeException(e); } } } 5.servlet的实现 [java] view plain copy print ? package com.page.book.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.itcast.servlet.BaseServlet; import com.page.book.domain.Book; import com.page.book.service.BookService; import com.page.pager.PageBean; public class BookServlet extends BaseServlet { /** * */ private static final long serialVersionUID = 1L; private BookService bookService = new BookService(); /** * 获取当前页码 * @param req * @return */ private int getPc(HttpServletRequest req) { int pc = 1; String param = req.getParameter("pc"); if(param != null && !param.trim().isEmpty()) { try { pc = Integer.parseInt(param); } catch(RuntimeException e) {} } return pc; } /** * 截取url,页面中的分页导航中需要使用它做为超链接的目标! * @param req * @return */ /* * http://localhost:8080/goods/BookServlet?methed=findByCategory&cid=xxx&pc=3 * /goods/BookServlet + methed=findByCategory&cid=xxx&pc=3 */ private String getUrl(HttpServletRequest req) { String url = req.getRequestURI() + "?" + req.getQueryString(); System.out.println("url:"+url); /* * 如果url中存在pc参数,截取掉,如果不存在那就不用截取。 */ int index = url.lastIndexOf("&pc="); if(index != -1) { url = url.substring(0, index); } return url; } public String findByCategory(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { /* * 1. 得到pc:如果页面传递,使用页面的,如果没传,pc=1 */ int pc = getPc(req); /* * 2. 得到url:... */ String url = getUrl(req); System.out.println("url----"+url); /* * 3. 获取查询条件,本方法就是cid,即分类的id */ String cid = req.getParameter("cid"); /* * 4. 使用pc和cid调用service#findByCategory得到PageBean */ PageBean pb = bookService.findByCategory(cid, pc); /* * 5. 给PageBean设置url,保存PageBean,转发到/jsps/book/list.jsp */ pb.setUrl(url); req.setAttribute("pb", pb); return "f:/pager/pager.jsp";//f代表转发 } } package com.page.book.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.itcast.servlet.BaseServlet; import com.page.book.domain.Book; import com.page.book.service.BookService; import com.page.pager.PageBean; public class BookServlet extends BaseServlet { /** * */ private static final long serialVersionUID = 1L; private BookService bookService = new BookService(); /** * 获取当前页码 * @param req * @return */ private int getPc(HttpServletRequest req) { int pc = 1; String param = req.getParameter("pc"); if(param != null && !param.trim().isEmpty()) { try { pc = Integer.parseInt(param); } catch(RuntimeException e) {} } return pc; } /** * 截取url,页面中的分页导航中需要使用它做为超链接的目标! * @param req * @return */ /* * http://localhost:8080/goods/BookServlet?methed=findByCategory&cid=xxx&pc=3 * /goods/BookServlet + methed=findByCategory&cid=xxx&pc=3 */ private String getUrl(HttpServletRequest req) { String url = req.getRequestURI() + "?" + req.getQueryString(); System.out.println("url:"+url); /* * 如果url中存在pc参数,截取掉,如果不存在那就不用截取。 */ int index = url.lastIndexOf("&pc="); if(index != -1) { url = url.substring(0, index); } return url; } public String findByCategory(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { /* * 1. 得到pc:如果页面传递,使用页面的,如果没传,pc=1 */ int pc = getPc(req); /* * 2. 得到url:... */ String url = getUrl(req); System.out.println("url----"+url); /* * 3. 获取查询条件,本方法就是cid,即分类的id */ String cid = req.getParameter("cid"); /* * 4. 使用pc和cid调用service#findByCategory得到PageBean */ PageBean pb = bookService.findByCategory(cid, pc); /* * 5. 给PageBean设置url,保存PageBean,转发到/jsps/book/list.jsp */ pb.setUrl(url); req.setAttribute("pb", pb); return "f:/pager/pager.jsp";//f代表转发 } } 6.关于分页的相关类的实现 [java] view plain copy print ? package com.page.pager; public class PageConstants { public static final int BOOK_PAGE_SIZE = 12;//图书每页记录数 } package com.page.pager; public class PageConstants { public static final int BOOK_PAGE_SIZE = 12;//图书每页记录数 } 7.pageBean的实现 [java] view plain copy print ? package com.page.pager; import java.util.List; /** * 分页Bean,它会在各层之间传递 * * @param */ public class PageBean { private int pc;//当前页码 private int tr;//总记录数 private int ps;//每页记录数 private String url;//请求路径和参数,例如BookServlet?method=findXXX&cid=1&bname=2 private List beanList; // 计算总页数 public int getTp() { int tp = tr / ps; return tr % ps == 0 ? tp : tp + 1; } public int getPc() { return pc; } public void setPc(int pc) { this.pc = pc; } public int getTr() { return tr; } public void setTr(int tr) { this.tr = tr; } public int getPs() { return ps; } public void setPs(int ps) { this.ps = ps; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public List getBeanList() { return beanList; } public void setBeanList(List beanList) { this.beanList = beanList; } } package com.page.pager; import java.util.List; /** * 分页Bean,它会在各层之间传递 * * @param */ public class PageBean { private int pc;//当前页码 private int tr;//总记录数 private int ps;//每页记录数 private String url;//请求路径和参数,例如BookServlet?method=findXXX&cid=1&bname=2 private List beanList; // 计算总页数 public int getTp() { int tp = tr / ps; return tr % ps == 0 ? tp : tp + 1; } public int getPc() { return pc; } public void setPc(int pc) { this.pc = pc; } public int getTr() { return tr; } public void setTr(int tr) { this.tr = tr; } public int getPs() { return ps; } public void setPs(int ps) { this.ps = ps; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public List getBeanList() { return beanList; } public void setBeanList(List beanList) { this.beanList = beanList; } } 8.数据库辅助类 [java] view plain copy print ? package com.page.pager; public class Expression { private String name; private String operator; private String value; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public String toString() { return "Expression [name=" + name + ", operator=" + operator + ", value=" + value + "]"; } public Expression() { super(); // TODO Auto-generated constructor stub } public Expression(String name, String operator, String value) { super(); this.name = name; this.operator = operator; this.value = value; toString(); } } package com.page.pager; public class Expression { private String name; private String operator; private String value; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public String toString() { return "Expression [name=" + name + ", operator=" + operator + ", value=" + value + "]"; } public Expression() { super(); // TODO Auto-generated constructor stub } public Expression(String name, String operator, String value) { super(); this.name = name; this.operator = operator; this.value = value; toString(); } } 9.c3p0文件的配置 [html] view plain copy print ? jdbc:mysql://localhost:3306/goods?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true ]]> com.mysql.jdbc.Driver root 906363842aq 3 10 2 10 com.mysql.jdbc.Driver root 906363842aq 3 10 2 10 10.分页前端的操作 [html] view plain copy print ? function _go() { var pc = $("#pageCode").val();//获取文本框中的当前页码 if(!/^[1-9]\d*$/.test(pc)) {//对当前页码进行整数校验 alert('请输入正确的页码!'); return; } if(pc > ${pb.tp}) {//判断当前页码是否大于最大页 alert('请输入正确的页码!'); return; } location = "${pb.url}&pc=" + pc; } 书名 书价 折扣 作者 出版社 出版时间 ${book.bname } ${book.price } ${book.discount }折 ${book.author } ${book.press } ${book.publishtime } 上一页 上一页 begin=1, end=最大页 2. 通过公式设置begin和end,begin=当前页-1,end=当前页+3 3. 如果begintp, 让begin=tp-5, end=tp --%> ${i } ${i } function _go() { var pc = $("#pageCode").val();//获取文本框中的当前页码 if(!/^[1-9]\d*$/.test(pc)) {//对当前页码进行整数校验 alert('请输入正确的页码!'); return; } if(pc > ${pb.tp}) {//判断当前页码是否大于最大页 alert('请输入正确的页码!'); return; } location = "${pb.url}&pc=" + pc; } 书名 书价 折扣 作者 出版社 出版时间 ${book.bname } ${book.price } ${book.discount }折 ${book.author } ${book.press } ${book.publishtime } 上一页 上一页 begin=1, end=最大页 2. 通过公式设置begin和end,begin=当前页-1,end=当前页+3 3. 如果begintp, 让begin=tp-5, end=tp --%> ${i } ${i } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |