1>思路
页面----》servlet---》service---》dao
页面传递给servlet参数:pageCode (当前页码)
servlet获取到pageCode,在传递给service的queryByPage()方法,最终servlet把PageBean(封装了页面的各个属性)传递给页面
service通过dao中的count()获取到totalRecord(总记录数)
service通过pageSize和pageCode来计算offset和len,调用dao的queryByPage(),得到当前页的记录
2> PageBean
public class PageBean<T> {
//servlet从页面获取,页面没传就为1;
private int pageCode;//当前页码
//private int totalPage;//总页数
//在service中通过dao来获取,pageCode, pageSize
private List<T> datas; //当前页的记录
//在service中通过dao中count()方法来获取
private int totalRecord;//总记录数
//不用动固定值
private int pageSize = 12;//每页记录数
public PageBean(){};
public PageBean(int pageCode, int totalRecord){
this(pageCode, totalRecord, 10);
}
public PageBean(int pageCode, int totalRecord, int pageSize){
this.pageCode = pageCode;
this.totalRecord = totalRecord;
this.pageSize = pageSize;
}
public int getPageCode() {
return pageCode;
}
public void setPageCode(int pageCode) {
this.pageCode = pageCode;
}
public List<T> getDatas() {
return datas;
}
public void setDatas(List<T> datas) {
this.datas = datas;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
//计算totalPage
int totalPage = this.totalRecord / pageSize;
totalPage = totalRecord % pageSize == 0 ? totalPage : totalPage + 1;
return totalPage;
}
}
2》dao中方法
//查询总记录数
public int count(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int number = 0;
try {
conn = JdbcUtils.getConnection();
String sql = "select count(*) from criculate";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
number = rs.getInt("count(*)");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.free(rs, ps, conn);
}
//分页查询
public List<Criculate> queryByPage(int offset, int len){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Criculate> list = new ArrayList<Criculate> ();
try {
conn = JdbcUtils.getConnection();
String sql = "select * from criculate limit ?,?";
ps = conn.prepareStatement(sql);
ps.setInt(1, offset);
ps.setInt(2, len);
rs = ps.executeQuery();
while(rs.next()){
Criculate criculate = new Criculate();
criculate.setQyname(rs.getString("qyname"));
criculate.setId(rs.getInt("id"));
criculate.setQycode(rs.getString("qycode"));
criculate.setJyaddress(rs.getString("jyaddress"));
criculate.setPhone(rs.getString("phone"));
list.add(criculate);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.free(rs, ps, conn);
}
return list;
}
3》service
//查询总记录数
public int count(){
return criculateDao.count();
}
//分页查询
public PageBean<Criculate> queryByPage(int pageCode){
int totalRecord = criculateDao.count();
//使用当前页码和总记录数创建PageBean
PageBean<Criculate> pb = new PageBean<Criculate>(pageCode, totalRecord);
// 查询本页记录
List<Criculate> datas = criculateDao.queryByPage((pageCode - 1)*pb.getPageSize(), pb.getPageSize());
//保存pageBean中
pb.setDatas(datas);
return pb;
}
4》servlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("text/html;charset=utf-8");
//List<Criculate> list = criculateService.find();
//request.setAttribute("list", list);
/*
* 1.获取pageCode参数,如果不存在,等于1,如果存在,赋值即可
* 2.通过pageCode来调用service的queryByPage得到pageBean
* 3.把pageBean保存到request中
* 4.转发到criculateFind1.jsp中
*/
int pageCode = 1;
String str = request.getParameter("pageCode");
if(str != null && !str.trim().isEmpty()){
pageCode = Integer.parseInt(str);
}
PageBean<Criculate> pb = criculateService.queryByPage(pageCode);
request.setAttribute("pb", pb);
request.getRequestDispatcher("/pages/tables/criculateFind1.jsp").forward(request, response);
}
5》Web
第${pb.pageCode }页/共${pb.totalPage }页
<a href="${pageContext.request.contextPath }/CriculateFindServlet">首页</a>
<c:if test="${pb.pageCode > 1}">
<a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${pb.pageCode-1}">上一页</a>
</c:if>
<c:set var="begin" value="1"/>
<c:set var="end" value="10"/>
<c:choose>
<c:when test="${pb.totalPage <= 10}">
<c:set var="begin" value="1"/>
<c:set var="end" value="${pb.totalPage}"/>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${pb.pageCode - 4 < 1}">
<c:set var="begin" value="1"/>
<c:set var="end" value="10"/>
</c:when>
<c:when test="${pb.pageCode + 5 > pb.totalPage}">
<c:set var="begin" value="${pb.totalPage - 9}"/>
<c:set var="end" value="${pb.totalPage}"/>
</c:when>
<c:otherwise>
<c:set var="begin" value="${pb.pageCode - 4}"/>
<c:set var="end" value="${pb.pageCode + 5}"/>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
<c:forEach begin="${begin}" end="${end}" var="i">
<c:choose>
<c:when test="${pb.pageCode eq i }">${i}</c:when>
<c:otherwise>
<a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${i}">[${i }]</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${pb.pageCode < pb.totalPage}">
<a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${pb.pageCode+1}">下一页</a>
</c:if>
<a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${pb.totalPage }">尾页</a>
<select name="pageCode" οnchange="_go(this)">
<c:forEach begin="1" end="${pb.totalPage}" var="i">
<option value="${i }" <c:if test="${pb.pageCode eq i }">selected='selected'</c:if>>${i }</option>
</c:forEach>
</select>
<script type="text/javascript">
function _go(select){
var index = select.selectedIndex;//选中的option的下标
var option = select.options[index];//通过下标得到option对象
var value = option.value;//通过option元素值得到value值
location="${pageContext.request.contextPath}/CriculateFindServlet?pageCode=" + value;
}
</script>