JSP+JavaBean+Servlet实现分页

 今天给同学用JSP+JavaBean+Servlet做了个分页。用的是MySQL+Tomcat+MyEclispe环境。

分页计数器如下:

  1. package org.pagedemo.page;
  2. /**
  3.  * Create on 2008-08-28 11:05
  4.  * 
  5.  * @author qpy_2006
  6.  * 要用到分页,则在创建该类对象时
  7.  * 只需在传入rows的前提下调用counter(page,rows)方法就可以设置firstRow,totalRows,totalPages
  8.  * 在查询的dao中,把该类对象做为参数传入,
  9.  * 再通过调用对象的getFirstRow(),及getMaxSize()设置
  10.  */
  11. public class PageUtil {
  12.     private int totalRows;  // 总行数即总记录数
  13.     private int totalPages; // 总页数
  14.     private int currentPage = 1// 当前页
  15.     private int maxSize = 3// 每页存放3条记录
  16.     private int firstRow = 0// 数据库中第一行数据
  17.     /** Creates a new instance of PageCounter */
  18.     public PageUtil() {
  19.     }
  20.     public int getTotalRows() {
  21.         return totalRows;
  22.     }
  23.     public void setTotalRows(int totalRows) {
  24.         this.totalRows = totalRows;
  25.     }
  26.     public int getTotalPages() {
  27.         return totalPages;
  28.     }
  29.     public void setTotalPages(int totalPages) {
  30.         this.totalPages = totalPages;
  31.     }
  32.     public int getCurrentPage() {
  33.         return currentPage;
  34.     }
  35.     public void setCurrentPage(int currentPage) {
  36.         this.currentPage = currentPage;
  37.     }
  38.     public int getMaxSize() {
  39.         return maxSize;
  40.     }
  41.     public void setMaxSize(int maxSize) {
  42.         this.maxSize = maxSize;
  43.     }
  44.     public int getFirstRow() {
  45.         return firstRow;
  46.     }
  47.     public void setFirstRow(int firstRow) {
  48.         this.firstRow = firstRow;
  49.     }
  50.     // 根据请求参数pageType翻页,即设置firstRow
  51.     // 根据请求参数rows总记录数计算总页数
  52.     public void counter(String pageType,int rows) {
  53.         this.totalRows = rows;
  54.         this.totalPages = (this.totalRows + this.maxSize - 1) / this.maxSize;
  55.         System.out.println("counter 中的totalPages的值为 "+this.totalPages+" 页");
  56.         pageType = pageType.toLowerCase();
  57.         if ("first".equals(pageType)) {
  58.             first();
  59.         } else if ("last".equals(pageType)) {
  60.             last();
  61.         } else if ("next".equals(pageType)) {
  62.             next();
  63.         } else if ("previous".equals(pageType)) {
  64.             previous();
  65.         }
  66.     }
  67.     // 首页
  68.     private void first() {
  69.         currentPage = 1;
  70.         firstRow = 0;
  71.     }
  72.     // 上页
  73.     private void previous() {
  74.         if (totalPages == 0) {
  75.             currentPage = 1;
  76.         } else {
  77.             if (currentPage == 1) {
  78.                 currentPage = totalPages;
  79.             } else {
  80.                 currentPage--;
  81.             }
  82.         }
  83.         firstRow = (currentPage - 1) * maxSize;
  84.     }
  85.     // 下页
  86.     private void next() {
  87.         if (totalPages == 0) {
  88.             currentPage = 1;
  89.         } else {
  90.             if (currentPage < totalPages) {
  91.                 currentPage++;
  92.             } else if (currentPage == totalPages) {
  93.                 currentPage = 1;
  94.             }
  95.         }
  96.         firstRow = (currentPage - 1) * maxSize;
  97.     }
  98.     // 尾页
  99.     private void last() {
  100.         currentPage = totalPages;
  101.         if (totalPages == 0) {
  102.             currentPage = 1;
  103.         }
  104.         firstRow = (currentPage - 1) * maxSize;
  105.     }
  106. }

查询出所有的记录数:

  1. package org.pagedemo.page;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import org.pagedemo.db.DBConnection;
  7. public class PageDAO extends DBConnection {
  8.     // 查出所有的记录数
  9.     public int getRows() {
  10.         Connection conn = this.getConnection();
  11.         String sql = "select count(*) from t_page";
  12.         int rows = 0;
  13.         try {
  14.             PreparedStatement pstmt = conn.prepareStatement(sql);
  15.             ResultSet rs = pstmt.executeQuery();
  16.             while (rs.next()) {
  17.                 rows = rs.getInt(1);
  18.             }
  19.             System.out.println("rows " + rows);
  20.         } catch (SQLException e) {
  21.             // TODO Auto-generated catch block
  22.             e.printStackTrace();
  23.         } finally {
  24.             if (conn != null)
  25.                 try {
  26.                     conn.close();
  27.                 } catch (SQLException e) {
  28.                     // TODO Auto-generated catch block
  29.                     e.printStackTrace();
  30.                 }
  31.         }
  32.         return rows;
  33.     }
  34. }

Servlet中控制分页

  1. package org.pagedemo.servlet;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.servlet.http.HttpSession;
  10. import org.pagedemo.page.PageDAO;
  11. import org.pagedemo.page.PageUtil;
  12. import org.pagedemo.po.User;
  13. import org.pagedemo.user.dao.UserDAO;
  14. /**
  15.  * @author qpy_2006 Servlet,本系统的核心控制器
  16.  */
  17. public class UserServlet extends HttpServlet {
  18.     private static final long serialVersionUID = 1L;
  19.     public void destroy() {
  20.         super.destroy();
  21.     }
  22.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  23.             throws ServletException, IOException {
  24.         response.setContentType("text/html");
  25.         this.doPost(request, response);
  26.     }
  27.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  28.             throws ServletException, IOException {
  29.         response.setContentType("text/html");
  30.         // 获得HttpSession并取得session,用户保存数据
  31.         // 以便在jsp页面或者其他servlet中获得该session中得值
  32.         HttpSession session = request.getSession();
  33.         // 获取分页的请求类别
  34.         String pageType = request.getParameter("pageType");
  35.         String action = request.getParameter("action");
  36.         List<User> users = new ArrayList<User>();
  37.         PageDAO pd = new PageDAO();
  38.         PageUtil pu = new PageUtil();
  39.         UserDAO ud = new UserDAO();
  40.         // 获取数据库中记录数
  41.         int rows = pd.getRows();
  42.         if ("initial".equals(action)) {
  43.             // 第一次进入index.jsp页面时,查询出第一页
  44.             // 设置分页的各个属性,参见PageUtil这个类
  45.             pu.counter("first", rows);
  46.             session.setAttribute("pageBean", pu);
  47.         } else if ("page".equals(action)) {
  48.             // 点击分页请求时执行下一代码
  49.             pu = (PageUtil) session.getAttribute("pageBean");
  50.             pu.counter(pageType, pu.getTotalRows());
  51.         }       
  52.         users = ud.findAll(pu);
  53.         // 把查询的结果users放到session中,
  54.         // 以便在jsp页面从session读取该users对象
  55.         session.setAttribute("users", users);
  56.         // 把PageUtil放到session中
  57.         session.setAttribute("pageBean", pu);
  58.         // 在servlet跳转到某个jsp页面
  59.         request.getRequestDispatcher("index.jsp").forward(request, response);
  60.     }
  61.     public void init() throws ServletException {
  62.     }
  63. }

详细代码及工程到如下网址下载:http://download.csdn.net/user/qpyong

 

 

你可能感兴趣的:(DAO,jsp,数据库,servlet,session,action)