分页的实现有很多种,这只是其中的一种,我想在登录注册完成后直接跳转出的页面上直接显示出学生的全部信息。下面的图片是分页实现的结果。
以下是代码实现部分
1.首先建pagebean对象类,pagebean里的成员变量有pc(当前页页码),ps(每页的记录显示数),tr(数据库中的总记录数),url(访问地址),beanlist(结果集)。这些都是我们所要的得到的。
import java.util.List;
public class PageBean<T> {
private int pc; //当前页页码
private int ps; //每页显示的记录数的个数
private int tr; //总的数据库中数据的条数
private String url; //地址
private List<T> beanlist; //结果集
public int getTp(){
int tp = tr/ps;
return tr%ps == 0 ? tp : tp+1;
}
public int getPc() {
return pc;
}
public void setPc(int pc) {
this.pc = pc;
}
public int getPs() {
return ps;
}
public void setPs(int ps) {
this.ps = ps;
}
public int getTr() {
return tr;
}
public void setTr(int tr) {
this.tr = tr;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<T> getBeanlist() {
return beanlist;
}
public void setBeanlist(List<T> beanlist) {
this.beanlist = beanlist;
}
}
2.
1)建接口类,用来得到总记录数等相关量。
package cn.edu.hpu.service;
import cn.edu.hpu.model.PageBean;
import cn.edu.hpu.model.Studentmodel;
public interface StudentDao {
public PageBean<Studentmodel> findByPageBean(int pc);
}
2)接口类的实现。
package cn.edu.hpu.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mysql.jdbc.Statement;
import cn.edu.hpu.model.PageBean;
import cn.edu.hpu.model.Studentmodel;
import cn.edu.hpu.util.Util;
public class StudentDaoImpl implements StudentDao {
@Override
public PageBean<Studentmodel> findByPageBean(int pc) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
/**
* 1. ps(每页记录数)
*/
int ps = 6;
try {
conn = Util.getConnection();
st = (Statement) conn.createStatement();
/**
* 2.tr 获得总记录数
*/
int tr = 0;
String sql = "SELECT COUNT(*) FROM student1";
rs = st.executeQuery(sql);
while(rs.next()){
tr = rs.getInt("count(*)");
}
/**
* 3. 数据集合
* SELECT * FROM t_user LIMIT 0,3
*
* 1.每页第一条数据的下标begin
* 2.每页记录数ps 从begin开始查ps条数据
*/
List<Studentmodel> list = new ArrayList<Studentmodel>();
int begin = (pc-1)*ps;
sql = "SELECT * FROM student1 LIMIT "+ begin +","+ps;
rs = st.executeQuery(sql);
//遍历结果集 将studentmodel中的东西封装起来
while(rs.next()){
Studentmodel studentmodel = new Studentmodel();
studentmodel.setId(rs.getInt("id"));
studentmodel.setName(rs.getString("name"));
studentmodel.setGrade(rs.getString("grade"));
studentmodel.setGender(rs.getString("gender"));
studentmodel.setAge(rs.getInt("age"));
studentmodel.setAddress(rs.getString("address"));
//
list.add(studentmodel);
}
//生成pagebean对象
PageBean<Studentmodel> pageBean = new PageBean<Studentmodel>();
pageBean.setPc(pc);
pageBean.setPs(ps);
pageBean.setTr(tr);
pageBean.setBeanlist(list);
return pageBean;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
3.建servlet类。
package cn.edu.hpu.service;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.mysql.jdbc.Statement;
import cn.edu.hpu.model.PageBean;
import cn.edu.hpu.model.Studentmodel;
import cn.edu.hpu.util.Util;
public class StudentDaoImpl implements StudentDao {
@Override
public PageBean<Studentmodel> findByPageBean(int pc) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
/**
* 1. ps(每页记录数)
*/
int ps = 6;
try {
conn = Util.getConnection();
st = (Statement) conn.createStatement();
/**
* 2.tr 获得总记录数
*/
int tr = 0;
String sql = "SELECT COUNT(*) FROM student1";
rs = st.executeQuery(sql);
while(rs.next()){
tr = rs.getInt("count(*)");
}
/**
* 3. 数据集合
* SELECT * FROM t_user LIMIT 0,3
*
* 1.每页第一条数据的下标begin
* 2.每页记录数ps 从begin开始查ps条数据
*/
List<Studentmodel> list = new ArrayList<Studentmodel>();
int begin = (pc-1)*ps;
sql = "SELECT * FROM student1 LIMIT "+ begin +","+ps;
rs = st.executeQuery(sql);
//遍历结果集 将studentmodel中的东西封装起来
while(rs.next()){
Studentmodel studentmodel = new Studentmodel();
studentmodel.setId(rs.getInt("id"));
studentmodel.setName(rs.getString("name"));
studentmodel.setGrade(rs.getString("grade"));
studentmodel.setGender(rs.getString("gender"));
studentmodel.setAge(rs.getInt("age"));
studentmodel.setAddress(rs.getString("address"));
//
list.add(studentmodel);
}
//生成pagebean对象
PageBean<Studentmodel> pageBean = new PageBean<Studentmodel>();
pageBean.setPc(pc);
pageBean.setPs(ps);
pageBean.setTr(tr);
pageBean.setBeanlist(list);
return pageBean;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
至此完成了pagebean中那几个变量的得到和相关的处理操作。
4.写jsp页面。
1)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'success.jsp' starting page</title>
<style type="text/css">
.body{background-image:url("1.jpg");width: 1200px;height: 600px;margin-left: 30px;margin-top:10px}
.hh{padding-top:0.05px;text-align: center;}
.a{width:1200;heigh:500px;}
.b{float:left;width:100px;height:500px;}
.c{float:right;width:1100px;height:500px;}
input{
border-radius:30px;border-color:coral;height:30px;}
</style>
</head>
<body>
<div class="body">
<h1 style="font-family:华文楷体;color:purple;" >欢迎你!<%=session.getAttribute("username") %></h1>
<div class="hh"> <center style="font-family:华文楷体"><h1>欢迎登陆教务处系统</h1></center></div>
<div class="a">
<div class="b">
<a href="tianjia.jsp"><h1 style="font-family:华文楷体">添加</h1></a><br>
<a href="shanchu.jsp"><h2 style="font-family:华文楷体">删除</h2></a><br>
<a href="gengxin.jsp"><h2 style="font-family:华文楷体">更新</h2></a><br>
<a href="chazhao.jsp"><h1 style="font-family:华文楷体">查找</h1></a>
</div>
<div class="c">
<center>
<br>
<table border="3" align="center" width=850px; height=350px;>
<tr>
<td>ID:</td>
<td>Name:</td>
<td>Grade:</td>
<td>Gender:</td>
<td>Age:</td>
<td>Address:</td>
</tr>
<c:forEach items="${pb.beanlist }" var="studentmodel">
<tr>
<td>${studentmodel.id }</td>
<td>${studentmodel.name }</td>
<td>${studentmodel.grade }</td>
<td>${studentmodel.gender}</td>
<td>${studentmodel.age}</td>
<td>${studentmodel.address}</td>
</tr>
</c:forEach>
</table><br><br>
<%@include file="/Page.jsp" %>
</center>
</div>
</div>
</div>
</body>
</html>
这个jsp其实和上一篇信息管理系统的增删改查是同一个jsp,关于增删改查的部分和分页结果的实现都在一个页面上,也就是登录成功后跳转到的页面。
2)以下的jsp是关于分页实现时候显示的 上一页1 2 3 4....下一页 的相关设置。这部分是很关键的。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'Page.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h3>
<!-- 上一页: 失效:pc=1 有效:pc!=1-->
<c:choose>
<c:when test="${pb.pc eq 1 }">上一页</c:when>
<c:otherwise><a href="${pb.url }&pc=${pb.pc -1}">上一页</c:otherwise>
</c:choose>
<!-- 显示页码(6) :1.建立两个变量-->
<c:choose>
<c:when test="${pb.tp <6 }">
<c:set var="begin" value="1"/>
<c:set var="end" value="${pb.tp }"/>
</c:when>
<c:otherwise>
<c:set var="begin" value="${pb.pc-2 }"/>
<c:set var="end" value="${pb.pc+3 }"/>
<c:if test="${begin < 1 }">
<c:set var="begin" value="1"/>
<c:set var="end" value="6"/>
</c:if>
<c:if test="${end > pb.tp }">
<c:set var="begin" value="${pb.tp-5 }"/>
<c:set var="end" value="${pb.tp }"/>
</c:if>
</c:otherwise>
</c:choose>
<!-- 2.显示
1.当前页不可被点击
2.非当前页可被点击 -->
<c:forEach begin="${begin }" end="${end }" var="page" >
<c:choose>
<c:when test="${pb.pc eq page }">${page }</c:when>
<c:otherwise><a href="${pb.url }&pc=${page}">${page }</a></c:otherwise>
</c:choose>
</c:forEach>
<!-- 下一页: 失效:pc = 最大页, 有效:pc !=tp -->
<c:choose>
<c:when test="${pb.pc eq pb.tp }">下一页</c:when>
<c:otherwise><a href="${pb.url }&pc=${pb.pc+1}">下一页</a></c:otherwise>
</c:choose>
</h3>
</body>
</html>
<c:choose>,<c:when>,<c:otherwise>是选择结构,用来区分开几种特殊情况。例如:上一页的链接在本页在最开始页的时候失效,下一页的操作在本页在最后一页的时候失效。begin和end的变化。
至此完成了分页的实现。