以下是一个简单的实现示例,包括entity层、dao层和controller层的代码,并添加了必要的注释说明。

实体类PageData:

public class PageData<T> {
    private int totalPages; // 总页数
    private int pageSize; // 每页数据数量
    private int currentPage; // 当前页数
    private int totalDataCount; // 数据总数
    private List<T> currentPageDataList; // 当前页面的数据
    private int startIndex; // 每页的起始下标
    private int endIndex; // 每页的结束下标
    
    // 省略getter和setter方法
}

DAO层:

public class UserDao {
    // 分页查询用户数据
    public PageData<User> getUsersByPage(int currentPage, int pageSize) {
        // 假设数据库表名为users
        String sql = "SELECT * FROM users LIMIT ?, ?";
        
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(sql)) {
            
            // 计算每页的起始下标和结束下标
            int startIndex = (currentPage - 1) * pageSize;
            int endIndex = startIndex + pageSize;
            
            stmt.setInt(1, startIndex);
            stmt.setInt(2, pageSize);
            
            try (ResultSet rs = stmt.executeQuery()) {
                List<User> userList = new ArrayList<>();
                while (rs.next()) {
                    User user = new User();
                    // 从结果集中读取数据,并将数据封装到User对象中
                    // ...
                    userList.add(user);
                }
                
                // 查询总数据数量
                int totalDataCount = getTotalDataCount();
                
                // 计算总页数
                int totalPages = (int) Math.ceil((double) totalDataCount / pageSize);
                
                PageData<User> pageData = new PageData<>();
                pageData.setCurrentPage(currentPage);
                pageData.setPageSize(pageSize);
                pageData.setTotalPages(totalPages);
                pageData.setTotalDataCount(totalDataCount);
                pageData.setCurrentPageDataList(userList);
                pageData.setStartIndex(startIndex);
                pageData.setEndIndex(endIndex);
                
                return pageData;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    // 获取数据总数
    private int getTotalDataCount() {
        // 执行查询总数据数量的SQL语句
        // ...
        return 0; // 假设返回值为数据总数
    }
    
    // 获取数据库连接
    private Connection getConnection() {
        // 获取数据库连接的代码
        // ...
        return null; // 假设返回值为数据库连接
    }
}

Controller层(Servlet):

@WebServlet("/userList")
public class UserListServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int currentPage = 1; // 默认当前页数为1
        int pageSize = 15; // 每页数据数量
        
        // 获取页面传递的当前页数
        String currentPageStr = request.getParameter("currentPage");
        if (currentPageStr != null && !currentPageStr.isEmpty()) {
            currentPage = Integer.parseInt(currentPageStr);
        }
        
        UserDao userDao = new UserDao();
        PageData<User> pageData = userDao.getUsersByPage(currentPage, pageSize);
        
        request.setAttribute("pageData", pageData);
        request.getRequestDispatcher("userList.jsp").forward(request, response);
    }
}

JSP页面(userList.jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>User List</title>
</head>
<body>
    <h1>User List</h1>
    
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Age</th>
            <!-- 其他字段列 -->
        </tr>
        
        <c:forEach var="user" items="${pageData.currentPageDataList}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
                <!-- 其他字段值 -->
            </tr>
        </c:forEach>
    </table>
    
    <div>
        <a href="${pageContext.request.contextPath}/userList?currentPage=${pageData.currentPage-1}">上一页</a>
        
        <c:forEach var="pageNum" begin="1" end="${pageData.totalPages}">
            <a href="${pageContext.request.contextPath}/userList?currentPage=${pageNum}">${pageNum}</a>
        </c:forEach>
        
        <a href="${pageContext.request.contextPath}/userList?currentPage=${pageData.currentPage+1}">下一页</a>
    </div>
</body>
</html>

在这个示例中,通过UserDao的getUsersByPage方法实现了分页查询。在UserListServlet中获取当前页数和每页数据数量,并调用UserDao的方法获取分页数据。然后将获取到的PageData对象设置为请求属性,并将请求转发到userList.jsp页面进行展示。在userList.jsp中,使用JSTL的forEach标签遍历PageData中的currentPageDataList,将数据展示在表格中,并使用超链接实现上一页和下一页的跳转

jdbc连接数据库对数据库进行查询并通过servlet和jsp的交互让数据展示在jsp中。现因为数据量的增多需要进行分页查询请在entity层存放分页查询所需的数据并封装成一个实体类属性有总页数每页需存放的数据的数量比如说15条数据需存放5页那就是3条当前页数当前在第几页数据的总数比如说一共有15条数据当前页面的数据并存放在集合里比如说:private ListT currentPageDataL

原文地址: http://www.cveoy.top/t/topic/iovU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录