JSP中分页技术的实现(jstl,servlet,javabean三种不同实现方式)

1.jstl分页技术的实现:

package cn.bugu_tag.page;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**

* @author Xiaoping Huang (hxpwangyi@163.com)
*/
public class BuguPageTag extends TagSupport {
private int pageNum = 1;
private int pages;
private String url;

@Override
public int doStartTag() throws JspException {

HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
request.setAttribute("pageNum", pageNum);
request.setAttribute("pages", pages);
request.setAttribute("url", url);
try {
pageContext.include("/WEB-INF/template/page.jsp");
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}


public String getUrl() {
return url;
}

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

public int getPageNum() {
return pageNum;
}


public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}


public int getPages() {
return pages;
}


public void setPages(int pages) {
this.pages = pages;
}

}

jsp页面:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<style>
@charset utf-8;
.pagination{height:30px;vertical-align:middle;margin:5px 10px 0;}
.pagination a{display:inline-block;margin-right:5px;width:25px;height:25px;line-height:25px;border:1px solid #ccc;text-align:center;text-decoration:none;color:#555;font-size:14px;overflow:hidden}
.pagination a:hover{background-color:#FFEDE1;text-decoration:none;font-weight:700;border-color:#FD6D01}
.pagination .current{display:inline-block;margin-right:5px;width:25px;height:25px;line-height:25px;border:1px solid #FD6D01;text-align:center;color:#555;font-size:14px;overflow:hidden;background-color:#FFEDE1;font-weight:700}
.pagination a.pagenum{width:52px;height:25px}
.pagination span{margin-right:5px;width:25px;height:25px;line-height:25px;display:inline-block;font-family:Tahoma,SimSun,Arial;font-size:12px;text-align:center;vertical-align:top;}
.pagination .prev,.pagination .next{display:inline-block;margin-right:5px;width:50px;height:25px;line-height:25px;border:1px solid #ccc;text-align:center;color:#999;font-size:14px;overflow:hidden}
.pagination .pagejump{width:auto;color:#666;vertical-align:top;padding:0 5px;}
.pagination .pagejump input{width:30px;height:20px;text-align:center;font-family:Tahoma,SimSun,Arial;color:#000;border:1px solid #999;margin:0 5px}
.pagination .pagejump button{width:50px;height:25px;cursor:pointer;border:1px solid #ccc;margin:0 0 0 5px}
</style>
<script type="text/javascript" src="/bugu_ui/jquery/jquery.min.js"></script>
<script type="text/javascript">
function beforeSubmit(){
var re = /^[1-9][0-9]*$/;

if(!re.test($("#pageNum1").val())){
$("#pageNum1").val(1);
}
if($("#pageNum1").val()>${pages}){
$("#pageNum1").val(${pages});

}

return true;
}
</script>
<c:if test="${pages>0}">
<div id="pagination" class="pagination">
<form action="${url}" method="post" onSubmit="beforeSubmit()">
<c:if test="${fn:indexOf(url,'?')==-1}">
<c:choose>
<c:when test="${pageNum==1}">
<span class="prev">首页</span>
<span class="prev">上一页</span>
</c:when>
<c:otherwise>
<a href="${url}?pageNum=1" class="pagenum" >首页</a>
<a href="${url}?pageNum=${pageNum-1}" class="pagenum" >上一页</a>
</c:otherwise>
</c:choose>
<c:if test="${pageNum-3>0}">
<a href="${url}?pageNum=${pageNum-3}" >${pageNum-3}</a>
</c:if>
<c:if test="${pageNum-2>0}">
<a href="${url}?pageNum=${pageNum-2}" >${pageNum-2}</a>
</c:if>
<c:if test="${pageNum-1>0}">
<a href="${url}?pageNum=${pageNum-1}" >${pageNum-1}</a> 
</c:if>
<span class="current">${pageNum}</span>
<c:if test="${pageNum+1<=pages}">
<a href="${url}?pageNum=${pageNum+1}" >${pageNum+1}</a> 
</c:if>
<c:if test="${pageNum+2<=pages}">
<a href="${url}?pageNum=${pageNum+2}" >${pageNum+2}</a>
</c:if>
<c:if test="${pageNum+3<=pages}">
<a href="${url}?pageNum=${pageNum+3}" >${pageNum+3}</a>
</c:if>
<c:choose>
<c:when test="${pageNum==pages}">
<span class="next">下一页</span>
<span class="next">末页</span>
</c:when>
<c:otherwise>
<a href="${url}?pageNum=${pageNum+1}" class="pagenum">下一页</a>
<a href="${url}?pageNum=${pages}" class="pagenum" >末页</a>
</c:otherwise>
</c:choose>
<span class="pagejump">共${count}条 跳到第<input type="text" value="${pageNum}" size="3" name="pageNum" id="pageNum1">页<button type="submit">确定</button></span>
</c:if>
<c:if test="${fn:indexOf(url,'?')!=-1}">
<c:choose>
<c:when test="${pageNum==1}">
<span class="prev">首页</span>
<span class="prev">上一页</span>
</c:when>
<c:otherwise>
<a href="${url}&pageNum=1" class="pagenum" >首页</a>
<a href="${url}&pageNum=${pageNum-1}" class="pagenum" >上一页</a>
</c:otherwise>
</c:choose>
<c:if test="${pageNum-3>0}">
<a href="${url}&pageNum=${pageNum-3}" >${pageNum-3}</a>
</c:if>
<c:if test="${pageNum-2>0}">
<a href="${url}&pageNum=${pageNum-2}" >${pageNum-2}</a>
</c:if>
<c:if test="${pageNum-1>0}">
<a href="${url}&pageNum=${pageNum-1}" >${pageNum-1}</a> 
</c:if>
<span class="current">${pageNum}</span>
<c:if test="${pageNum+1<=pages}">
<a href="${url}&pageNum=${pageNum+1}" >${pageNum+1}</a> 
</c:if>
<c:if test="${pageNum+2<=pages}">
<a href="${url}&pageNum=${pageNum+2}" >${pageNum+2}</a>
</c:if>
<c:if test="${pageNum+3<=pages}">
<a href="${url}&pageNum=${pageNum+3}" >${pageNum+3}</a>
</c:if>
<c:choose>
<c:when test="${pageNum==pages}">
<span class="next">下一页</span>
<span class="next">末页</span>
</c:when>
<c:otherwise>
<a href="${url}&pageNum=${pageNum+1}" class="pagenum">下一页</a>
<a href="${url}&pageNum=${pages}" class="pagenum" >末页</a>
</c:otherwise>
</c:choose>
<span class="pagejump">共${count}条 跳到第<input type="text" value="${pageNum}" size="3" name="pageNum" id="pageNum1">页<button type="submit">确定</button></span>
</c:if>
</form>
</div>
</c:if> 
<c:if test="${pages==0}">
没有数据
</c:if>

tld文件

<?xml version="1.0" encoding="utf-8"?> 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" 
version="2.0"> 
<tlib-version>1.0</tlib-version> 
<short-name>pageTag</short-name> 
<!-- 定义该标签库的URI --> 
<uri>http://www.bugu_tag.cn/page</uri> 
<!-- 定义第一个标签 --> 
<tag> 
<!-- 定义标签名 --> 
<name>page</name> 
<!-- 定义标签处理类 --> 
<tag-class>cn.bugu_tag.page.BuguPageTag</tag-class> 
<!-- 定义标签体为空 --> 
<body-content>jsp</body-content> 
<attribute>
<name>url</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pageNum</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pages</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

</tag> 
</taglib>










2.servlet分页技术的实现

1.jsp实现分也用到了servlet+jsp,其实现原理其实比较简单

2.首先系统要规定好,也就是定义一个常量,规定好每页要显示的条数,然后从数据库查出数据总条数,计算出页数
3.从jsp页面得到页码参数,查询相应的数据
4.具体实现如下
A.Servlet

package com.test.phonebook.view.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.test.phonebook.entity.Group;
import com.test.phonebook.entity.User;
import com.test.phonebook.service.GroupService;
import com.test.phonebook.service.UserService;

@SuppressWarnings("serial")
public class SearchAllUserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<User> listAllUser=new ArrayList<User>();
List<User> listCurrentUser=new ArrayList<User>();
int currentpage=1;
int pagenum=0;
if(request.getParameter("currentpage")!=null){
currentpage=Integer.parseInt(request.getParameter("currentpage"));
}
try{
listAllUser=UserService.searchAllUser();
        }catch(Exception e){
       
        }
if(listAllUser.size()%(MaxLine.MAXLINE)==0){
         pagenum=listAllUser.size()/MaxLine.MAXLINE;
         }
else{
         pagenum=listAllUser.size()/(MaxLine.MAXLINE)+1; 
         }
        try{
        listCurrentUser=UserService.searchUseBypage(currentpage);
        }catch(Exception e){
        
        }
        request.setAttribute("listCurrentUser", listCurrentUser);
        request.setAttribute("pagenum", pagenum);
        request.setAttribute("currentpage", currentpage);
        request.getRequestDispatcher("/jsp/main/main.jsp").forward(request,response);
        return;
       
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
       this.doGet(request, response);
}
}
B.Jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<%@ include file="/jsp/main/top.jsp"%>
<html>
  <head>
    <title>电话簿主页</title>
  <script type="text/javascript" src="${applicationScope.BASEPATH}js/user_js.js"></script>
  </head>
  <body>
  <table border="1" align="center">
  <tr bgcolor="#CDCDCD">
  <td align="center" width="100px">序号</td>
  <td align="center" width="100px">姓名</td>
  <td align="center" width="150px">电话</td>
  <td align="center" width="100px">性别</td>
  <td align="center" width="200px">工作单位</td>
  <td align="center" width="195px">Email</td>
  <td colspan="2" align="center" width="100px">操作</td>
  </tr>
  <c:forEach var="user" varStatus="st"  items="${requestScope.listUser}" >
  <tr bgcolor="${st.index%2==0?'pink':'#C6C600'}">
  <td align="center"><c:out value="${st.index+1}"></c:out></td>
  <td align="center"><c:out value="${user.uname}"></c:out></td>
  <td align="center"><c:out value="${user.uphone}"></c:out></td>
  <td align="center"><c:out value="${user.usex}"></c:out></td>
  <td align="center"><c:out value="${user.uwork}"></c:out></td>
  <td align="center"><c:out value="${user.uemail}"></c:out></td>
  <td align="center"><a href="${applicationScope.BASEPATH}jsp/main/updatenotpagebef.s?uid=<c:out value="${user.uid}"></c:out>" style="text-decoration:none;"><img src="${applicationScope.BASEPATH}picture/view.png">修改</a></td>
  <td align="center"><a href="${applicationScope.BASEPATH}jsp/main/deletenotpage.s?uid=<c:out value="${user.uid}"></c:out>" οnclick="return sureDel()" style="text-decoration:none;"><img src="${applicationScope.BASEPATH}picture/delete.png">删除</a></td>
  </tr>
  </c:forEach>
  </table>
  </body>
</html>








3.JavaBean分页技术的实现

/*
 * PageNumber.java
 *
 * Created on 2006年10月9日, 上午8:21
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package page;
import java.io.*;
import java.sql.*;
import java.lang.String;
/**
 *只需传进三个参数,一个是每页显示记录集数,一个是记录集,一个是URL
 *取得分页效果只需调用一个getPage即可
 * @mc1035
 */
public class PageNumber {
    private int rowCount=1,   //总的记录数。
            pageSize=1,  //每页显示的记录数。
            showPage=1,  //设置欲显示的页码数。
            pageCount=1; //分页之后的总页数。

    private ResultSet rs;
    private String url;
    private StringBuffer page=new StringBuffer();
    private String formValue="-1";
    
    /*
     *设置记录集
     */
    public void setRs(ResultSet a){
        rs=a;
        try {
            rs.last(); //获取最后一行的行号:
            rowCount=rs.getRow();//获取
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
    }
    public ResultSet getRs(){
        return rs;
    }
    /*
     *设置url
     */
    public void setUrl(String a){
        url=a;
    }
    public String getUrl(){
        return url;
    }
    /*
     *设置总记录数
     */
    public void setRowCount(int n) {
        rowCount=n;
    }
    public int getRowCount() {
        return rowCount;
    }
    
    /*
     *设置总的页数
     */
    public void setPageCount() {
        
        int n=(rowCount%pageSize)==0?(rowCount/pageSize):(rowCount/pageSize+1) ;
        pageCount=n;
    }
    public int getPageCount() {
        return pageCount;
    }
    /*
     *设置显示第几页
     */
    public void setShowPage(int n) {
        showPage=n;
    }
    public int getShowPage() {
        return showPage;
    }
    /*
     *每页显示的记录数
     */
    public void setPageSize(int n) {
        pageSize=n;
        
    }
    public int getPageSize() {
        return pageSize;
    }
    /*
     *设置表单值
     */
    public void setFormValue(String a){
        formValue=a;
    }
    public String getFormValue(){
        return formValue;
    }
    public void setForm(){
        
        page.append("共有"+getRowCount()+"条记录 ");
        page.append("  "+getPageCount()+"页 ");
        page.append(" 当前为第"+getShowPage()+"页 ");
        page.append("每页显示"+getPageSize()+"条记录");
        
        if(getShowPage()!=1){
            page.append("<Form action=/""+url+"/" method=/"post/">");
            page.append("<Input Type=/"hidden/" name=/"formValue/" value=/"1/">");
            page.append("<Input name=/"submit4/" type=/"submit/" value=/"首页/">");
            page.append("</FORM>");
        }else{
            page.append("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp");
        }
        if(getShowPage()!=getPageCount()){
            page.append("<Form action=/""+url+"/" method=/"post/">");
            page.append("<Input Type=/"hidden/" name=/"formValue/" value=/""+(getShowPage()+1)+"/">");
           page.append("<Input name=/"submit4/" type=/"submit/" value=/"下一页/">");
            page.append("</FORM>");
        }else{
        page.append("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp");
        }
        if(getShowPage()!=1){
            page.append("<Form action=/""+url+"/" method=/"post/">");
            page.append("<Input Type=/"hidden/" name=/"formValue/" value=/""+(getShowPage()-1)+"/">");
           
           page.append("<Input name=/"submit4/" type=/"submit/" value=/"上一页/">");
            page.append("</FORM>");
        }else{
            page.append("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp");
        }
        if(getShowPage()!=getPageCount()){
            page.append("<Form action=/""+url+"/" method=/"post/">");
            page.append("<Input Type=/"hidden/" name=/"formValue/" value=/""+getPageCount()+"/">");
            
           page.append("<Input name=/"submit4/" type=/"submit/" value=/"末页/">");
            page.append("</FORM>");
        }else{
            page.append("&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp");
        }
        
        page.append("<Form action=/""+url+"/" method=/"post/">");
        page.append("输入欲要显示的页<Input Type=/"text/" name=/"formValue/" size=/"5/" value=/""+getShowPage()+"/">");
       
        page.append("<Input name=/"submit4/" type=/"submit/" value=/"GO/">");
        page.append("</FORM>");
        
        
    }
    public void showList(){
        try{
            page.append("<Table>");
            page.append("<TR>");
            ResultSetMetaData statName= rs.getMetaData();
            
            for(int i=1;i<=statName.getColumnCount();i++){
                page.append("<TH>"+statName.getColumnName(i));
            }
            page.append("</TR>");
            
            for(int i=1;i<=getPageSize();i++) {
                page.append("<TR>");
                for(int j=1;j<=statName.getColumnCount();j++){
                    page.append("<TD>"+rs.getString(j)+"</TD>");
                }
                page.append("</TR>") ;
                if(!rs.next()){
                    break;
                }
            }
            page.append("</Table>");
            setForm();
            
        }catch(Exception e){
            e.printStackTrace();
            page.append(e);
        }
    }
    public String getPage(){
        setPageCount();
        try{
            int n=1;
            if(formValue.equals("-1")){
                formValue="1";
                setShowPage(1);
                rs.absolute((n-1)*getPageSize()+1);
                
            }else {
                try{
                    n=Integer.parseInt(formValue);
                    if(n>getPageCount()) {
                        n=getPageCount();
                    }
                    if(n<=0) {
                        n=1;
                    }
                    setShowPage(n);
                    rs.absolute((n-1)*getPageSize()+1);
                    
                } catch(NumberFormatException e){
                    e.printStackTrace();
                    n=getShowPage();
                    rs.absolute((n-1)*getPageSize()+1);
                }
            }
        } catch(SQLException ex){
            ex.printStackTrace();
        }
        showList();
        
        
        String a=new String(page);
        return a;
    }
    
    
}

//index.jap文件,引用例子

 <%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<%@page import="page.PageNumber"%>
<%@page import="java.io.*"%>

<!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>JSP Page</title>
    </head>
    <body>
        <jsp:useBean id="pageNum" scope="page" class="page.PageNumber" />
    
        <%!
            Connection con=null;
            Statement sql=null;
            ResultSet rs=null;

            int rowCount=0;
            int pageSize=5;//每页显示的记录集数
        %>
        <%      try{

                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                con = DriverManager.getConnection("jdbc:odbc:mcpage");
                sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
                rs=sql.executeQuery("select * from user");

        %>
        <% //URL
            String str=response.encodeRedirectURL("index.jsp");

        //下面的是Bean的参数,可根据需要自行修改
        %>  
      
        <jsp:setProperty name="pageNum" property="formValue" param="formValue"/>      
        <jsp:setProperty name="pageNum" property="rs" value="<%=rs%>"/>
        <jsp:setProperty name="pageNum" property="pageSize" value="<%=pageSize%>"/>
        <jsp:setProperty name="pageNum" property="url" value="<%=str%>"/>        
        <jsp:getProperty name="pageNum" property="page"/>
       
        <%

            rs.close();
            con.close();
            }catch(SQLException e){
                e.printStackTrace();
                out.print(e);
                rs.close();
                con.close();
            }
        %>
    
    </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值