使用jsp实现分页查询——显示数据

第一步:实现分页查询,我们必须要有一个数据较多的数据库,这样才能有分页的效果

这有一个世界各个地区的数据库(也可以使用自己的数据库),如下所示:

DROP TABLE IF EXISTS `region`;
CREATE TABLE `region` (
  `REGION_ID` double NOT NULL,
  `REGION_CODE` varchar(100) NOT NULL,
  `REGION_NAME` varchar(100) NOT NULL,
  `PARENT_ID` double NOT NULL,
  `REGION_LEVEL` double NOT NULL,
  `REGION_ORDER` double NOT NULL,
  `REGION_NAME_EN` varchar(100) NOT NULL,
  `REGION_SHORTNAME_EN` varchar(10) NOT NULL,
  PRIMARY KEY (`REGION_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据库里面有将近5000行数据,这就不一一展示了,能够分页就行

INSERT INTO `region` VALUES ('1', '中国', '中国', '0', '0', '0', 'Zhong Guo', '2');
INSERT INTO `region` VALUES ('2', '110000', '北京市', '1', '0', '0', 'Beijing Shi', 'BJ');
INSERT INTO `region` VALUES ('3', '120000', '天津市', '1', '0', '0', 'Tianjin Shi', 'TJ');
INSERT INTO `region` VALUES ('4', '130000', '河北省', '1', '0', '0', 'Hebei Sheng', 'HE');
INSERT INTO `region` VALUES ('5', '140000', '山西省', '1', '0', '0', 'Shanxi Sheng ', 'SX');
INSERT INTO `region` VALUES ('6', '150000', '内蒙古自治区', '1', '0', '0', 'Nei Mongol Zizhiqu', 'NM');
INSERT INTO `region` VALUES ('7', '210000', '辽宁省', '1', '0', '0', 'Liaoning Sheng', 'LN');
INSERT INTO `region` VALUES ('8', '220000', '吉林省', '1', '0', '0', 'Jilin Sheng', 'JL');
INSERT INTO `region` VALUES ('9', '230000', '黑龙江省', '1', '0', '0', 'Heilongjiang Sheng', 'HL');
INSERT INTO `region` VALUES ('10', '310000', '上海市', '1', '0', '0', 'Shanghai Shi', 'SH');
INSERT INTO `region` VALUES ('11', '320000', '江苏省', '1', '0', '0', 'Jiangsu Sheng', 'JS');
INSERT INTO `region` VALUES ('12', '330000', '浙江省', '1', '0', '0', 'Zhejiang Sheng', 'ZJ');
INSERT INTO `region` VALUES ('13', '340000', '安徽省', '1', '0', '0', 'Anhui Sheng', 'AH');
INSERT INTO `region` VALUES ('14', '350000', '福建省', '1', '0', '0', 'Fujian Sheng ', 'FJ');
INSERT INTO `region` VALUES ('15', '360000', '江西省', '1', '0', '0', 'Jiangxi Sheng', 'JX');
INSERT INTO `region` VALUES ('16', '370000', '山东省', '1', '0', '0', 'Shandong Sheng ', 'SD');
INSERT INTO `region` VALUES ('17', '410000', '河南省', '1', '0', '0', 'Henan Sheng', 'HA');
INSERT INTO `region` VALUES ('18', '420000', '湖北省', '1', '0', '0', 'Hubei Sheng', 'HB');
INSERT INTO `region` VALUES ('19', '430000', '湖南省', '1', '0', '0', 'Hunan Sheng', 'HN');
INSERT INTO `region` VALUES ('20', '440000', '广东省', '1', '0', '0', 'Guangdong Sheng', 'GD');
INSERT INTO `region` VALUES ('21', '450000', '广西壮族自治区', '1', '0', '0', 'Guangxi Zhuangzu Zizhiqu', 'GX');
INSERT INTO `region` VALUES ('22', '460000', '海南省', '1', '0', '0', 'Hainan Sheng', 'HI');
INSERT INTO `region` VALUES ('23', '500000', '重庆市', '1', '0', '0', 'Chongqing Shi', 'CQ');
INSERT INTO `region` VALUES ('24', '510000', '四川省', '1', '0', '0', 'Sichuan Sheng', 'SC');
INSERT INTO `region` VALUES ('25', '520000', '贵州省', '1', '0', '0', 'Guizhou Sheng', 'GZ');
INSERT INTO `region` VALUES ('26', '530000', '云南省', '1', '0', '0', 'Yunnan Sheng', 'YN');
INSERT INTO `region` VALUES ('27', '540000', '西藏自治区', '1', '0', '0', 'Xizang Zizhiqu', 'XZ');
INSERT INTO `region` VALUES ('28', '610000', '陕西省', '1', '0', '0', 'Shanxi Sheng ', 'SN');
INSERT INTO `region` VALUES ('29', '620000', '甘肃省', '1', '0', '0', 'Gansu Sheng', 'GS');
INSERT INTO `region` VALUES ('30', '630000', '青海省', '1', '0', '0', 'Qinghai Sheng', 'QH');
INSERT INTO `region` VALUES ('31', '640000', '宁夏回族自治区', '1', '0', '0', 'Ningxia Huizu Zizhiqu', 'NX');
INSERT INTO `region` VALUES ('32', '650000', '新疆维吾尔自治区', '1', '0', '0', 'Xinjiang Uygur Zizhiqu', 'XJ');
INSERT INTO `region` VALUES ('33', '110100', '市辖区', '2', '0', '0', 'Shixiaqu', '2');
INSERT INTO `region` VALUES ('34', '110200', '县', '2', '0', '0', 'Xian', '2');
INSERT INTO `region` VALUES ('35', '120100', '市辖区', '3', '0', '0', 'Shixiaqu', '2');
INSERT INTO `region` VALUES ('36', '120200', '县', '3', '0', '0', 'Xian', '2');
INSERT INTO `region` VALUES ('37', '130100', '石家庄市', '4', '0', '0', 'Shijiazhuang Shi', 'SJW');
INSERT INTO `region` VALUES ('38', '130200', '唐山市', '4', '0', '0', 'Tangshan Shi', 'TGS');
INSERT INTO `region` VALUES ('39', '130300', '秦皇岛市', '4', '0', '0', 'Qinhuangdao Shi', 'SHP');
INSERT INTO `region` VALUES ('40', '130400', '邯郸市', '4', '0', '0', 'Handan Shi', 'HDS');
INSERT INTO `region` VALUES ('41', '130500', '邢台市', '4', '0', '0', 'Xingtai Shi', 'XTS');
INSERT INTO `region` VALUES ('42', '130600', '保定市', '4', '0', '0', 'Baoding Shi', 'BDS');
INSERT INTO `region` VALUES ('43', '130700', '张家口市', '4', '0', '0', 'Zhangjiakou Shi ', 'ZJK');
INSERT INTO `region` VALUES ('44', '130800', '承德市', '4', '0', '0', 'Chengde Shi', 'CDS');
INSERT INTO `region` VALUES ('45', '130900', '沧州市', '4', '0', '0', 'Cangzhou Shi', 'CGZ');
INSERT INTO `region` VALUES ('46', '131000', '廊坊市', '4', '0', '0', 'Langfang Shi', 'LFS');
INSERT INTO `region` VALUES ('47', '131100', '衡水市', '4', '0', '0', 'Hengshui Shi ', 'HGS');
INSERT INTO `region` VALUES ('48', '140100', '太原市', '5', '0', '0', 'Taiyuan Shi', 'TYN');
INSERT INTO `region` VALUES ('49', '140200', '大同市', '5', '0', '0', 'Datong Shi ', 'DTG');
INSERT INTO `region` VALUES ('50', '140300', '阳泉市', '5', '0', '0', 'Yangquan Shi', 'YQS');

第二步:弄好数据库之后,就可以在idea工具里面做项目准备了……

步骤如下:(1)创建项目

                  (2)导入web应用

                  (3)把Tomcat服务器加进来

                  (4)把Tomcat加入到本项目中

第三步:连接数据库

以下步骤:

(1)先把lib架包复制进来(重点:把lib架包放在web应用里面的WEB-INF下面)前后台都能识别的到这个lib架包

(2)把我们之前写项目的BaseDao接口复制过来,BaseDao接口在每个项目中都能使用的到

(3)还要把配置文件(db.properties)导进来,只需要修改数据库名,方便连接数据库

第四步:项目的准备工作弄好之后,实体类(po)、Dao接口(dao、impl(dao接口里面的实现类))、service接口(业务接口,impl(业务接口的实现类))、servlet(处理器)

Region实体类

//地区的实体类
public class Region {
    //地区编号
    private Integer region_id;
    //地区编码
    private String region_code;
    //地区名称
    private String region_name;
    //地区级别
    private Double region_level;
    private Double region_order;
    //地区英文名称
    private String region_name_en;
    //地区英文名称的简称
    private String region_shortname_en;

    public Integer getRegion_id() {
        return region_id;
    }

    public void setRegion_id(Integer region_id) {
        this.region_id = region_id;
    }

    public String getRegion_code() {
        return region_code;
    }

    public void setRegion_code(String region_code) {
        this.region_code = region_code;
    }

    public String getRegion_name() {
        return region_name;
    }

    public void setRegion_name(String region_name) {
        this.region_name = region_name;
    }

    public Double getRegion_level() {
        return region_level;
    }

    public void setRegion_level(Double region_level) {
        this.region_level = region_level;
    }

    public Double getRegion_order() {
        return region_order;
    }

    public void setRegion_order(Double region_order) {
        this.region_order = region_order;
    }

    public String getRegion_name_en() {
        return region_name_en;
    }

    public void setRegion_name_en(String region_name_en) {
        this.region_name_en = region_name_en;
    }

    public String getRegion_shortname_en() {
        return region_shortname_en;
    }

    public void setRegion_shortname_en(String region_shortname_en) {
        this.region_shortname_en = region_shortname_en;
    }
}

RegionDao接口(没有使用到这个接口)

//地区的dao接口
public interface RegionDao extends BaseDao<Region>{

}

 RegionDaoimpl实现类

//地区dao接口的实现类
public class RegionDaoImpl implements RegionDao {

}

RegionService业务接口

//地区业务接口
public interface RegionService {
    List<Region> findByPage(Integer pageNum,Integer pageSize);

    Integer findlastPage();

}

  RegionServiceimpl

//地区业务的实现类
public class RegionServiceImpl implements RegionService {
    RegionDao regionDao = new RegionDaoImpl();

    @Override
    public List<Region> findByPage(Integer pageNum, Integer pageSize) {
        List<Region> regionList = new ArrayList<>();
        Connection conn = DBUtil.open();
        PreparedStatement pre = null;
        ResultSet rs = null;

        //当前页-1*每页显示的记录数,每页显示的记录数
        String sql = "select * from Region limit ?,?";
        try {
            pre = conn.prepareStatement(sql);
            pre.setObject(1,(pageNum-1)*pageSize);
            pre.setObject(2,pageSize);
            rs = pre.executeQuery();
            while (rs.next()){
                Region region = new Region();
                region.setRegion_id(rs.getInt("region_id"));
                region.setRegion_code(rs.getString("region_code"));
                region.setRegion_name(rs.getString("region_name"));
                region.setRegion_name_en(rs.getString("region_name_en"));
                region.setRegion_shortname_en(rs.getString("region_shortname_en"));
                regionList.add(region);
            }
            return regionList;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.close(rs,pre,conn);
        }
        return null;
    }

    @Override
    public Integer findlastPage() {
        return regionDao.count(Region.class);
    }
}

RegionServlet处理器

@WebServlet("/region.html")
public class RegionServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPut(req, resp);
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Integer pageNum=1;
        String pageIndex = req.getParameter("page");
        if (null != pageIndex){
            pageNum=Integer.valueOf(pageIndex);
        }

        RegionService regionService = new RegionServiceImpl();
        List<Region> regionList = regionService.findByPage(pageNum,15);

        Integer index=0;

        Integer number = regionService.findlastPage();
        if (number%15 != 0){
            index = number/15+1;
        }else{
            index = number/15;
        }

        req.setAttribute("region",regionList);
        req.setAttribute("pages",pageNum);
        req.setAttribute("number",index);

        req.getRequestDispatcher("index.jsp").forward(req,resp);

    }
}

  index.jsp页面:较为简单的分页查询

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>地区首页</title>
  </head>
  <body>
    <div>
      <table style="text-align: center" border="1">
        <thead>
          <tr>
            <th>地区编号</th>
            <th>地区编码</th>
            <th>地区名称</th>
            <th>地区英文名称</th>
            <th>地区英文简称</th>
          </tr>
        </thead>
        <tbody>
        <c:forEach var="b" items="${region}">
          <tr>
            <th>${b.region_id}</th>
            <th>${b.region_code}</th>
            <th>${b.region_name}</th>
            <th>${b.region_name_en}</th>
            <th>${b.region_shortname_en}</th>
          </tr>
        </c:forEach>
        </tbody>
        <tfoot>
          <tr>
            <th style="text-align: center" colspan="6">
              <a href="region.html?page=1">首页</a>
                <c:if test="${pages!=1}">
                   <a href="region.html?page=${pages-1}">上一页</a>
                </c:if>
                <c:if test="${pages==1}">
                    上一页
                </c:if>
                <c:if test="${pages!=number}">
                   <a href="region.html?page=${pages+1}">下一页</a>
                </c:if>
                <c:if test="${pages==number}">
                    下一页
                </c:if>
              <a href="region.html?page=${number}">尾页</a>
            </th>
          </tr>
        </tfoot>
      </table>
    </div>
  </body>
</html>

home.jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>地区首页</title>
</head>
<body>
<div>
    <table style="text-align: center" border="1">
        <thead>
            <tr>
                <th>地区编号</th>
                <th>地区编码</th>
                <th>地区名称</th>
                <th>地区英文名称</th>
                <th>地区英文简称</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach var="b" items="${page.data}">
                <tr>
                    <th>${b.region_id}</th>
                    <th>${b.region_code}</th>
                    <th>${b.region_name}</th>
                    <th>${b.region_name_en}</th>
                    <th>${b.region_shortname_en}</th>
                </tr>
            </c:forEach>
        </tbody>
        <tfoot>
            <tr>
                <td style="text-align: center" colspan="5">
                    <a href="query?pageIndex=${page.homePageIndex}">首页</a>
                    <a href="query?pageIndex=${page.prevPageIndex}">上一页</a>
                    <a href="query?pageIndex=${page.nextPageIndex}">下一页</a>
                    <a href="query?pageIndex=${page.footPageIndex}">尾页</a>
                </td>
            </tr>
            <tr>
                <td colspan="5" style="text-align: center">
                    共有<span style="color: red">${page.count}</span>条数据,
                    分为<span style="color: red">${page.footPageIndex}</span>页,
                    当前处于第<span style="color: red">${page.currPageIndex}</span>页
                </td>
            </tr>
        </tfoot>
    </table>
</div>
</body>
</html>

  util里面的PageBean工具类:

package cn.daling.jsp.region.util;

import java.util.List;

/**
 * 分页类
 */
public class PageBeen<E> {
    //当前页的数据
    private List<E> data;
    //每页显示条数
    private Integer pageSize = 10;
    //总条数
    private Integer count;
    //尾页
    private Integer footPageIndex;
    //首页
    private Integer homePageIndex = 1;
    //上一页
    private Integer prevPageIndex;
    //下一页
    private Integer nextPageIndex;
    //当前页码
    private Integer currPageIndex = 1;


    public List<E> getData() {
        return data;
    }

    public void setData(List<E> data) {
        this.data = data;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public Integer getFootPageIndex() {
        //计算尾页 = 总记录/每页显示条数(不能整除:页数+1)
        this.footPageIndex = this.getCount()/this.getPageSize();
        if (this.getCount()%this.getPageSize() != 0){
            this.footPageIndex += 1;
        }
        return footPageIndex;
    }

    public void setFootPageIndex(Integer footPageIndex) {
        this.footPageIndex = footPageIndex;
    }

    public Integer getHomePageIndex() {
        return homePageIndex;
    }

    public void setHomePageIndex(Integer homePageIndex) {
        this.homePageIndex = homePageIndex;
    }

    public Integer getPrevPageIndex() {
        //计算上一页
        if (this.getCurrPageIndex() == this.getHomePageIndex()){
            return 1;
        }
        this.prevPageIndex = this.getCurrPageIndex()-1;

        return prevPageIndex;
    }

    public void setPrevPageIndex(Integer prevPageIndex) {
        this.prevPageIndex = prevPageIndex;
    }

    public Integer getNextPageIndex() {
        //计算下一页
        if (this.getCurrPageIndex() > this.getFootPageIndex()){
            return this.getFootPageIndex();
        }
        this.nextPageIndex = this.getCurrPageIndex()+1;
        return nextPageIndex;
    }

    public void setNextPageIndex(Integer nextPageIndex) {
        this.nextPageIndex = nextPageIndex;
    }

    public Integer getCurrPageIndex() {
        return currPageIndex;
    }

    public void setCurrPageIndex(Integer currPageIndex) {
        this.currPageIndex = currPageIndex;
    }
}

运行出来的效果如下:


版权声明:本文为qq_52060364原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。