通过servlet实现分页
一、首先要查询出要分页的内容.用会话存储
request.setAttribute("content",lst);
二、由于每次点击页面时都要知道当前是第几页,所以要将这个变量存储在会话里面
request.setAttribute("pageNum",pageNum);//pageNum是用户点击时存储的页面数
三、求出一共有多少页maxPage,当查询出来的所有数据条数与你自己设定的每页条目数计算
if (pageCount % 4 == 0) {
maxPage = pageCount / 4;//pageCount = lst.size();lst是查询出来的集合
} else {
maxPage = pageCount / 4 + 1;
}
然后存储在会话里面
request.setAttribute("pageNum",pageNum);//maxPage是我自己定义的最大页面数
• 页面设计(在JSP中实现)
页面设计里面,我们只需要传递变量,也就是当前第几页这个变量
下一页pageNum = ${pageNum+1}
上一页pageNum = ${pageNum+1}
首页pageNum = ${0}
尾页pageNum = ${maxPage-1}
a.处理第一页时不能点击上一页
<c:if test="${pageNum>0}">
<a href="GoodsServlet?pageNum=${pageNum-1 }">[上一页]</a>
</c:if>
<c:if test="${pageNum==0}">[上一页]</c:if>
b.最后一页时不能点击下一页
<c:if test="${pageNum<maxPage-1}">
<a href="GoodsServlet?pageNum=${pageNum+1 }">[下一页]</a>
</c:if>
<c:if test="${pageNum==maxPage-1}">[下一页]</c:if>
• 具体实现代码如下
1.servlet部分
List lst = (List) request.getAttribute("goods");// 取得共享里面的数据
// 查询应该只用查询一次就可以了,所以如果查询过,就直接从查询的结果里面取就OK了
if (lst == null) {
GoodsImpl g = new GoodsImpl();
lst = g.findAll();
}
// 接收分页页面传递过来的页面数
String strNum = request.getParameter("pageNum");
int pageNum = 0;// 表示当前要显示的页面数
int maxPage = 0;// 最大页
int pageCount = lst.size();// 得到查询出来的所有数据的数目
// 如果是第一次执行,就会接收不到数据
if (strNum == null) {
strNum = "0";
} else {// 接收到了用户点击的第几(pageNum)页
pageNum = Integer.parseInt(strNum);
}
// 计算出要分多少页
if (pageCount % 4 == 0) {
maxPage = pageCount / 4;
} else {
maxPage = pageCount / 4 + 1;
}
request.setAttribute("maxPage", maxPage);// 存储最大页数
request.setAttribute("pageNum", pageNum);// 将当前页面存储起来,给分页页面使用
request.setAttribute("goods", lst);// 存储要显示的数据
request.getRequestDispatcher("/index.jsp").forward(request, response);
2.页面部分
<table align="center" border="0" width="85%">
<tr bgcolor="#6699FF" width="30">
<td>产品编号</td>
<td>产品名称</td>
<td>产品图片</td>
<td>产品价格</td>
</tr>
<c:forEach var="g" items="${goods}" begin="${pageNum*4}" end="${(pageNum+1)*4-1}">
<tr bgcolor="#DDDDDD" width="410">
<td>${g.gId }</td>
<td>${g.sName }</td>
<td><img src="${g.sImage }" width="78" height="120"/></td>
<td>${g.sPrice }</td>
</tr>
</c:forEach>
<tr bgcolor="#6699FF" width="30">
<td colspan="4">
<a href="1">[首页]</a>
<c:if test="${pageNum>0}">
<a href="GoodsServlet?pageNum=${pageNum-1 }">[上一页]</a>
</c:if>
<c:if test="${pageNum==0}">
[上一页]
</c:if>
<c:if test="${pageNum<maxPage-1}">
<a href="GoodsServlet?pageNum=${pageNum+1 }">[下一页]</a>
</c:if>
<c:if test="${pageNum==maxPage-1}">
[下一页]
</c:if>
<a href="GoodsServlet?pageNum=${maxPage-1 }">[尾页]</a>
</td>
</tr>
</table>
jstl
JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。
JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为1.1版。JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签函数库。
Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性、维护性和方便性。
============================================================================================
1、以classPath中,加入jar包: standard-1.1.2.jar , jstl-1.1.2.jar
2、在相目\WEB-INF\tld\文件夹中放入常用的tld文件:c.tld,fmt.tld
3、在jsp文件的顶部加入以下内容:
1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
3. <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
============================================================================================
JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
============================================================================================
为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。
<c:forEach> 标签的语法 说明 :
语法1:迭代一集合对象之所有成员
Html代码
1. <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
2. 本体内容
3. </c:forEach>
语法2:迭代指定的次数
Html代码
1. <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
2. 本体内容
3. </c:forEach>
<c:forEach> 标签的 属性说明 :
<c:forEach> 遍历 List列表:
对于一个基本类型的数组,当前元素将作为相应包装类(Integer、Float等等)的一个实例提供。
Html代码
<c:forEach items="${domainList }" var="item">
<tr>
<td align="center" valign="middle">${item["domain"]==null?" ":item["domain"]}</td>
<td align="center" valign="middle"><fmt:formatDate value="${item['bind_date']}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
<td align="center" valign="middle">
<c:if test="${item['domain']!=null}">
<a href="javascript:;" id="${item['domain']}" class="del"> </a>
</c:if>
</td>
</tr>
</c:forEach>
<c:forEach> 遍历Map:
对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提供。
Html代码
1. <c:if test="${!empty permissionMap}">
2. <c:forEach items="${permissionMap}" var="item">
3. <tr>
4. <td>${item.value.id}</td>
5. <td>${item.value.urlOnClass}</td>
6. <td>${item.value.urlOnMethod}</td>
7. </tr>
8. </c:forEach>
9. </c:if>
==========================================================================================
用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
<c:forTokens> 标签的语法 说明 :
Html代码
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [st