本文介紹了servlet分頁代碼實現,采用Oracle數據庫,獲取SCOTT用戶EMP表中的數據,分頁實現步驟看下面代碼
1.首先創建一個對象 UserData,用以保存從數據庫中獲取的數據。 代碼如下: package com.tool; import java.math.BigDecimal; import java.util.Date; /** * Created by lx_sunwei on 14-1-6. */ public class UserData { /** * EMP表中的數據屬性 */ private String ename; private String job; private BigDecimal empno; private BigDecimal mgr; private Date hireDate; private BigDecimal sal; private BigDecimal comm; private BigDecimal deptno; public BigDecimal getEmpno() { return empno; } public void setEmpno(BigDecimal empno) { this.empno = empno; } public BigDecimal getMgr() { return mgr; } public void setMgr(BigDecimal mgr) { this.mgr = mgr; } public Date getHireDate() { return hireDate; } public void setHireDate(Date hireDate) { this.hireDate = hireDate; } public BigDecimal getSal() { return sal; } public void setSal(BigDecimal sal) { this.sal = sal; } public BigDecimal getComm() { return comm; } public void setComm(BigDecimal comm) { this.comm = comm; } public BigDecimal getDeptno() { return deptno; } public void setDeptno(BigDecimal deptno) { this.deptno = deptno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } } 2.創建一個 DBHelper 對象用以與數據庫進行交互 代碼如下: package com.dao; import com.tool.UserData; import java.math.BigDecimal; import java.sql.*; import java.util.*; import java.util.Date; /** * Created by lx_sunwei on 14-1-6. */ public class DBHelper { Connection conn; //數據庫連接對象 PreparedStatement pt; //SQL語句預處理對象 ResultSet rs; //結果集對象 public DBHelper(){ try { Class.forName("oracle.jdbc.driver.OracleDriver"); //裝載驅動 } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 獲取當前頁的數據 * @param curPage * @param rowsPerPage * @return */ public List<UserData> getData(int curPage, int rowsPerPage) { List<UserData> dataList = new ArrayList<>(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; try { conn = DriverManager.getConnection(url,"scott","tiger"); String sql = "select * from emp where rownum <= ((? - 1) * "+rowsPerPage+" + "+rowsPerPage+") minus " + " select * from emp where rownum <= (? - 1) * "+rowsPerPage+" "; pt = conn.prepareStatement(sql); pt.setInt(1,curPage); pt.setInt(2,curPage); rs = pt.executeQuery(); while (rs.next()){ /** * 從結果集中取得數據 */ UserData userData = new UserData(); BigDecimal empno = rs.getBigDecimal("empno"); String ename = rs.getString("ename"); String job = rs.getString("job"); BigDecimal mgr = rs.getBigDecimal("mgr"); Date hireDate = rs.getDate("hiredate"); BigDecimal sal = rs.getBigDecimal("sal"); BigDecimal comm = rs.getBigDecimal("comm"); BigDecimal deptno = rs.getBigDecimal("deptno"); /** * 設置對象屬性 */ userData.setEmpno(empno); userData.setEname(ename); userData.setJob(job); userData.setMgr(mgr); userData.setHireDate(hireDate); userData.setSal(sal); userData.setComm(comm); userData.setDeptno(deptno); dataList.add(userData); //把對象添加集合中 } rs.close(); pt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return dataList; } /** * 返回總頁數 * @return */ public int getMaxPage(int rowsPerPage) { int maxPage; int maxRowCount = 0; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; try { conn = DriverManager.getConnection(url,"scott","tiger"); //創建數據庫連接 String sql = "select count(*) from emp"; pt = conn.prepareStatement(sql); rs = pt.executeQuery(); if (rs.next()){ maxRowCount = rs.getInt(1); //總行數 } } catch (SQLException e) { e.printStackTrace(); } maxPage = (maxRowCount + rowsPerPage - 1) / rowsPerPage; //總頁數 return maxPage; } } 3.創建 Servlet 對顯示頁面進行控制 代碼如下: package com.servlet; import com.dao.DBHelper; import com.tool.UserData; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; /** * Created by lx_sunwei on 14-1-6. */ public class Servlet extends HttpServlet { public int rowsPerPage; //每頁顯示的行數 public int curPage; //當前頁頁碼 public int maxPage; //總共頁數 DBHelper db = new DBHelper(); public Servlet(){ rowsPerPage = 5; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String curPage1 = request.getParameter("page"); //獲取當前頁頁碼 if (curPage1 == null){ curPage = 1; request.setAttribute("curPage",curPage); //設置curPage對象 }else { curPage = Integer.parseInt(curPage1); if (curPage < 1){ curPage = 1; } request.setAttribute("curPage",curPage); } List<UserData> dataList; dataList = db.getData(curPage,rowsPerPage); //獲取當前頁的數據 maxPage = db.getMaxPage(rowsPerPage); //獲取總頁數 request.setAttribute("dataList",dataList); request.setAttribute("maxPage", maxPage); RequestDispatcher rd = request.getRequestDispatcher("pagemain.jsp"); //將請求轉發到pagemain.jsp頁面 rd.forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } } 4.創建 JSP 頁面,顯示數據。 代碼如下: <%@ page import="java.util.List" %> <%@ page import="com.tool.UserData" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>servlet數據分頁</title> <link rel="stylesheet" type="text/css" href="css.css"> </head> <body> <div style="margin-top: 15%; margin-left: 25%"> <table> <caption>SCOTT用戶,EMP表中的數據</caption> <%! int curPage,maxPage; %> <% curPage =Integer.parseInt(request.getAttribute("curPage").toString()); %> <!--取得當前頁--> <% maxPage =Integer.parseInt((String)request.getAttribute("maxPage").toString()); %> <!--取得總頁數--> <%if (request.getAttribute("dataList") == null){ %> <tr> <td colspan="8">沒有數據</td> </tr> <% }else { %> <tr> <!--表頭--> <th>EMPNO</th> <th>ENAME</th> <th>JOB</th> <th>MGR</th> <th>HIREDATE</th> <th>SAL</th> <th>COMM</th> <th>DEPTNO</th> </tr> <% List list = (List) request.getAttribute("dataList"); for (Object aList : list) { UserData userData = (UserData) aList; %> <tr> <!--取得表中數據--> <td><%= userData.getEmpno() %></td> <td><%= userData.getEname() %></td> <td><%= userData.getJob() %></td> <td><%= userData.getMgr() %></td> <td><%= userData.getHireDate() %></td> <td><%= userData.getSal() %></td> <td><%= userData.getComm() %></td> <td><%= userData.getDeptno() %></td> </tr> <% } } %> </table> </div> <div style="margin-top: 8%; margin-left: 29%"> 第<%= curPage %>頁,共<%= maxPage %>頁 <%if (curPage > 1){ %> <a href="Servlet?page=1">首頁</a> <a href="Servlet?page=<%=curPage - 1%>">上一頁</a> <% }else { %> 首頁 上一頁 <% }%> <%if (curPage < maxPage){ %> <a href="Servlet?page=<%=curPage + 1%>">下一頁</a> <a href="Servlet?page=<%=maxPage %>">尾頁</a> <% }else { %> 下一頁 尾頁 <% }%> 轉至第 <form name="form1" action="Servlet" method="get"> <label> <select name="page" onchange="document.form1.submit()"> <%for ( int i = 1; i <= maxPage; i++){ if (i == curPage){ %> <!--當前頁頁碼默認選中--> <option selected value="<%= i%>"><%= i %></option> <% }else { %> <option value="<%= i %>"><%= i %></option> <% } }%> </select> </label> </form> 頁 </div> </body> </html> web.xml 中的配置文件為: 代碼如下: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>com.servlet.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/Servlet</url-pattern> </servlet-mapping> </web-app> 把項目部署到 Tomcat 服務器上,輸入地址:http://localhost:8080/Servlet 這樣就可以看到效果