首页 > 编程 > JSP > 正文

jsp+servlet+javabean实现数据分页方法完整实例

2024-09-05 00:22:25
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要介绍了jsp+servlet+javabean实现数据分页方法,以完整实例形式详细讲述了jsp结合servlet与javabean操作PostgreSQL数据库实现分页的具体步骤,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了jsp+servlet+javabean实现数据分页方法。分享给大家供大家参考,具体如下:

这里秉着且行且记的心态,记录下学习过程,学得快忘得快,生怕遗忘,以备日后使用。

用到的部分代码是自己在网上查找,并自己修改,加上自己的理解。也不知道算不算原创,只做自己学习记录。

使用相关:PostgreSQL数据库、dom4j、JSP、Servlet

一、首先是工程格局,来个全局视图方便读者与自己查看与使用

jsp+servlet+javabean实现数据分页方法完整实例

思路为:

以config.xml文件记录配置信息,以方便数据库更改,方便移植与重用。

DOM4JUtil.java用于解析xml属性文件以获得需要数据

PostgreSQL_Util.java分装数据连接与数据库操作

PageProperties.java为表格分页属性javaBean

PageProperties.java封装分页操作

Page.java为分页主要操作

tablePage.jsp为效果显示界面

用到的第三方jar包:

dom4j-1.6.1.jar用于xml文件解析

postgresql-9.3-1101.jdbc4.jar用于JDBC连接postgreSQL数据库

分页效果如下:能通过点击上页下页实现翻页,输入指定页面跳转(超出范围跳转到第1或最后页)。具体实现请参见详细代码,我都贴上来了。小菜鸟一名,处于正在学习阶段,有大神能指点下当然更好,希望不吝赐教!

jsp+servlet+javabean实现数据分页方法完整实例

二、具体代码实现

1、config.xml数据库连接信息属性文件

 

 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE postgres[ 
  3. <!ELEMENT postgres (driver,url,username,pwd)> 
  4. <!ELEMENT driver (#PCDATA)> 
  5. <!ELEMENT url (#PCDATA)> 
  6. <!ELEMENT username (#PCDATA)> 
  7. <!ELEMENT pwd (#PCDATA)> 
  8. ]> 
  9. <postgres> 
  10. <driver>org.postgresql.Driver</driver> 
  11. <url>jdbc:postgresql://localhost:5432/java</url> 
  12. <username>admin</username> 
  13. <pwd>k42jc</pwd> 
  14. </postgres> 

2、DOM4JUtil.java

 

 
  1. package util; 
  2. import org.dom4j.Document; 
  3. import org.dom4j.DocumentException; 
  4. import org.dom4j.Element; 
  5. import org.dom4j.io.SAXReader; 
  6. /**  
  7. * 用于解析xml属性文件  
  8. * @author JohsonMuler  
  9. *  
  10. */ 
  11. public class DOM4JUtil { 
  12. private static Element root=null; 
  13. static{//静态代码块 
  14. //创建解析对象 
  15. SAXReader sr=new SAXReader(); 
  16. //获取当前工程路径 
  17. // String url=System.getProperty("user.dir"); 
  18. String url=DOM4JUtil.class.getResource("").getPath(); 
  19. // System.out.println(url); 
  20. try { 
  21. //通过文件路径获取配置文件信息 
  22. Document doc=sr.read(url+"config.xml"); 
  23. //获取根节点 
  24. root=doc.getRootElement(); 
  25. } catch (DocumentException e) { 
  26. e.printStackTrace(); 
  27. } 
  28. } 
  29. public static String getPostgresData(String str){ 
  30. //以根节点为基础,获取配置文件数据 
  31. Element e=root.element(str); 
  32. String data=e.getText(); 
  33. return data; 
  34. } 
  35. public static void main(String[] args) { 
  36. // String url=DOM4JUtil.class.getResource("..").getPath(); 
  37. // System.out.println(System.getProperty("user.dir")); 
  38. // System.out.println(url); 
  39. String driver=getPostgresData("driver"); 
  40. String url=getPostgresData("url"); 
  41. System.out.println(driver); 
  42. System.out.println(url); 
  43. } 
  44. } 

3、PostgreSQL_Util.java

 

 
  1. package util; 
  2. import java.sql.PreparedStatement; 
  3. import java.sql.Statement; 
  4. import java.sql.Connection; 
  5. import java.sql.DriverManager; 
  6. import java.sql.ResultSet; 
  7. import java.sql.SQLException; 
  8. import java.util.List; 
  9. public class PostgreSQL_Util { 
  10. private static DOM4JUtil dom=new DOM4JUtil(); 
  11. private static Connection c=null; 
  12. private static ResultSet rs=null; 
  13. private static String driver=dom.getPostgresData("driver"); 
  14. private static String url=dom.getPostgresData("url"); 
  15. private static String username=dom.getPostgresData("username"); 
  16. private static String pwd=dom.getPostgresData("pwd"); 
  17. public PostgreSQL_Util(){ 
  18. try { 
  19. Class.forName(driver); 
  20. c=DriverManager.getConnection(url); 
  21. } catch (ClassNotFoundException e) { 
  22. System.out.println("未找到指定类:"+e.getMessage()); 
  23. } catch (SQLException e) { 
  24. System.out.println("获取连接异常:"+e.getMessage()); 
  25. } 
  26. } 
  27. /** 
  28. * 数据查询方法(Statement) 
  29. * @param sql 
  30. * @return 
  31. * @throws SQLException 
  32. */ 
  33. public ResultSet executeQuery(String sql) throws SQLException{ 
  34. Statement s=c.createStatement(); 
  35. rs=s.executeQuery(sql); 
  36. return rs; 
  37. } 
  38. /** 
  39. * 重载方法(PreparedStatement) 
  40. * @param sql 
  41. * @param list 
  42. * @return 
  43. * @throws SQLException 
  44. */ 
  45. public ResultSet executeQuery(String sql,List<Object> list) throws SQLException{ 
  46. PreparedStatement ps=c.prepareStatement(sql); 
  47. for(int i=0;i<list.size();i++){ 
  48. System.out.println(list.get(i)); 
  49. System.out.println(i+1); 
  50. ps.setObject(i+1, list.get(i)); 
  51. } 
  52. rs=ps.executeQuery(); 
  53. c.close(); 
  54. return rs; 
  55. } 
  56. /** 
  57. * 数据更新方法(添加,删除,更改)(Statement) 
  58. * @param sql 
  59. * @throws SQLException 
  60. */ 
  61. public int executeUpdate(String sql) throws SQLException{ 
  62. Statement s=c.createStatement(); 
  63. int i=s.executeUpdate(sql); 
  64. c.close(); 
  65. return i; 
  66. } 
  67. /** 
  68. * 重载方法(PreparedStatement) 
  69. * @param sql 
  70. * @param list 
  71. * @throws SQLException 
  72. */ 
  73. public int executeUpdate(String sql,List<Object> list) throws SQLException{ 
  74. PreparedStatement ps=c.prepareStatement(sql); 
  75. for(int i=0;i<list.size();i++){ 
  76. ps.setObject(i+1, list.get(i)); 
  77. } 
  78. int i=ps.executeUpdate(); 
  79. c.close(); 
  80. return i; 
  81. } 
  82. /** 
  83. * 单独的获取连接 
  84. * @return 
  85. * @throws ClassNotFoundException 
  86. * @throws SQLException 
  87. */ 
  88. public static Connection getConnection() throws ClassNotFoundException, SQLException{ 
  89. Class.forName(driver); 
  90. c=DriverManager.getConnection(url); 
  91. return c; 
  92. } 
  93. } 

4、PageProperties.java

 

 
  1. package bean; 
  2. import java.sql.ResultSet; 
  3. public class PageProperties { 
  4. private int currentPage;//当前页号 
  5. private int totalPages;//总页数 
  6. private int totalRecords;//总数据条数 
  7. private ResultSet rs;//动态结果集 
  8. public PageProperties() { 
  9. super(); 
  10. } 
  11. public PageProperties(int currentPage, int totalPages, int totalRecords,  
  12. ResultSet rs) { 
  13. super(); 
  14. this.currentPage = currentPage; 
  15. this.totalPages = totalPages; 
  16. this.totalRecords = totalRecords; 
  17. this.rs = rs; 
  18. } 
  19. public int getCurrentPage() { 
  20. return currentPage; 
  21. } 
  22. public void setCurrentPage(int currentPage) { 
  23. this.currentPage = currentPage; 
  24. } 
  25. public int getTotalPages() { 
  26. return totalPages; 
  27. } 
  28. public void setTotalPages(int totalPages) { 
  29. this.totalPages = totalPages; 
  30. } 
  31. public int getTotalRecords() { 
  32. return totalRecords; 
  33. } 
  34. public void setTotalRecords(int totalRecords) { 
  35. this.totalRecords = totalRecords; 
  36. } 
  37. public ResultSet getRs() { 
  38. return rs; 
  39. } 
  40. public void setRs(ResultSet rs) { 
  41. this.rs = rs; 
  42. } 
  43. } 

5、TablePage.java

 

 
  1. package bean; 
  2. import java.sql.ResultSet; 
  3. public class PageProperties { 
  4. private int currentPage;//当前页号 
  5. private int totalPages;//总页数 
  6. private int totalRecords;//总数据条数 
  7. private ResultSet rs;//动态结果集 
  8. public PageProperties() { 
  9. super(); 
  10. } 
  11. public PageProperties(int currentPage, int totalPages, int totalRecords,  
  12. ResultSet rs) { 
  13. super(); 
  14. this.currentPage = currentPage; 
  15. this.totalPages = totalPages; 
  16. this.totalRecords = totalRecords; 
  17. this.rs = rs; 
  18. }  
  19. public int getCurrentPage() { 
  20. return currentPage; 
  21. } 
  22. public void setCurrentPage(int currentPage) { 
  23. this.currentPage = currentPage; 
  24. } 
  25. public int getTotalPages() { 
  26. return totalPages; 
  27. } 
  28. public void setTotalPages(int totalPages) { 
  29. this.totalPages = totalPages; 
  30. } 
  31. public int getTotalRecords() { 
  32. return totalRecords; 
  33. } 
  34. public void setTotalRecords(int totalRecords) { 
  35. this.totalRecords = totalRecords; 
  36. } 
  37. public ResultSet getRs() { 
  38. return rs; 
  39. } 
  40. public void setRs(ResultSet rs) { 
  41. this.rs = rs; 
  42. } 
  43. } 

6、Page.java这是主要处理类,Servlet

 

  1. package servlet; 
  2. import java.io.IOException; 
  3. import java.io.PrintWriter; 
  4. import java.sql.ResultSet; 
  5. import java.sql.SQLException; 
  6. import javax.servlet.ServletException; 
  7. import javax.servlet.http.HttpServlet; 
  8. import javax.servlet.http.HttpServletRequest; 
  9. import javax.servlet.http.HttpServletResponse; 
  10. import util.PostgreSQL_Util; 
  11. import bean.PageProperties; 
  12. import bean.TablePage; 
  13. public class Page extends HttpServlet { 
  14. public void service(HttpServletRequest request, HttpServletResponse response) 
  15. throws ServletException, IOException { 
  16. request.setCharacterEncoding("utf-8"); 
  17. response.setContentType("text/html;charset=utf-8"); 
  18. PrintWriter out = response.getWriter(); 
  19. /** 
  20. * 通过TablePage设置分页属性 
  21. * 
  22. */ 
  23. TablePage tb=new TablePage(); 
  24. //获取当前表格显示的页码 
  25. int currentPage=tb.currentPage(tb.getStrPage(request, "page")); 
  26. System.out.println(currentPage); 
  27. //设置每页显示数据条数 
  28. tb.setPageRecord(10);//设置每页显示10条数据 
  29. /** 
  30. * 通过xxSQL_Util设置JDBC连接及数据处理 
  31. */ 
  32. PostgreSQL_Util postgres=new PostgreSQL_Util(); 
  33. try { 
  34. ResultSet rs_count=postgres.executeQuery("select count(*) as c from student"); 
  35. rs_count.next(); 
  36. //获得总的数据条数 
  37. int totalRecords=rs_count.getInt("c"); 
  38. //根据数据表的总数据条数获取页面显示表格的总页数 
  39. int totalPages=tb.getTotalPages(totalRecords); 
  40. if(currentPage>totalPages){ 
  41. currentPage=totalPages;//保证最后一页不超出范围 
  42. } 
  43. //根据数据库表信息和当前页面信息获得动态结果集 
  44. ResultSet rs=tb.getPageResultSet(postgres.executeQuery("select * from student"), currentPage); 
  45. /**  
  46. * 将数据加入javaBean 
  47. */ 
  48. PageProperties pp=new PageProperties(currentPage, totalPages, totalRecords, rs); 
  49. /**  
  50. * 将javaBean转发至前端  
  51. */ 
  52. request.setAttribute("result", pp); 
  53. request.getRequestDispatcher("tablePage.jsp").forward(request, response); 
  54. } catch (SQLException e) { 
  55. System.out.println("Class Page:"+e.getMessage()); 
  56. // e.printStackTrace(); 
  57. } 
  58. } 
  59. } 

7、tablePage.jsp前台显示效果

 

 
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
  2. <%@page import="java.sql.ResultSet"%> 
  3. <%@page import="bean.PageProperties"%> 
  4. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
  5. <% 
  6. String path = request.getContextPath(); 
  7. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
  8. %> 
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  10. <html> 
  11. <head> 
  12. <title>简单数据分页</title> 
  13. <meta http-equiv="pragma" content="no-cache"> 
  14. <meta http-equiv="cache-control" content="no-cache"> 
  15. <meta http-equiv="expires" content="0"> 
  16. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
  17. <meta http-equiv="description" content="This is my page"> 
  18. <!-- 
  19. <link rel="stylesheet" type="text/css" href="styles.css"> 
  20. --> 
  21. </head> 
  22. <body> 
  23. <table> 
  24. <tr> 
  25. <td>姓名</td> 
  26. <td>性别</td> 
  27. <td>年龄</td> 
  28. <td>分数</td> 
  29. </tr> 
  30. <% 
  31. PageProperties pp=(PageProperties)request.getAttribute("result");  
  32. ResultSet rs=pp.getRs(); 
  33. %> 
  34. <% 
  35. int i=1; 
  36. while(rs.next()){ 
  37. %> 
  38. <tr> 
  39. <td><%=rs.getObject(1) %></td> 
  40. <td><%=rs.getObject(2) %></td> 
  41. <td><%=rs.getObject(3) %></td> 
  42. <td><%=rs.getObject(4) %></td> 
  43. </tr> 
  44. <% 
  45. i++; 
  46. if(i>10) 
  47. break; 
  48. } 
  49. %> 
  50. <br/> 
  51. <span><%=pp.getTotalPages() %>页</span> 
  52. <span>共<%=pp.getTotalRecords() %>条数据</span> 
  53. <span>本页<%=i-1 %>条</span> 
  54. <span>第<%=pp.getCurrentPage() %>页</span> 
  55. <p align="center"> 
  56. <% 
  57. if ( pp.getCurrentPage() > 1 ) 
  58. { 
  59. %><a href="<%=path %>/page?page=<%=pp.getCurrentPage() - 1%>"><<上一页</a> 
  60. <% 
  61. } 
  62. %> 
  63. <% 
  64. if ( pp.getCurrentPage() < pp.getTotalPages() ) 
  65. { 
  66. %><a href="<%=path %>/page?page=<%=pp.getCurrentPage() + 1%>">下一页>></a> 
  67. <% 
  68. } 
  69. %> 
  70. <input type="text" name="input_text" id="input_text" size="1" />  
  71. <input type="button" name="skip" id="skip" value="跳转" onclick="skip();"/> 
  72. <script> 
  73. function skip(){ 
  74. var v=document.getElementById("input_text").value; 
  75. location.href="page?page="+v; 
  76. } 
  77. </script> 
  78. </p> 
  79. </table> 
  80. </body> 
  81. </html> 

初步看,感觉后台代码实在是繁琐,但这是考虑到程序健壮性与可移植性,方便代码重用。以后要用,根据自己的需要在属性文件(config.xml)中配置相关JDBC驱动,在jsp页面通过request获得后台Servlet(Page.jsp)的转发结果("result"),结合页面属性(PageProperties.java类)即可实现效果。

当然,这也是因为个人学习,倾向于多用点东西。

希望本文所述对大家jsp程序设计有所帮助。


注:相关教程知识阅读请移步到JSP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表