jsp+servlet分页查询

分页查询

  1. 减少服务器内存开销
  2. 提高用户体验

效果图

思绪图


分页显示Bean文件代码

package cn.ytmj.findlist.domain;

import java.util.List;

/**
 * @author rui
 * @create 2019-08-17 23:34
 * 分页对象
 * 使用泛型为多种页面提供服务
 */
public class PageBean<T> {
    private int totalCount;  //总记录数
    private int  totalPage; // 总页数
    private List<T> list;   //每页的数据list集合
    private int currentPage; //当前页码
    private int rows; //每页显示的条数
    public PageBean(){}

    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 List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    @Override
    public String toString() {
        return "PageBean{" +
                "totalCount=" + totalCount +
                ", totalPage=" + totalPage +
                ", list=" + list +
                ", currentPage=" + currentPage +
                ", rows=" + rows +
                '}';
    }
}

FindUserByPageServlet代码

@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取数据
        String currentPage = request.getParameter("currentPage");
        String rows = request.getParameter("rows");
        if(null==currentPage||"".equals(currentPage)){
            currentPage="1";
        }
        if(null==rows||"".equals(rows)){
            rows="5";
        }
        //调用service
        UserService userService = new UserServiceImpl();
        PageBean<User> pageBean = userService.findUserByPage(Integer.parseInt(currentPage), Integer.parseInt(rows));
        request.setAttribute("pageBean", pageBean);
        //转发
        request.getRequestDispatcher("/list.jsp").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
}

service

PageBean<User> findUserByPage(int currentPage, int rows);

serviceimpl

   public class UserServiceImpl implements UserService {
    UserDao userDao = new UserDaoImpl();
   @Override
    public PageBean<User> findUserByPage(int currentPage, int rows) {
        PageBean<User> pageBean = new PageBean<>();
        if (currentPage <= 0) {
            currentPage = 1;
        }
        int totalCount = userDao.findTotalCount();
        //计算总页数
        int totalPage = totalCount % ows == 0 ? totalCount / rows : totalCount / rows + 1;
        pageBean.setTotalPage(totalPage);
        if (currentPage > totalPage) {
            currentPage = totalPage;
        }
        List<User> list = userDao.findUserByPage(currentPage, rows);

        pageBean.setTotalCount(totalCount);
        pageBean.setCurrentPage(currentPage);
        pageBean.setRows(rows);
        pageBean.setList(list);

        return pageBean;
    }
}

dao

    //查询当前页面的所有数据
    List<User> findUserByPage(int currentPage, int rows);
    //总条数
    int findTotalCount();

daoimpl

  • 通过JDBCUtils获取DataSource

    package cn.ytmj.findlist.util;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    
    import javax.sql.DataSource;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;
    
    /**
     * JDBC工具类 使用Durid连接池
     */
    public class JDBCUtils {
    
        private static DataSource ds ;
    
        static {
    
            try {
                //1.加载配置文件
                Properties pro = new Properties();
                //使用ClassLoader加载配置文件,获取字节输入流
                InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                pro.load(is);
    
                //2.初始化连接池对象
                ds = DruidDataSourceFactory.createDataSource(pro);
    
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取连接池对象
         */
        public static DataSource getDataSource(){
            return ds;
        }
    
        /**
         * 获取连接Connection对象
         */
        public static Connection getConnection() throws SQLException {
            return  ds.getConnection();
        }
    }
    
 public class UserDaoImpl implements UserDao {
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
    @Override
    public List<User> findUserByPage(int currentPage, int rows) {
        String sql = "select * from user limit ? , ? ";
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class), (currentPage - 1) * rows, rows);
        return list;
    }

    @Override
    public int findTotalCount() {
        String sql = "select count(*) from user";
        int count = jdbcTemplate.queryForObject(sql,Integer.class);
        return count;
    }
 }

jsp页面分页显示相关代码

Bootstrap分页按钮模板(轻微修改),以备后用

            <div style="float: left">
                <nav>
                    <ul class="pagination">
                        <li>
                            <a href="#" aria-label="Previous">
                                <span aria-hidden="true">&laquo;</span>
                            </a>
                        </li>
                        <li class="active"><a href="#">1 <span class="sr-only"></span></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="#" aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                            </a>
                        </li>
                        <span style="font-size: 25px ;margin-left: 5px">共16条数据,共4页</span>
                    </ul>
                </nav>
            </div>

修改后jsp代码

 <div style="float: left">
                <nav>
                    <ul class="pagination">
                        <%-- 判断是否是第一页--%>
                        <c:if test="${pageBean.currentPage==1}">
                        <li class="disabled">
                            </c:if>
                            <c:if test="${pageBean.currentPage!=1}">
                        <li>
                            </c:if>
                            <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage-1}&rows=5"
                               aria-label="Previous">
                                <span aria-hidden="true">&laquo;</span>
                            </a>
                        </li>
                        <c:forEach var="i" varStatus="s" step="1" begin="1" end="${pageBean.totalPage}">
                            <c:if test="${pageBean.currentPage == i}">
                                <li class="active">

                                    <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5"

                                       name="li">${i}</a></li>
                            </c:if>
                            <c:if test="${pageBean.currentPage != i}">
                                <li>
                                    <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5"
                                       name="li">${i}</a></li>
                            </c:if>
                        </c:forEach>
                        <%-- 判断是否是最后页--%>
                        <c:if test="${pageBean.currentPage >= pageBean.totalPage}">
                        <li class="disabled">
                            </c:if>
                            <c:if test="${pageBean.currentPage!=pageBean.totalPage}">
                        <li>
                            </c:if>
                            <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage+1}&rows=5"
                               aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                            </a>
                        </li>
                        <span style="font-size: 25px ;margin-left: 5px">共${pageBean.totalCount}条数据,共${pageBean.totalPage}页</span>
                    </ul>
                </nav>
            </div>
        </div>

原文地址:https://www.cnblogs.com/PoetryAndYou/p/11372296.html

时间: 2024-10-07 16:56:56

jsp+servlet分页查询的相关文章

Servlet分页查询

分页查询: 1.逻辑分页查询:用户第一次访问时就把全部数据访问出来,添加到一个大集合中,然后放到session中,进行转发.通过页码等的计算,把要显示的内容添加到一个小集合中,转发.遍历小集合以显示当前页码的数据 代码实现: Dao: package general.page.query; import java.lang.reflect.InvocationTargetException;import java.sql.Connection;import java.sql.PreparedSt

Java_Web三大框架之Hibernate+jsp+HQL分页查询

分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { private int id;//房屋id private HouseType type;//房屋类型 private Users2 user;//用户 private Street street;//街道 private String title;//标题 private String descr

SpringMVC Servlet 分页查询接收参数

@RequestMapping("/sendHistory") public ModelAndView sendrhistory(HttpServletRequest req, HttpServletResponse rep, @RequestParam int p) throws Exception { System.out.println("start..."); String a=req.getParameter("status"); Mo

Jsp/servlet分页五要素

分页5要素: * 1)pageIndex 当前页 * 2)startIndex 从第几条数据开始 * 3)countAll 总条目数 * 4)pageSize 每页大小 * 5)pageCount 总共多少页 实例: 2.页面处理核心在于处理好第一页.中间页面.尾部页面:整体逻辑是:第一页我们写固定,最后一页也写固定,中间按照每页大小灵活变动: 3.控制好实现效果,用好以下标签即可,需要先导入JSTL包. <c:forEach var="" items="${传过来的值

Servlet+JavaBean+JSP真假分页技术详解

说明:分页技术分为真分页和假分页,具体采用哪种技术需要根据需求自我抉择.其实两者之间实现区别并不是太大.在分页之前我们需要搞明白对谁进行分页,一般情况是将数据封装到一个list集合中,明白这这一点问题基本上就已经解决了.(编写匆促如有错误请联系我) 下面首先介绍真分页. 方法一: 为了大家学习起来方便, 我将在项目中用到的内容都放在这个文档中,所以可能会比较萝莉啰嗦. 1.构建数表,字段如下 goods goodid int goodname varchar(45) price flaot 2,

JSP+Servlet+javabean+oracle实现页面多条件模糊查询

之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写oracle,查了一下资料试了一下,把代码帖出来 oracle的数据源配置也不同: driverName=oracle.jdbc.driver.OracleDriver url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl username=marketManag

javabean+servlet+jsp实现分页

前端实现用ligerUI实现分页,感觉用框架确实简单,闲着无聊,模拟着liger的分页界面实现了一遍(只要是功能,样式什么无视) 这里用基础的三层架构+servlet+jsp实现,思路很简单,把所有分页相关信息写入到一个pagebean类里面,service返回这个bean类,每次分页查询时都从该bean里查找信息.只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等 这是ligerUI实现的分页样式(实现过程我的上一篇博客有写) 模拟实现过程: 目录结

JSP+Servlet+javabean实现页面多条件模糊查询

需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标题关键字,点GO按扭 3.选择分类,再输入关键字,点GO按扭 我这里用了MVC分层模式来进行的,所以一步步讲解吧,上源码: 因为我一个class里写了很多不同的业务,所以帖代码只帖当前步 dao层: 1 //当前页显示的新闻信息pageNo 当前页码,pagePerCount是每页多少条数据 2 p

JSP+Servlet+javabean+mysql实现页面多条件模糊查询(转载)

需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标题关键字,点GO按扭 3.选择分类,再输入关键字,点GO按扭 我这里用了MVC分层模式来进行的,所以一步步讲解吧,上源码: 因为我一个class里写了很多不同的业务,所以帖代码只帖当前步 dao层: 1 //当前页显示的新闻信息pageNo 当前页码,pagePerCount是每页多少条数据 2 p