JSP分页

页面pagelistDemo.jsp内容: 

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<% 
    //连接字符串 
    String url = "jdbc:sqlserver://" + Globals.Server 
            + ";databaseName=" + Globals.DbName; 
    Class.forName(Globals.driverName).newInstance(); 
    Connection connection = DriverManager.getConnection(url, 
            Globals.username, Globals.pwd); 
    Statement statement = connection.createStatement(); 

    //每页显示记录数 
    int PageSize = 10; 
    int StartRow = 0; //开始显示记录的编号 
    int PageNo = 0;//需要显示的页数 
    int CounterStart = 0;//每页页码的初始值 
    int CounterEnd = 0;//显示页码的最大值 
    int RecordCount = 0;//总记录数; 
    int MaxPage = 0;//总页数 
    int PrevStart = 0;//前一页 
    int NextPage = 0;//下一页 
    int LastRec = 0; 
    int LastStartRecord = 0;//最后一页开始显示记录的编号 

    //获取需要显示的页数,由用户提交 
    if (request.getParameter("PageNo") == null) { //如果为空,则表示第1页 
        if (StartRow == 0) { 
            PageNo = StartRow + 1; //设定为1 
        } 
    } else { 
        PageNo = Integer.parseInt(request.getParameter("PageNo")); //获得用户提交的页数 
        StartRow = (PageNo - 1) * PageSize; //获得开始显示的记录编号 
    } 

    //因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示 
    //一定数量的页面链接 

    //设置显示页码的初始值!! 
    if (PageNo % PageSize == 0) { 
        CounterStart = PageNo - (PageSize - 1); 
    } else { 
        CounterStart = PageNo - (PageNo % PageSize) + 1; 
    } 

    CounterEnd = CounterStart + (PageSize - 1); 
%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<%@page import="net.data.util.Globals"%> 
<%@page import="java.sql.ResultSet"%> 
<%@page import="java.sql.DriverManager"%> 
<%@page import="java.sql.Connection"%> 
<%@page import="java.sql.Statement"%> 
<element> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>分页显示记录</title> 
<link rel="stylesheet" href="style.css" type="text/css"> 
</head> 
<% 
    //获取总记录数 
    ResultSet rs = statement 
            .executeQuery("select count(P_ID) from product"); 
    rs.next(); 
    RecordCount = rs.getInt(1); 

    //取特定页数的数据 
    String strColumn = " P_ID,P_Name,LoginID,modTime,P_SingleIntro "; 
    String strTable = " Product "; 
    String strSort = "  p_ID desc "; 
    String PKID = "P_ID"; 
    String strSql = ""; 
    String strWhere = ""; 
    String START_ID = Integer.toString((PageNo - 1) * PageSize + 1); 
    String END_ID = Integer.toString(PageNo * PageSize); 
    strSql = " SELECT " + strColumn 
            + " FROM (SELECT ROW_NUMBER() OVER(ORDER BY " + strSort 
            + ") AS rownum," + strColumn + "  FROM " + strTable 
            + " WITH(NOLOCK) " + strWhere 
            + ") AS D  WHERE rownum BETWEEN " + START_ID + " AND " 
            + END_ID + " ORDER BY " + strSort; 
    rs = statement.executeQuery(strSql); 

    //获取总页数 
    MaxPage = RecordCount % PageSize; 
    if (RecordCount % PageSize == 0) { 
        MaxPage = RecordCount / PageSize; 
    } else { 
        MaxPage = RecordCount / PageSize + 1; 
    } 
%> 
<body class="UsePageBg"> 
<table width="100%" border="0" class="InternalHeader"> 
    <tr> 
        <td width="24%"><font size=4>分页显示记录</font></td> 
        <td width="76%"><font size=4><%="总共" + RecordCount + "条记录 - 当前页:" + PageNo + "/" 
                    + MaxPage%></font></td> 
    </tr> 
</table> 

<br> 
<table width="100%" border="0" class="NormalTableTwo"> 
    <tr> 
        <td class="InternalHeader">记录序号</td> 
        <td class="InternalHeader">数据标识号</td> 
        <td class="InternalHeader">产品名称</td> 
        <td class="InternalHeader">作者</td> 
        <td class="InternalHeader">提交时间</td> 
        <td class="InternalHeader">简介</td> 
    </tr> 

    <% 
        long i = 1; 
        while (rs.next()) { 
            long bil = i + (PageNo - 1) * PageSize; 
    %> 
    <tr> 
        <td class="NormalFieldTwo"><%=bil%></td> 
        <td class="NormalFieldTwo"><%=rs.getString(1)%></td> 
        <td class="NormalFieldTwo"><%=rs.getString(2)%></td> 
        <td class="NormalFieldTwo"><%=rs.getString(3)%></td> 
        <td class="NormalFieldTwo"><%=rs.getString(4)%></td> 
        <td class="NormalFieldTwo"><%=rs.getString(5)%></td> 
    </tr> 
    <% 
        i++; 
        } 
    %> 
</table> 
<br> 
<table width="100%" border="0" class="InternalHeader"> 
    <tr> 
        <td> 
        <div align="center"> 
        <% 
            out.print("<font size=4>"); 
            //显示第一页或者前一页的链接 
            //如果当前页不是第1页,则显示第一页和前一页的链接 
            if (PageNo != 1) { 
                PrevStart = PageNo - 1; 
                out.print("<a href=pagelistDemo.jsp?PageNo=1>第一页 </a>: "); 
                out.print("<a href=pagelistDemo.jsp?PageNo=" + PrevStart 
                        + ">前一页</a>"); 
            } 
            out.print("["); 

            //打印需要显示的页码 
            for (int c = CounterStart; c <= CounterEnd; c++) { 
                if (c < MaxPage) { 
                    if (c == PageNo) { 
                        if (c % PageSize == 0) { 
                            out.print(c); 
                        } else { 
                            out.print(c + " ,"); 
                        } 
                    } else if (c % PageSize == 0) { 
                        out.print("<a href=pagelistDemo.jsp?PageNo=" + c + ">" + c 
                                + "</a>"); 
                    } else { 
                        out.print("<a href=pagelistDemo.jsp?PageNo=" + c + ">" + c 
                                + "</a> ,"); 
                    } 
                } else { 
                    if (PageNo == MaxPage) { 
                        out.print(c); 
                        break; 
                    } else { 
                        out.print("<a href=pagelistDemo.jsp?PageNo=" + c + ">" + c 
                                + "</a>"); 
                        break; 
                    } 
                } 
            } 

            out.print("]"); 
            ; 

            if (PageNo < MaxPage) { //如果当前页不是最后一页,则显示下一页链接 
                NextPage = PageNo + 1; 
                out.print("<a href=pagelistDemo.jsp?PageNo=" + NextPage 
                        + ">下一页</a>"); 
            } 

            //同时如果当前页不是最后一页,要显示最后一页的链接 
            if (PageNo < MaxPage) { 
                LastRec = RecordCount % PageSize; 
                if (LastRec == 0) { 
                    LastStartRecord = RecordCount - PageSize; 
                } else { 
                    LastStartRecord = RecordCount - LastRec; 
                } 

                out.print(":"); 
                out.print("<a href=pagelistDemo.jsp?PageNo=" + MaxPage 
                        + ">最后一页</a>"); 
            } 
            out.print("</font>"); 
        %> 
        </div> 
        </td> 
    </tr> 
</table> 
<% 
    rs.close(); 
    statement.close(); 
    connection.close(); 
%> 
</body> 
</html> 




用到的类文件:Globals.java 

Code 
/** *//** 

*/ 
package net.data.util; 

/** *//** 
* @author Administrator 

*/ 
public class Globals { 
    public static String username="sa"; 
    public static String pwd="sa"; 
    public static String DbName="TestData"; 
    //public static String Server="192.168.30.6"; 
    public static String Server="192.168.44.2:1433"; 
    public static String Port="1433"; 
    
    public static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
//    public static String connectionURL { 
//        
//            return "jdbc:sqlserver://"+Server+":"+Port+";databaseName="+DbName; 
//    } 


posted @ 2012-02-08 14:04  FaceSun  阅读(221)  评论(0编辑  收藏  举报