程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 一個通用的JSP分頁類,具有顯示多組頁碼功能

一個通用的JSP分頁類,具有顯示多組頁碼功能

編輯:關於JSP

      最近幾天學習jsp覺得很好,寫了個分頁類,給大家分享一下,同時也請高手指點。

      第一部分:db.MysqlConn 數據庫鏈接類

      /**********************************************************

      路徑:zon.db.MysqlConn

      文件:MysqlConn.java

      用途:數據庫連接

    
    package db;
    import java.sql.*;
    
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
    
    import java.io.*;
    
    
    
    
    
    //導入數據庫操作的類
    public class MysqlConn {  
    
     private Connection conn;  //連接對象       
     private Statement stmt;  //語句對象   
     private ResultSet rs;    //結果集對象
     private String MySqldriver="com.mysql.jdbc.Driver";  //MYSQL Server驅動程序字符串
     private String MySqlURL =  "jdbc:mysql://";  //MYSQL Server連接字符串
     String databasex;
     String webRealPath="D://zon//WebRoot//";  //根路徑實際路徑,用於讀取數據庫鏈接參數的配置文件 database.xml
     
     // 定義數據庫鏈接參數變量
     String server="localhost";
     String dbname="phpzon";
     String user="admin";
     String pass="admin";
     String port="3306";
     String dbchara="utf-8";
     String dbprefix="zon_"; //表前綴
     
        public void setDatabasex(String databasex){
            this.databasex = databasex;
        }
        public String getDatabasex(){
             return databasex;
        }
    
        public void setWebRealPath(String webRealPath){
            this.webRealPath = webRealPath;
        }
        public String getWebRealPath(){
             return webRealPath;
        }
     
     
    /*******************************************************************
    *  用  com.mysql.jdbc.Driver 驅動 
    *  該方法取得連接所需各種參數,組成連接字符串,
    *  然後再建立連接*  server;dbname,user,pass,port 
    *  分別表示MYSQL 服務器的地址、數據庫名、用戶名、密碼、端口,
    *  本方法已作改造,直接通過配置文件 WEB-INF//database.xml 讀取鏈接信息
    ********************************************************************/
    
    public Connection getMysqlConn()
    {  
           
        //根據數據庫配置文件獲得數據庫鏈接參數  database.xml
        //建立解析工廠
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setIgnoringElementContentWhitespace(true);//忽略元素內容中的空格
        //創建解析器
        DocumentBuilder dbxml;
        try { 
         dbxml = factory.newDocumentBuilder();
         //得到解析文件      
         Document doc;
         try {
          doc = dbxml.parse("file:///"+webRealPath+"WEB-INF//database.xml");
          doc.normalize();
          //得到根元素
          //Element root = doc.getDocumentElement();
          //得到所有db元素
          //NodeList dbs = doc.getElementsByTagName("db");
          //NodeList dbType = doc.getElementsByTagName("type");
          NodeList dbDriver = doc.getElementsByTagName("driver");
          NodeList dbUrl = doc.getElementsByTagName("url");
          NodeList dbServer = doc.getElementsByTagName("server");
          NodeList dbPort =doc.getElementsByTagName("port");
          NodeList dbDbname =doc.getElementsByTagName("dbname");
          NodeList dbUser =doc.getElementsByTagName("user");
          NodeList dbPassword =doc.getElementsByTagName("password");
          NodeList dbChara =doc.getElementsByTagName("chara");
          NodeList dbPrefix =doc.getElementsByTagName("prefix");
          
          //獲取各參數值  
          int i=0;
          MySqldriver = dbDriver.item(i).getFirstChild().getNodeValue(); //MYSQl驅動程序 MySqldriver = "com.mysql.jdbc.Driver";    
          MySqlURL = dbUrl.item(i).getFirstChild().getNodeValue(); //鏈接路徑 "jdbc:mysql://"; 
          server = dbServer.item(i).getFirstChild().getNodeValue(); //數據庫服務器地址
          port = dbPort.item(i).getFirstChild().getNodeValue(); //數據庫端口 默認 3306
          dbname = dbDbname.item(i).getFirstChild().getNodeValue(); //數據庫名稱
          user = dbUser.item(i).getFirstChild().getNodeValue(); //用戶名
          pass = dbPassword.item(i).getFirstChild().getNodeValue(); //密碼
          dbchara = dbChara.item(i).getFirstChild().getNodeValue(); //數據庫編碼
          dbprefix = dbPrefix.item(i).getFirstChild().getNodeValue(); //表名前綴
          
          try{//完整的連接字符串
           MySqlURL=MySqlURL+server+":"+port+"/"+dbname+"?user="+user+"&password="+pass+"&useUnicode=true&characterEncoding="+dbchara; 
           
           Class.forName(MySqldriver);
           conn = DriverManager.getConnection(MySqlURL);
            }
            catch(Exception e){
             System.out.println("操作數據庫出錯,請仔細檢查");
             System.err.println(e.getMessage());
            } 
       
          
         } catch (SAXException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
        
         
        } catch (ParserConfigurationException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
        }
        
        return conn;
        
     }   
    
    /*
     * 執行sql 語句,返回記錄集 ,主要針對 select、show語句
     */
    public ResultSet sqlQuery(String sql){
     sql=SetQuery(sql);
     Statement temStmt = null;  //語句對象   
     ResultSet temRs = null;    //結果集對象
     Connection temConn=this.getMysqlConn();  
     
      try {
       temStmt=temConn.createStatement();
       //執行sql查詢語句,得到記錄集
       temRs=temStmt.executeQuery(sql);
       
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }  
      return temRs;  
    }
    
    /*
     * 執行Insert sql 語句  
     */
    public void sqlInsert(String sql){
        sql=SetQuery(sql);
      try {
        this.getMysqlConn().createStatement().executeUpdate(sql);        
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
    }
    
    /*
     * 執行update sql 語句  
     */
    public void sqlUpdate(String sql){
     sql=SetQuery(sql);
     try {
       this.getMysqlConn().createStatement().executeUpdate(sql);        
     } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
    
    
    /*
     * 執行delete sql 語句   
     */
    public void sqlDelete(String sql){
     sql=SetQuery(sql);
     try {
       this.getMysqlConn().createStatement().executeUpdate(sql);        
     } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
    
    /*
     * 執行sql 語句,返回記錄總數 ,主要針對 select語句
     */
    public int sqlTotalRow(String sql){
     Statement temStmt = null;  //語句對象   
     ResultSet temRs = null;    //結果集對象
     int result = 0; //結果值
     Connection temConn=this.getMysqlConn();  
     
      try {
       temStmt=temConn.createStatement();
       //執行sql查詢語句,得到記錄集
       temRs=temStmt.executeQuery(sql);
       temRs.last();
       result = temRs.getRow();
         
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }  
      return result;  
    }
    
    //設置SQL語句,會自動把SQL語句裡的#@__替換為 配置文件中的 表 前綴 zon_
    public String SetQuery(String sql)
    {
      String prefix="#@__";
      sql = sql.replace(prefix, this.dbprefix);
      return sql;
    }
    //關閉數據庫連接
    public void close(){
          try{
          //rs.close();
          //stmt.close();
          conn.close();
          }
          catch(SQLException sqlexception){
          sqlexception.printStackTrace();
          }
         }
    
    
    } 

    第二部分: db.MysqlPages  分頁類代碼

    /**********************************************************
     路徑:zon.db.MysqlPages
     文件:MysqlPages.java
     用途:優化的分頁
     ***********************************************************/
    package db;
    
    import java.sql.*;
    import db.MysqlConn;  //數據庫鏈接類
    
    
    /**********************************************************
     *功能:
     *標記:
     *作者:劉亞東 Yodon.Liu
     *日期:2009-8-30 下午09:20:12
     ***********************************************************/
    public class MysqlPages {
    
     int PageSize=10; //調用時可自定義變量,每頁條數
     int PageRows=8; //調用時可自定義變量,頁碼組,每組顯示多少個頁碼編號,8默認,實際顯示數會自動+1,包含當前頁碼
     
     int RowCount=0;//總條數
     int PageCount=1;//總頁數 
     int inPage=1; //當前頁碼默認值
     int inRow=0; //本頁查詢開始行號 默認 0
     String linkPage = "?"; //調用時可以自定義變量,頁碼鏈接頁面 
     String webRealPath="/"; //網站真實根路徑,通過jsp頁面獲得之後傳遞過來
     
     //顯示文字 默認, 調用時可以自定義變量
     String langs = "首頁,上一頁,下一頁,尾頁,共,條記錄,頁";
     String[] langss= langs.split(",");
     
     String lang_first_page = langss[0];
     String lang_pre_page = langss[1];
     String lang_next_page = langss[2]; 
     String lang_end_page = langss[3];
     String lang_total = langss[4];
     String lang_record_number = langss[5];
     String lang_page = langss[6];
     
     //臨時
     String sql="";
     String page="1";
     
     private Statement stmt;  //語句對象   
     private ResultSet rs;    //結果集對象
     
     //返回值,分頁頁碼列表
     String pagesInfo="";
    
     
     /****
      * 主方法 獲得 分頁列表字符串
      * @return
      */
     public String pageInfo(){  
    
      
    
      
      MysqlConn DBConn = new MysqlConn(); //創建數據庫鏈接實例,可根據自己的實際情況修改 
       
       RowCount = DBConn.sqlTotalRow(sql); //在MysqlConn中有一個 sqlTotalRow 方法,用於求記錄總和(請根據自己的求記錄總和的方式修改此處)   
       
       PageCount=(RowCount+PageSize-1)/PageSize; 
    
       if(page!=null) inPage=Integer.parseInt(page);
       
       if(inPage<1) inPage=1;
       if(inPage>PageCount) inPage=PageCount;
       inRow = (inPage-1)*PageSize;
    
         sql=sql + " limit " + String.valueOf(inRow) + "," + String.valueOf(PageSize);
    
       rs=DBConn.sqlQuery(sql);
    
       //頁碼顯示部分
       int PageRowsL = PageRows/2; // 生成當前頁碼 左側最大調用的頁碼數
       int PageRowsR = PageRows-PageRows/2; // 生成當前頁碼 右側最大調用的頁碼數
       if(inPage<=PageRowsL){
       PageRowsL = inPage-1;
       PageRowsR = PageRows-inPage+1;
       }
       if(inPage+PageRowsR>PageCount){
       PageRowsL = PageRows-(PageCount-inPage);
       PageRowsR = PageCount-inPage;
       }
    
       int PageLs=1; //左側開始最大頁碼號
       int PageRs=PageCount; //左側開始最大頁碼號 
       PageLs = ((inPage - PageRowsL)>=1)?inPage-PageRowsL:1;  //實際左側第一個顯示的頁碼
       PageRs = ((inPage + PageRowsR)<=PageCount)?inPage+PageRowsR:PageCount; //實際右側第一個顯示的頁碼
    
    
       pagesInfo = pagesInfo+("<div class=dh_pages><ul><li class=total>"+lang_total+""+RowCount+lang_record_number+","+PageCount+lang_page+"</li>");
    
       //首頁
       pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page=1/">"+lang_first_page+"</a></li>");
       //上一頁 
       pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+(inPage-1)+"/">"+lang_pre_page+"</a></li>");
    
    
       //左側頁碼
       if(PageLs!=inPage){
       for(int iL=PageLs;iL<inPage;iL++){
       pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+iL+"/">"+iL+"</a></li>");
       }
       }
       //當前頁碼
       pagesInfo = pagesInfo+("<li class=inpage><a href="/" mce_href="/"""+linkPage+"page="+inPage+"/">"+inPage+"</a></li>");
       //右側頁碼
       if(PageRs!=inPage){
       for(int iR=inPage+1;iR<=PageRs;iR++){
       pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+iR+"/">"+iR+"</a></li>");
       }
       }
       //下一頁
       pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+(inPage+1)+"/">"+lang_next_page+"</a></li>");
       //尾頁
       pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+PageCount+"/">"+lang_end_page+"</a></li>");
    
       pagesInfo = pagesInfo+("</ul></div>");
     
    
      return pagesInfo;
      
      
      
     }
     
        public void setPage(String page){
            this.page = page;
        }
        public String getPage(){
             return page;
        }
        
        public void setSql(String sql){
            this.sql = sql;
        }
        public String getSql(){
             return sql;
        }
        
        public void setLinkPage(String linkPage){
            this.linkPage = linkPage;
        }
        public String getLinkPage(){
             return linkPage;
        }
        
        
        public void setPageSize(int PageSize){
            this.PageSize = PageSize;
        }
        public int getPageSize(){
             return PageSize;
        }
        
        
        public void setPageRows(int PageRows){
            this.PageRows = PageRows;
        }
        public int getPageRows(){
             return PageRows;
        }   
        
     
        public void setLangs(String langs){
            this.langs = langs;
        }
        public String getLangs(){
             return langs;
        }
       
        
        public void setLang_first_page(String lang_first_page){
            this.lang_first_page = lang_first_page;
        }
        public String getLang_first_page(){
             return lang_first_page;
        }
        
        public void setLang_pre_page(String lang_pre_page){
            this.lang_pre_page = lang_pre_page;
        }
        public String getLang_pre_page(){
             return lang_pre_page;
        } 
        
        public void setLang_next_page(String lang_next_page){
            this.lang_next_page = lang_next_page;
        }
        public String getLang_next_page(){
             return lang_next_page;
        }   
        
        public void setLang_end_page(String lang_end_page){
            this.lang_end_page = lang_end_page;
        }
        public String getLang_end_page(){
             return lang_end_page;
        }    
        
        public void setLang_total(String lang_total){
            this.lang_total = lang_total;
        }
        public String getLang_total(){
             return lang_total;
        }    
        
        public void setLang_record_number(String lang_record_number){
            this.lang_record_number = lang_record_number;
        }
        public String getLang_record_number(){
             return lang_record_number;
        }
        
        public void setLang_page(String lang_page){
            this.lang_page = lang_page;
        }
        public String getLang_page(){
             return lang_page;
        }    
        /*
     String lang_first_page = "首頁";
     String lang_pre_page = "上一頁";
     String lang_next_page = "下一頁"; 
     String lang_end_page = "尾頁";
     String lang_total = "共";
     String lang_record_number = "條記錄";
     String lang_page = "頁"; 
     */
     
     
        public void setWebRealPath(String webRealPath){
            this.webRealPath = webRealPath;
        }
        public String getWebRealPath(){
             return webRealPath;
        }
     
        public void setRs(ResultSet rs){
            this.rs = rs;
        }
        public ResultSet getRs(){
             return rs;
        }
        
        
    }

    第三部分:JSP頁面 調用

    <%
    //設置屬性值
    DBPages.setPageSize(10);  //每頁條數
    DBPages.setPageRows(4);  //每組頁數,最好是偶數,會自動加上當前頁碼
    
    //為不同的按鈕設置 圖片,也可以直接設置文字,如:首頁、上一頁、下一頁、尾頁
    DBPages.setLang_first_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/start.gif border=0>"); 
    DBPages.setLang_pre_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/previous.gif border=0>"); 
    DBPages.setLang_next_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/next.gif border=0>"); 
    DBPages.setLang_end_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/end.gif border=0>"); 
    DBPages.setSql("select * from admin   ");  //sql語句
    
    //傳遞當前頁碼
    DBPages.setPage(request.getParameter("page"));
    
    //執行並獲取分頁內容
    String pageInfos = DBPages.pageInfo();
    
    //顯示當前頁面記錄列表
     ResultSet rs=DBPages.getRs();
     while(rs.next()){
     out.println(rs.getString("admin_id"));
             out.println(rs.getString("admin_user"));
    
               }
    %>

    第四部分:樣式表  用於控制頁碼行顯示效果

    /* 通用分頁樣式 */
     .dh_pages{
     }
     .dh_pages ul{
      float:left;
      padding:12px 0px 12px 16px;
     }
     .dh_pages ul li{
      float:left;
      font-family:Tahoma;
      line-height:17px;
      margin-right:6px;
     }
     .dh_pages ul li a{
      float:left;
      padding:2px 4px 2px;
      color:#666;
      border-bottom:1px solid #EEE;
     }
     .dh_pages ul li a:hover{
      color:#690;
      text-decoration:none;
      padding:2px 4px 1px;
      border-bottom:2px solid #690;
     }
     .dh_pages ul li.inpage a,.pagebox ul li.inpage a:hover{
      color:#F63;
      padding:2px 4px 1px;
      border-bottom:2px solid #F63;
      font-weight:bold;
     }
    /* 分頁中總頁碼、總數樣式,一般居左或居右對齊 */
     .dh_pages .total{
      float:right;
      line-height:21px;
    
      color:#999;
     }
     .dh_pages .total strong{
      color:#666;
      font-weight:normal;
      margin:0px 2px;
     }
     

    第五部分:附數據庫鏈接參數配置文件  database.xml

    本例中讀取數據庫時使用了一個數據庫鏈接的自定義配置文件,放在  WebRoot/WEB-INF/ 目錄下,其內容如下:

    <?xml version="1.0" encoding="utf-8"?>   
    <dbconfig>   
    <db id="1">
    <type>mysql</type>
    <driver>com.mysql.jdbc.Driver</driver>   
    <url>jdbc:mysql://</url>  
    <server>localhost</server>
    <port>3306</port>   
    <dbname>zon</dbname>  
    <user>admin</user>   
    <password>admin</password>
    <chara>utf-8</chara>  
    <prefix>zon_</prefix>  
    </db> 
    </dbconfig>
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved