a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费观看性欧美大片无片 | 91偷拍精品一区二区三区 | 日韩av电影网 | 国产中文一区二区三区 | 成人av电影免费观看 | 欧美久久精品 | 最近韩国日本免费高清观看 | 电影午夜精品一区二区三区 | 春色av| 国产精品久久久久国产a级 一区二区三区在线 | 欧美国产精品一区二区 | 国产精品99久久久久久久vr | 毛片免费观看视频 | 天堂免费在线观看视频 | 久久不射电影网 | 国产精品一区在线 | 午夜寂寞少妇aaa片毛片 | 国产精品久久久久久久久久妞妞 | 欧美视频一区二区 | 久久精品久久久久久久久久久久久 | 国产精品久久一区二区三区 | 中文字幕一区二区三区精彩视频 | 精品国产免费久久久久久尖叫 | 一区二区三区在线免费观看 | 日韩欧美一区二区三区久久婷婷 | 99久久99久久精品国产片果冻 | 园产精品久久久久久久7电影 | 草逼一区 | 中文在线一区 | 日韩欧美精品在线 | 日韩成人短视频 | 欧美精品一区在线发布 | 亚洲少妇视频 | 欧美激情视频免费观看 | 在线色网站 | 蜜桃视频在线播放 | 欧美日韩在线视频一区二区 | 国产性在线| 日韩在线成人 | 欧美一区免费 | 欧美影片 |