手机
当前位置:查字典教程网 >编程开发 >JSP教程 >一个通用的JSP分页类,具有显示多组页码功能
一个通用的JSP分页类,具有显示多组页码功能
摘要:最近几天学习jsp觉得很好,写了个分页类,给大家分享一下,同时也请高手指点。第一部分:db.MysqlConn数据库链接类/********...

最近几天学习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); st(); 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){ ngs = langs; } public String getLangs(){ return langs; } public void setLang_first_page(String lang_first_page){ ng_first_page = lang_first_page; } public String getLang_first_page(){ return lang_first_page; } public void setLang_pre_page(String lang_pre_page){ ng_pre_page = lang_pre_page; } public String getLang_pre_page(){ return lang_pre_page; } public void setLang_next_page(String lang_next_page){ ng_next_page = lang_next_page; } public String getLang_next_page(){ return lang_next_page; } public void setLang_end_page(String lang_end_page){ ng_end_page = lang_end_page; } public String getLang_end_page(){ return lang_end_page; } public void setLang_total(String lang_total){ ng_total = lang_total; } public String getLang_total(){ return lang_total; } public void setLang_record_number(String lang_record_number){ ng_record_number = lang_record_number; } public String getLang_record_number(){ return lang_record_number; } public void setLang_page(String lang_page){ ng_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>

【一个通用的JSP分页类,具有显示多组页码功能】相关文章:

一个通用的jsp分页PageBean

高效的jsp分页查询

一个完整的新闻发布系统代码

一个开发人员眼中的JSP技术(下)

jsp分页显示完整实例

将JSP在内存生成的图片显示到页面

一个分页的类及调用的例子

jsp上传图片即时显示效果代码

jsp源码实例1(输出)

一个用JSP做的日历

精品推荐
分类导航