首页 > 编程 > 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. public static String getPostgresData(String str){ 
  28. //以根节点为基础,获取配置文件数据 
  29. Element e=root.element(str); 
  30. String data=e.getText(); 
  31. return data; 
  32. public static void main(String[] args) { 
  33. // String url=DOM4JUtil.class.getResource("..").getPath(); 
  34. // System.out.println(System.getProperty("user.dir")); 
  35. // System.out.println(url); 
  36. String driver=getPostgresData("driver"); 
  37. String url=getPostgresData("url"); 
  38. System.out.println(driver); 
  39. System.out.println(url); 

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. * 数据查询方法(Statement) 
  27. * @param sql 
  28. * @return 
  29. * @throws SQLException 
  30. */ 
  31. public ResultSet executeQuery(String sql) throws SQLException{ 
  32. Statement s=c.createStatement(); 
  33. rs=s.executeQuery(sql); 
  34. return rs; 
  35. /** 
  36. * 重载方法(PreparedStatement) 
  37. * @param sql 
  38. * @param list 
  39. * @return 
  40. * @throws SQLException 
  41. */ 
  42. public ResultSet executeQuery(String sql,List<Object> list) throws SQLException{ 
  43. PreparedStatement ps=c.prepareStatement(sql); 
  44. for(int i=0;i<list.size();i++){ 
  45. System.out.println(list.get(i)); 
  46. System.out.println(i+1); 
  47. ps.setObject(i+1, list.get(i)); 
  48. rs=ps.executeQuery(); 
  49. c.close(); 
  50. return rs; 
  51. /** 
  52. * 数据更新方法(添加,删除,更改)(Statement) 
  53. * @param sql 
  54. * @throws SQLException 
  55. */ 
  56. public int executeUpdate(String sql) throws SQLException{ 
  57. Statement s=c.createStatement(); 
  58. int i=s.executeUpdate(sql); 
  59. c.close(); 
  60. return i; 
  61. /** 
  62. * 重载方法(PreparedStatement) 
  63. * @param sql 
  64. * @param list 
  65. * @throws SQLException 
  66. */ 
  67. public int executeUpdate(String sql,List<Object> list) throws SQLException{ 
  68. PreparedStatement ps=c.prepareStatement(sql); 
  69. for(int i=0;i<list.size();i++){ 
  70. ps.setObject(i+1, list.get(i)); 
  71. int i=ps.executeUpdate(); 
  72. c.close(); 
  73. return i; 
  74. /** 
  75. * 单独的获取连接 
  76. * @return 
  77. * @throws ClassNotFoundException 
  78. * @throws SQLException 
  79. */ 
  80. public static Connection getConnection() throws ClassNotFoundException, SQLException{ 
  81. Class.forName(driver); 
  82. c=DriverManager.getConnection(url); 
  83. return c; 

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. public PageProperties(int currentPage, int totalPages, int totalRecords,  
  11. ResultSet rs) { 
  12. super(); 
  13. this.currentPage = currentPage; 
  14. this.totalPages = totalPages; 
  15. this.totalRecords = totalRecords; 
  16. this.rs = rs; 
  17. public int getCurrentPage() { 
  18. return currentPage; 
  19. public void setCurrentPage(int currentPage) { 
  20. this.currentPage = currentPage; 
  21. public int getTotalPages() { 
  22. return totalPages; 
  23. public void setTotalPages(int totalPages) { 
  24. this.totalPages = totalPages; 
  25. public int getTotalRecords() { 
  26. return totalRecords; 
  27. public void setTotalRecords(int totalRecords) { 
  28. this.totalRecords = totalRecords; 
  29. public ResultSet getRs() { 
  30. return rs; 
  31. public void setRs(ResultSet rs) { 
  32. this.rs = rs; 

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. public PageProperties(int currentPage, int totalPages, int totalRecords,  
  11. ResultSet rs) { 
  12. super(); 
  13. this.currentPage = currentPage; 
  14. this.totalPages = totalPages; 
  15. this.totalRecords = totalRecords; 
  16. this.rs = rs; 
  17. }  
  18. public int getCurrentPage() { 
  19. return currentPage; 
  20. public void setCurrentPage(int currentPage) { 
  21. this.currentPage = currentPage; 
  22. public int getTotalPages() { 
  23. return totalPages; 
  24. public void setTotalPages(int totalPages) { 
  25. this.totalPages = totalPages; 
  26. public int getTotalRecords() { 
  27. return totalRecords; 
  28. public void setTotalRecords(int totalRecords) { 
  29. this.totalRecords = totalRecords; 
  30. public ResultSet getRs() { 
  31. return rs; 
  32. public void setRs(ResultSet rs) { 
  33. this.rs = rs; 

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. ResultSet rs=tb.getPageResultSet(postgres.executeQuery("select * from student"), currentPage); 
  44. /**  
  45. * 将数据加入javaBean 
  46. */ 
  47. PageProperties pp=new PageProperties(currentPage, totalPages, totalRecords, rs); 
  48. /**  
  49. * 将javaBean转发至前端  
  50. */ 
  51. request.setAttribute("result", pp); 
  52. request.getRequestDispatcher("tablePage.jsp").forward(request, response); 
  53. catch (SQLException e) { 
  54. System.out.println("Class Page:"+e.getMessage()); 
  55. // e.printStackTrace(); 

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. <br/> 
  50. <span><%=pp.getTotalPages() %>页</span> 
  51. <span>共<%=pp.getTotalRecords() %>条数据</span> 
  52. <span>本页<%=i-1 %>条</span> 
  53. <span>第<%=pp.getCurrentPage() %>页</span> 
  54. <p align="center"
  55. <% 
  56. if ( pp.getCurrentPage() > 1 ) 
  57. %><a href="<%=path %>/page?page=<%=pp.getCurrentPage() - 1%>"><<上一页</a> 
  58. <% 
  59. %> 
  60. <% 
  61. if ( pp.getCurrentPage() < pp.getTotalPages() ) 
  62. %><a href="<%=path %>/page?page=<%=pp.getCurrentPage() + 1%>">下一页>></a> 
  63. <% 
  64. %> 
  65. <input type="text" name="input_text" id="input_text" size="1" />  
  66. <input type="button" name="skip" id="skip" value="跳转" onclick="skip();"/> 
  67. <script> 
  68. function skip(){ 
  69. var v=document.getElementById("input_text").value; 
  70. location.href="page?page="+v; 
  71. </script> 
  72. </p> 
  73. </table> 
  74. </body> 
  75. </html> 

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

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

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


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