servlet jsp 实现分页

    最近做的一个小的B/S项目中需要用到分页,我也是第一次接触,在查找很多资料后,最终成功实现。要实现分页,必须要确定使用的是哪个数据库,不同的数据库底层实现的分页查询的语句都不同,比如:mysql使用LIMIT,oracle使用ROWNUM。在这里我没写业务层,直接由servlet web层 调dao持久层,最终在表现出显示。

 1.DAO-持久层

public DisciplinePageBean<Discipline> getAll(int pageCode, int pageSize) {
	Connection connection = null;
	try {
		connection = JDBCUtils.getConnection();
		DisciplinePageBean<Discipline> pageBean = new DisciplinePageBean<Discipline>();
		pageBean.setPageCode(pageCode);
		pageBean.setPageSize(pageSize);

		// 得到总记录数
		String sql = "SELECT COUNT(*) FROM discipline";
		Number number = (Number) queryRunner.query(connection, sql, new ScalarHandler());
		int totalRecode = number.intValue();
		pageBean.setTotalRecode(totalRecode);

		sql = "SELECT dc_id,stu_no,stu_name,stu_sex,m_name,stu_class,stu_phone,dc_type,dc_reason,dc_date FROM discipline d,major m,student s "
				+ "WHERE d.stu_id=s.stu_id AND m.m_id=s.m_id ORDER BY dc_id LIMIT ?,?";
		List<Discipline> lists = queryRunner.query(connection, sql,
				new BeanListHandler<Discipline>(Discipline.class), (pageCode - 1) * pageSize, pageSize);
		pageBean.setBeanList(lists);

		return pageBean;

	} catch (SQLException e) {
		e.printStackTrace();
		throw new DBException("数据库连接错误!");
	} finally {
		if (connection != null) {
			JDBCUtils.release(connection);
		}
	}
}

 2.  servlet-web层
public void findAll(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException{
		
	int pageCode = getPageCode(request);// 获取当前页面传递的页码
	int pageSize = 4;// 设定每页的纪录数
	DisciplinePageBean<Discipline> pageBean = disciplineDao.getAll(pageCode, pageSize);

	request.setAttribute("pageBean", pageBean);
	request.getRequestDispatcher("/StudyInfo/punishinfo.jsp").forward(request, response);
}

3.jsp-表现层
<table width="100%" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<th style="text-align: left;" width="5%">处分编号</th>
		<th style="text-align: left;" width="10%">学号</th>
		<th style="text-align: left;" width="10%">姓名</th>
		<th style="text-align: left;" width="5%">性别</th>
		<th style="text-align: left;" width="10%">专业</th>
		<th style="text-align: left;" width="8%">班级</th>
		<th style="text-align: left;" width="12%">电话</th>
		<th style="text-align: left;" width="7%">类型</th>
		<th style="text-align: left;" width="12%">原因</th>
		<th style="text-align: left;" width="10%">日期</th>
		<th style="text-align: left;" width="12%">操作</th>
	</tr>
	<!-- 如果数据库查询为空 -->
	 <c:if test="${empty pageBean.beanList}">
		<tr style="height: 28px" class="tdbg" align="left">
			<td colspan="13" align="left" style="color: Red; font-weight: bold;">未找到违纪信息!</td>
	        </tr>
	</c:if>
	<!-- 如果不为空 -->
	<c:forEach items="${pageBean.beanList }" var="dis">
		<tr>
			<td>${dis.dc_id }</td>
			<td>${dis.stu_no }</td>
			<td>${dis.stu_name }</td>
			<td>${dis.stu_sex }</td>
			<td>${dis.m_name }</td>
			<td>${dis.stu_class }</td>
			<td>${dis.stu_phone }</td>
			<td>${dis.dc_type }</td>
			<td>${dis.dc_reason }</td>
			<td>${dis.dc_date }</td>
			<td>
				<a href="javascript:del('${dis.dc_id }');">删除</a> 
				<a href="edit.do?id=${dis.dc_id }">修改</a>
			</td>
		</tr>
	</c:forEach>
			
</table>
<br/>
<center>
<c:if test="${!empty pageBean.beanList}">
	第${pageBean.pageCode}页/共${pageBean.totalPage}页
	<a href="${pageBean.url }pageCode=1">首页</a>
	<c:if test="${pageBean.pageCode >1 }">
	    <a href="showInfo.do?pageCode=${pageBean.pageCode-1 }">上一页</a>
	</c:if>
	<c:choose>
		<%--当总页数不足10页时把所有都显示出来 --%>
		<c:when test="${pageBean.pageCode<10 }">
			<c:set var="begin" value="1" />
			<c:set var="end" value="${pageBean.totalPage }" />
		</c:when>
		<%--当总页数大于10页时 --%>
		<c:otherwise>
			<c:set var="begin" value="${pageBean.pageCode-5 }" />
			<c:set var="end" value="${pageBean.pageCode+4 }" />
			<%--头溢出 --%>
			<c:if test="${begin < 1 }">
				<c:set var="begin" value="1" />
				<c:set var="end" value="10" />
			</c:if>
			<%--尾溢出 --%>
			<c:if test="${end > pageBean.totalPage }">
				<c:set var="begin" value="${pageBean.totalPage-9 }" />
				<c:set var="end" value="${pageBean.totalPage }" />
			</c:if>
		</c:otherwise>
	</c:choose>
	<c:forEach var="i" begin="${begin }" end="${end }">
		<c:choose>
			<c:when test="${i eq pageBean.pageCode }">${i }</c:when>
			<c:otherwise>
				<a href="${pageBean.url }pageCode=${i }">${i}</a> 
			</c:otherwise>
		</c:choose>
	</c:forEach>
	<c:if test="${pageBean.pageCode < pageBean.totalPage }">
	    <a href="${pageBean.url }pageCode=${pageBean.pageCode+1 }">下一页</a>
	</c:if>
	<a href="${pageBean.url }pageCode=${pageBean.totalPage }">尾页</a>
</c:if>
</center>

4.实体类-PageBean

public class PageBean<T> {

	// 当前页码
	private int pageCode;
	// 总页数
	private int totalPage;
	// 总记录数
	private int totalRecode;
	// 每页记录数
	private int pageSize;
	// 当前页的记录
	private List<T> beanList;

	private String url;

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public int getPageCode() {
		return pageCode;
	}

	public void setPageCode(int pageCode) {
		this.pageCode = pageCode;
	}

	// 计算总页数
	public int getTotalPage() {
		int totalPage = totalRecode / pageSize;
		return totalRecode % pageSize == 0 ? totalPage : totalPage + 1;
	}
	public int getTotalRecode() {
		return totalRecode;
	}

	public void setTotalRecode(int totalRecode) {
		this.totalRecode = totalRecode;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public List<T> getBeanList() {
		return beanList;
	}

	public void setBeanList(List<T> beanList) {
		this.beanList = beanList;
	}

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值