java 实现的分页导航

最近在复习javaweb, 顺便手写了一个分页实现.之前项目的分页都是用的别人的PageHelper,在这里贴下完整的过程  .

首先是效果图:下面不多bb,直接开整:

项目目录: 本人编辑器是eclipse

首先是Bean:

User类:

package com.paged.pojo;

import java.util.Date;

public class TbUser {
    private Long id;

    private String username;

    private String password;

    private String phone;

    private String email;

    private Date created;

    private Date updated;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone == null ? null : phone.trim();
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email == null ? null : email.trim();
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    public Date getUpdated() {
        return updated;
    }

    public void setUpdated(Date updated) {
        this.updated = updated;
    }
}

PagedBean(这里是重点):

package com.paged.pojo;

import java.util.List;

/**
 * 创建pagedBean类存放数据
 * @author younus
 * 2018年1月16日
 * @param <T>
 * com.paged.pojo
 */
public class PagedBean <T>{
//需要有的属性
	//总页数,数据总条数,当前页码 ,每页数据数量,显示的起始页,显示的尾页,数据库起始索引,封装数据的列表
	private int totalPage;
	private int totalRecord;
	private int pageNumber;
	private int pageSize;
	private int start;
	private int startIndex;
	private int end;
	private List<T>  list;
	
	public PagedBean(int pageNumber,int pageSize,int totalRecord) {
		this.pageNumber=pageNumber;
		this.pageSize=pageNumber;
		this.totalRecord=totalRecord;
		
		
		//totalPage总页数 
		if(totalRecord%pageSize==0) {
			this.totalPage=totalRecord/pageSize;
		}else {
			this.totalPage=totalRecord/pageSize +1;
		}
		//初始索引,这里注意limit 是从0开始索引的
		this.startIndex=(pageNumber-1)*pageSize;
		
		this.start=1;
		this.end=5;
		//显示页数的算法
		if(totalPage<5) {
			this.end=this.totalPage;
			this.start=1;
			
		}else {
			this.start=pageNumber-2;
			this.end=pageNumber+2;
			
			if(this.start<=0) {
				this.start=1;
			}else if(this.end>this.totalPage) {
				this.end=this.totalPage;
				this.start=this.end-5;
			}
		}
		
		
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getTotalRecord() {
		return totalRecord;
	}

	public void setTotalRecord(int totalRecord) {
		this.totalRecord = totalRecord;
	}

	public int getPageNumber() {
		return pageNumber;
	}

	public void setPageNumber(int pageNumber) {
		this.pageNumber = pageNumber;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public int getStart() {
		return start;
	}

	public void setStart(int start) {
		this.start = start;
	}

	public int getStartIndex() {
		return startIndex;
	}

	public void setStartIndex(int startIndex) {
		this.startIndex = startIndex;
	}

	public int getEnd() {
		return end;
	}

	public void setEnd(int end) {
		this.end = end;
	}

	public List<T> getList() {
		return list;
	}

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

工具类(mysql):

package com.paged.utils;


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

public class DBUtil {
	private static String url = "jdbc:mysql://localhost:3306/youyou?useUnicode=true&characterEncoding=utf8";
    private static String user = "root";
    private static String password = "*******";
    
    
    private DBUtil(){}
    //工具类,加载驱动和获取连接对象
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
    }
 //获取连接的方法
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }
 //关闭数据库连接的方法
    public static void close(ResultSet rs, Statement st, Connection conn) {
        try {
            if (rs != null)
                rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (st != null)
                    st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (conn != null)
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
            }
        }
    }
	}

DAO类:

package com.paged.dao;

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

import com.paged.pojo.TbUser;
import com.paged.utils.DBUtil;

public class UserDao {

	public static List<TbUser>  findAllUser(){
		List <TbUser> list =new ArrayList<TbUser>();
		Connection c=null;
		ResultSet rs=null;
		Statement sm=null;
		try {
			c=DBUtil.getConnection();
			
			 sm=c.createStatement();
			String sql="select  * from tb_user";
			 rs=sm.executeQuery(sql);
			
			//键的集合
			
			
			while(rs.next()) {
			TbUser user =new TbUser();
			user.setId((long)rs.getInt(1));
			user.setUsername(rs.getString("username"));
			user.setPassword(rs.getString("password"));
			user.setPhone(rs.getString("phone"));
			user.setEmail(rs.getString("email"));
			user.setCreated(rs.getDate(6));
			user.setUpdated(rs.getDate(7));
			list.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DBUtil.close(rs, sm, c);
		}
		return list;
	}
	
	public static List<TbUser> findPage(int startIndex,int pageSize){
		List<TbUser>  list =new ArrayList<>();
		Connection c=null;
		ResultSet rs=null;
		Statement sm=null;
		try {
			c=DBUtil.getConnection();
			sm=c.createStatement();
			String sql= "select * from tb_user limit "+startIndex+","+pageSize+"";
			rs=sm.executeQuery(sql);
			while (rs.next()) {
				TbUser user =new TbUser();
				user.setId((long)rs.getInt(1));
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				user.setPhone(rs.getString("phone"));
				user.setEmail(rs.getString("email"));
				user.setCreated(rs.getDate(6));
				user.setUpdated(rs.getDate(7));
				list.add(user);
			}
		
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DBUtil.close(rs, sm, c);
			
		}
		return  list;
	}
}
		
		

Service:

package com.paged.service;

import java.util.List;

import com.paged.dao.UserDao;
import com.paged.pojo.PagedBean;
import com.paged.pojo.TbUser;

public class UserService {

	
	public PagedBean<TbUser> findAllUserByPage(int pageNum,int pageSize){
		List<TbUser> list =UserDao.findAllUser();
		int totalRecord=list.size();
		PagedBean<TbUser>  bean = new PagedBean<>(pageNum, pageSize, totalRecord);
		int startIndex = bean.getStartIndex();
		bean.setList(UserDao.findPage(startIndex, pageSize));
		return bean;
	}
} 

Controller:

package com.paged.controller;

import java.io.IOException;
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.paged.pojo.PagedBean;
import com.paged.service.UserService;

/**
 * Servlet implementation class UserController
 */
@WebServlet("/UserController")
public class UserController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
  
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//这一句会导致页面乱码
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
		//定义页面大小
		int pageSize=5;
		
		UserService us=new UserService();
		PagedBean pb=us.findAllUserByPage(pageNumber, pageSize);
		//将bean放入request域中
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
	
		request.setAttribute("pagedBean", pb);
		request.getRequestDispatcher("test.jsp").forward(request, response);
	}

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

}

接下来就是jsp文件:

index转到test.jsp(分页导航的jsp),test里边将显示表格数据的paged.jsp引入

test.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/paged.jsp" %>
<!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>Insert title here</title>
</head>
<body>
             <%-- 构建分页导航 --%>
总共记录条数: ${requestScope.pagedBean.totalRecord},共${requestScope.pagedBean.totalPage }页,当前为${requestScope.pagedBean.pageNumber}页
  <br/>
          <!--  按钮代替     <a href="${pageContext.request.contextPath}/UserController?pageNumber=1">首页</a>-->
          <input type="button" value="首页" onclick="location.href='UserController?pageNumber=1' "> 
            <%--如果当前页为第一页时,就没有上一页这个超链接显示 --%>
            <c:if test="${requestScope.pagedBean.pageNumber ==1 }">
               <c:forEach begin="${requestScope.pagedBean.start}" end="${requestScope.pagedBean.end}" step="1" var="i">
                    <c:if test="${requestScope.pagedBean.pageNumber == i}">
                        ${i}
                     </c:if>                
                     <c:if test="${requestScope.pagedBean.pageNumber != i}">
                     <!--  <a href="${pageContext.request.contextPath}/UserController?pageNumber=${i}">${i}</a>    --> 
                       <input type="button" value="${i} " onclick="location.href='UserController?pageNumber=${i}'">                                     
                       
                    </c:if>                        
                 </c:forEach>
                 <!--   <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}">下一页</a> -->
                  <input type="button" value="下一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}' ">
                 </c:if>
                                  
              <%--如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 --%>
             <c:if test="${requestScope.pagedBean.pageNumber > 1 && requestScope.pagedBean.pageNumber < requestScope.pagedBean.totalPage}">
             <!--  <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}">上一页</a>    -->
             <input type="button" value="上一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}' ">
             
                 <c:forEach begin="${requestScope.pagedBean.start}" end="${requestScope.pagedBean.end}" step="1" var="i">    
                     <c:if test="${requestScope.pagedBean.pageNumber == i}">
                        ${i}
                    </c:if>            
                    <c:if test="${requestScope.pagedBean.pageNumber != i}">
                      <!--    <a href="${pageContext.request.contextPath}/UserController?pageNumber=${i}">${i}</a>  -->
                         <input type="button" value="${i} " onclick="location.href=' UserController?pageNumber=${i}' ">
                                                                
                    </c:if>                        
                </c:forEach>
              <!--  <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}">下一页</a> -->   
                <input type="button" value="下一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber+1}' ">
                
             </c:if>
             
           <%-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 --%>
             <c:if test="${requestScope.pagedBean.pageNumber == requestScope.pagedBean.totalPage}">
              <!--    <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}">上一页</a> -->
              <input type="button" value="上一页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.pageNumber-1}' ">
                 
                 <c:forEach begin="${requestScope.pagedBean.start}" end="${requestScope.pagedBean.end}" step="1" var="i">
                    <c:if test="${requestScope.pagedBean.pageNumber == i}">
                         ${i}
                     </c:if>
                     <c:if test="${requestScope.pagedBean.pageNumber != i}">
                     <!--  <a href="${pageContext.request.contextPath}/UserController?pageNumber=${i}">${i}</a>     -->                                      
                  <input type="button" value="${i}" onclick="location.href=' UserController?pageNumber=${i}' ">
                       
                    </c:if>                
                 </c:forEach>
            </c:if>
             <%--尾页 --%>
           <!--   <a href="${pageContext.request.contextPath}/UserController?pageNumber=${requestScope.pagedBean.totalPage}">尾页</a>-->
        <input type="button" value="尾页" onclick="location.href=' UserController?pageNumber=${requestScope.pagedBean.totalPage}' ">
            
</body>
</html>

paged.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>
<style type="text/css">
.tr_1{
 margin: 10px;
 border: 5px;
 border-color: red;
 padding: 10px;
}
.tr{
background-color: black;
color: white;
}

</style>
</head>
<body>
<h1 style="color:red">这是分页效果</h1>
<table id="user">
	<tr class="tr">
		<td>Id</td>
		<td>用户名</td>
		<td>密码</td>
		<td>邮箱</td>
		<td>电话</td>
		<td>创建时间</td>
		<td>更新时间</td>
	</tr>
	<c:forEach items="${pagedBean.list}" var="TbUser" >
	<tr class="tr_1">
		<td>${TbUser.id}</td>
		<td>${TbUser.username}</td>
		<td>${TbUser.password }</td>
		<td>${TbUser.email }</td>
		<td>${TbUser.phone }</td>
		<td>${TbUser.created}</td>
		<td>${TbUser.updated}</td>
	</tr>
	</c:forEach>
</table>
</body>
</html>


以上就是我自己实现的完整的分页过程,不对的地方欢迎指正!(我是编程菜b)

猜你喜欢

转载自blog.csdn.net/weixin_38158701/article/details/79114389