今天看了看JSP的頁面分頁技術,順便學習了一下,這次寫的一個分頁完全是JSP頁面的,沒有進行分層處理,純JSP頁面,對於理解分頁是很有協助的,資料庫我採用的是mysql。在進行分頁之前我們需要定義幾個變數,這是進行分頁的必備要素。首先我們要進行分頁就必須要知道每頁的大小所以我們定義了PageSize,我們在從資料庫中取資料的時候需要定義從第幾條開始取的變數StartRow,以及我們需要顯示的頁數也即PageNo,還要有一個每頁的起始資料和結束資料值,CounterStart和CounterEnd。資料庫中的總記錄數RecordCount,還要有總頁數MaxPage,以及前一頁和下一頁的記錄數PreStart和NextPage。
<%@ page contentType="text/html; charset=gb2312" %><%@ page language="java" %><%@ page import="java.sql.*" %><%//驅動程式名,比較舊了,如果你用mysql5,自己改。String driverName="com.mysql.jdbc.Driver";String userName="root";//資料庫使用者名稱String userPasswd="lifeifei";//密碼String dbName="pagetest";//資料庫名 String tableName="page"; //表名 //連接字串String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;Class.forName(driverName).newInstance();Connection connection=DriverManager.getConnection(url);Statement statement = connection.createStatement();int PageSize = 3; //每頁顯示記錄數int StartRow = 0; //開始顯示記錄的編號int PageNo=0;//需要顯示的頁數int CounterStart=0;//每頁頁碼的初始值int CounterEnd=0;//顯示頁碼的最大值int RecordCount=0;//總記錄數;int MaxPage=0;//總頁數int PrevStart=0;//前一頁int NextPage=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);%><html><head><title>分頁顯示記錄</title><link rel="stylesheet" href="style.css" type="text/css"></head><%//擷取總記錄數ResultSet rs = statement.executeQuery("select count(*) from page" );rs.next();RecordCount = rs.getInt(1);rs = statement.executeQuery("SELECT * FROM page ORDER BY id LIMIT "+StartRow+", "+PageSize);//擷取總頁數//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">id</td> <td class="InternalHeader" >name</td></tr><%int i = 1;while (rs.next()) {%><tr> <td class="NormalFieldTwo" ><%=rs.getInt(1)%></td> <td class="NormalFieldTwo" ><%=rs.getString(2)%></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=TestPage.jsp?PageNo=1>第一頁 </a>: "); out.print("<a href=TestPage.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=TestPage.jsp?PageNo="+c+">"+c+"</a>"); }else{ out.print("<a href=TestPage.jsp?PageNo="+c+">"+c+"</a> ,"); } }else{ if(PageNo == MaxPage){ out.print(c); break; }else{ out.print("<a href=TestPage.jsp?PageNo="+c+">"+c+"</a>"); break; }}}out.print("]");;if(PageNo < MaxPage){ //如果當前頁不是最後一頁,則顯示下一頁連結 NextPage = PageNo + 1; out.print("<a href=TestPage.jsp?PageNo="+NextPage+">下一頁</a>");}//同時如果當前頁不是最後一頁,要顯示最後一頁的連結if(PageNo < MaxPage){ out.print(":"); out.print("<a href=TestPage.jsp?PageNo="+MaxPage+">最後一頁</a>");}out.print("</font>");%></div></td></tr></table><%rs.close();statement.close(); connection.close();%></body></html>
以上就是完整的分頁代碼。直接可運行。