javaWeb实现分页

本文介绍了一种基于JSP的分页功能实现方案,通过创建bean、dao和服务层等模块,有效地解决了大量数据的分页显示问题。文章详细描述了各组件的功能及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客主要实现jsp页面的分页功能。在数据库拥有上千条数据或者更多的时候,一个简单的SQL语句:SELECT * FROM user 是不行的,一个页面不仅不能够显示这么多页面,即使能够显示也不能这么做,在一个就是全部搜索是非常消耗数据库的性能,影响用户的体验。解决方法就是使用:select * from user limit ?,?语句。
分页思路:
1.创建bean包
(1)创建user实体类。
(2)创建page类

    private int pageOfUser=3;//页面大小,初始化为3
    private int totalPage;//页面总数,计算得到
    private int pageNumber=1;//当前页码,初始化为1
    private List<User> list;//记录条件搜索的list
    private int count;//记录总数,在servlet类中获取

2.创建dao包
(1)创建ConnectionJDBC类,实现数据库驱动加载,连接,返回连接对象Connection
(2)创建SelectAll类,使用SELECT * FROM UsersInformation语句返回总数。
(3)创建ShowLimit类,实现条件查找,返回list
3.创建service包
创建Show类,实现dao层方法。
4.创建servlet包
创建ShowUsers包,实现分页逻辑。
5.创建show.jsp

代码如下:
User.java

package com.ysu.bean;

public class User {
    private String name;
    private String password;
    private String email;
    private int id;
    private String mark;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getMark() {
        return mark;
    }
    public void setMark(String mark) {
        this.mark = mark;
    }

}

Pages.java

package com.ysu.bean;

import java.util.List;

public class Pages {
    private int pageOfUser=3;//页面大小,初始化为3
    private int totalPage;//页面总数
    private int pageNumber=1;//当前页码,初始化为1
    private int indexPage;//分页开始的索引
    private List<User> list;//记录条件搜索的list
    private int count;//记录总数
    private int isSeek=0;//0为不索引,1为索引
    public int getPageOfUser() {
        return pageOfUser;
    }
    public void setPageOfUser(int pageOfUser) {
        this.pageOfUser = pageOfUser;
    }
    public void setCount(int count) {
        this.count = count;
        if(count%pageOfUser==0){
            this.totalPage=this.count/this.pageOfUser;
        }else{
            this.totalPage=this.count/this.pageOfUser+1;
        }
    }

    public int getTotalPage() {

        return totalPage;
    }
    public int getIndexPage() {
        return indexPage;
    }
    public void setIndexPage(int indexPage) {
        this.indexPage = indexPage;
    }
    public List<User> getList() {
        return list;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public void setList(List<User> list) {


        this.list = list;
    }
    public int getCount() {
        return count;
    }
    public int getPageNumber() {
        return pageNumber;
    }
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }   
}

ConnectionJDBC.java

package com.ysu.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionJDBC {
    public static Connection getConn(){
        Connection conn=null;

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String url="jdbc:mysql://localhost:3306/UserRegister?user=root&password=1234&useUnicode=true&characterEncoding=utf-8";
        try {
            conn=DriverManager.getConnection(url);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        return conn;
    }
}

SelectAll.java

package com.ysu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.ysu.bean.User;

public class SelectAll {
    public List<User> getAllUser(){
        List<User>list=new ArrayList<User>();

        Connection conn=null;
        PreparedStatement p=null;
        ResultSet rs=null;
        conn=ConnectionJDBC.getConn();
        String sql="SELECT * FROM UsersInformation";
        try {
            p=conn.prepareStatement(sql);
            rs=p.executeQuery();
            while(rs.next()){
                User user=new User();
                user.setEmail(rs.getString(4));
                user.setId(rs.getInt(1));
                user.setName(rs.getString(2));
                user.setPassword(rs.getString(3));
                user.setMark(rs.getString(5));
                list.add(user);
            }
                    } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }
    public int getUserCount(){
        int num=0;  
        Connection conn=null;
        PreparedStatement p=null;
        ResultSet rs=null;
        conn=ConnectionJDBC.getConn();
        String sql="SELECT count(*) FROM UsersInformation";
        try {
            p=conn.prepareStatement(sql);
            rs=p.executeQuery();
            while(rs.next()){
                num=rs.getInt(1);
            }
            conn.close();
                    } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return num; 
    }
}

ShowLimit.java

package com.ysu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ysu.bean.Pages;
import com.ysu.bean.User;

public class ShowLimit {
    public List<User> showlimit(Pages page){
        List<User> list=new ArrayList<User>();
        Connection conn=null;
        PreparedStatement p=null;
        ResultSet rs=null;
        conn=ConnectionJDBC.getConn();
        String sql="SELECT * FROM UsersInformation LIMIT ?,?";
        try {
            p=conn.prepareStatement(sql);
            p.setInt(1, (page.getPageNumber()-1)*3);
            p.setInt(2, page.getPageOfUser());
            rs=p.executeQuery();
            while(rs.next()){
                User user=new User();
                user.setId(rs.getInt(1));
                user.setName(rs.getString(2));
                user.setPassword(rs.getString(3));
                user.setEmail(rs.getString(4));
                user.setMark(rs.getString(5));
                list.add(user);
            }
            conn.close();
                    } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        page.setList(list);
        return list;
    }
}

Show.java

package com.ysu.servic;

import java.util.List;

import com.ysu.bean.Pages;
import com.ysu.bean.User;
import com.ysu.dao.Login;
import com.ysu.dao.SelectAll;
import com.ysu.dao.SelectById;
import com.ysu.dao.ShowLimit;


public class Show {
    //登录
    public boolean getLogin(String name,String password){
        Login log=new Login();
        return log.logins(name, password);
    }
    //查找所有
    public List<User> showUsers(){
        return new SelectAll().getAllUser();
    }
    //部分显示
    public List<User> showLimit(Pages page){
        ShowLimit showlimit=new ShowLimit();
        return showlimit.showlimit(page);
    }
    //按ID查找
    public User getById(int id){
        return new SelectById().getUser(id);
    }
    //得到总数
    public int getCount(){
        return new SelectAll().getUserCount();
    }
}

ShowUsers.java

package com.ysu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ysu.bean.Pages;
import com.ysu.bean.User;
import com.ysu.servic.Show;

/**
 * Servlet implementation class ShowUsers
 */
@WebServlet("/ShowUsers")
public class ShowUsers extends HttpServlet {
    private static final long serialVersionUID = 1L;
    Pages page=new Pages();
    Show s=new Show();

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String key=request.getParameter("key");
        if(key.equals("page")){
            String ID=request.getParameter("pageNum");
            int id=Integer.parseInt(ID);
            if(id<1){
                page.setPageNumber(1);
            }else if(id>page.getTotalPage()){
                page.setPageNumber(page.getTotalPage());
            }else{
                page.setPageNumber(id);
            }
            page.setCount(s.getCount());//初始化总条数
            page.setList(s.showLimit(page));
            request.setAttribute("page", page);
            request.getRequestDispatcher("/show.jsp").forward(request, response);
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>用户信息展示界面</title>
    </head>
    <body>
        <table  border="1">
            <thead>
            <tr>
                <td>ID</td>
                <td>用户名</td>
                <td>密码</td>
                <td>电子邮箱</td>
                <td>备注</td>

            </tr>
            </thead>
            <tbody>
            <c:forEach items="${page.list }" var="user">
                <tr>
                    <td>${user.id }</td>
                    <td>${user.name }</td>
                    <td>${user.password }</td>
                    <td>${user.email }</td>
                    <td>${user.mark }</td>

                </tr>
                </c:forEach>            
                <tr>
                </tr>
            </tbody>
        </table>
        <a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=1">首页</a>
        <a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${page.pageNumber-1 }">上一页</a>
        <c:choose>
        <c:when test="${page.pageNumber <= 3}">
            <c:set var="begins" value="1"></c:set>
            <c:set var="ends" value="5"></c:set>
        </c:when>
        <c:otherwise>
            <c:set var="begins" value="${page.pageNumber-2}"></c:set>
            <c:set var="ends" value="${page.pageNumber+2}"></c:set>
            <c:if test="${ends > page.totalPage }">
                <c:set var="ends" value="${page.totalPage}"></c:set>
                <c:set var="begins" value="${page.pageNumber-4}"></c:set>
            </c:if>
        </c:otherwise>
        </c:choose>
        <c:forEach var="i" begin="${begins }" end="${ends }">

        <c:choose>
            <c:when test="${page.pageNumber==i}">
            【${page.pageNumber }】
            </c:when>
            <c:otherwise>
                <a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${i }">[${i }]</a>
            </c:otherwise>
        </c:choose>
        </c:forEach>

        <a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${page.pageNumber+1 }">下一页</a>
        <a href="http://localhost:8080/showUsers/ShowUsers?key=page&pageNum=${page.totalPage }">末页</a>
        共${page.totalPage }页
        共有${page.count }条记录
    </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值