使用JSP自定义标签实现简易分页功能

it2022-05-09  24

今天学习了JSP的自定义标签的3个创建方式特此开始记录下来

DB类

package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class dbUtil { Connection con=null; ResultSet rs=null; PreparedStatement pst=null; public void getConnection(){ try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/studb","root","123456"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 添加、修改、查询 * @param sql * @param param * @return */ public int execUpdate(String sql,Object[] param){ int row = -1; getConnection(); try { pst = con.prepareStatement(sql); if(param!=null){ for(int i=0;i<param.length;i++){ pst.setObject(i+1,param[i]); } } row = pst.executeUpdate(); } catch (Exception e) { // TODO: handle exception } return row; } public ResultSet execQuery(String sql,Object[] param){ getConnection(); try { pst = con.prepareStatement(sql); if(param!=null){ for(int i=0;i<param.length;i++){ pst.setObject(i+1,param[i]); } } rs = pst.executeQuery(); } catch (Exception e) { // TODO: handle exception } return rs; } /** * 关闭 * @param rs */ public void getClose(ResultSet rs){ try { if(rs!=null){ rs.close(); } if(con!=null){ con.close(); } if(pst!=null){ pst.close(); } } catch (Exception e) { // TODO: handle exception } } }

DAO类

package com.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import com.pojo.Page; import com.pojo.Student; public class studentDAO { dbUtil db = new dbUtil(); /** * 分頁 * @param pageNo * @param pageSize * @return */ public Page<Student> Query(int pageNo,int pageSize,String tab){ ArrayList<Student> list = new ArrayList<>(); Page<Student> pa = new Page<Student>(); int page =(pageNo-1)*pageSize; ResultSet rs = db.execQuery("SELECT * FROM "+tab+" LIMIT "+page+","+pageSize+";", null); try { while(rs.next()){ Student stu = new Student(); stu.setId(rs.getInt(1)); stu.setName(rs.getString(2)); stu.setSex(rs.getString(3)); stu.setAge(rs.getInt(4)); stu.setAddress(rs.getString(5)); list.add(stu); } pa.setCount(getCount(tab)); pa.setPageNo(pageNo); pa.setPageSize(pageSize); pa.setData(list); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return pa; } //返回的是数据库的总数量 public int getCount(String tab){ ResultSet rs = db.execQuery("select count(*) from "+tab+"", null); int row=0; try { while(rs.next()){ row=rs.getInt(1); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return row; } }

pojo类

package com.pojo; import java.util.ArrayList; public class Page<T> { // 每页存放5条数据 private int pageSize = 5; // 当前页数 private int pageNo = 1; // 总的数量 private int count = 0; // 数据存放 private ArrayList<T> data = null; public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public ArrayList<T> getData() { return data; } public void setData(ArrayList<T> data) { this.data = data; } // 首页 public int getIndexPage() { return 1; } // 上一页 public int getUpPage() { int page = pageNo - 1; if (page <= 1) { page = 1; } return page; } // 下一页 public int getDownPage() { int page = pageNo + 1; if (page >= getSumPage()) { page = getSumPage(); } return page; } // 尾页 总页数 public int getSumPage() { if (count % pageSize == 0) { return count / pageSize; } else { return count / pageSize + 1; } } // 尾页 public int getLastPage() { if (count % pageSize == 0) { return count / pageSize; } else { return count / pageSize + 1; } } }

标签实现类

package com.zuxia; import java.io.IOException; import java.util.ArrayList; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import com.dao.studentDAO; import com.pojo.Page; import com.pojo.Student; public class pageTag extends TagSupport{ private Integer pageIndex; private Integer pageSize; private String tableName; public Integer getPageIndex() { return pageIndex; } public void setPageIndex(Integer pageIndex) { this.pageIndex = pageIndex; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } @Override public int doStartTag() throws JspException { // TODO Auto-generated method stub JspWriter out = pageContext.getOut(); Page<Student> page = new studentDAO().Query(pageIndex, pageSize, tableName); ArrayList<Student> list = page.getData(); try { out.print("<table border='1' cellspacing='0' cellpadding='5' width='50%' align='center'>"); out.print("<tr>"); out.print("<td><h3>");out.print("序号");out.print("</h3></td>"); out.print("<td><h3>");out.print("姓名");out.print("</h3></td>"); out.print("<td><h3>");out.print("性别");out.print("</h3></td>"); out.print("<td><h3>");out.print("年龄");out.print("</h3></td>"); out.print("<td><h3>");out.print("地址");out.print("</h3></td>"); out.print("</tr>"); for (int i=0;i<list.size();i++) { Student stu = list.get(i); out.print("<tr>"); out.println("<td>"+stu.getId()+"</td>"); out.println("<td>"+stu.getName()+"</td>"); out.println("<td>"+stu.getSex()+"</td>"); out.println("<td>"+stu.getAge()+"</td>"); out.println("<td>"+stu.getAddress()+"</td>"); out.print("</tr>"); } out.print("<tr>"); out.print("<td colspan='5' style='text-align: center;'>"); out.print("<a href='index.jsp?pageIndex=1'>首页</a>  <a href='index.jsp?pageIndex="+page.getUpPage()+"'>上一页</a>  <a href='index.jsp?pageIndex="+page.getDownPage()+"'>下一页</a>  <a href='index.jsp?pageIndex="+page.getSumPage()+"'>尾页</a>"); out.print("</td>"); out.print("</tr>"); out.print("</table>"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return SKIP_BODY; } @Override public int doAfterBody() throws JspException { // TODO Auto-generated method stub return super.doAfterBody(); } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub return super.doEndTag(); } }

pageTag.tld配置

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <!-- taglib的版本 --> <tlib-version>1.0</tlib-version> <!-- jsp的版本 --> <jsp-version>1.2</jsp-version> <!-- 标签的短名 --> <short-name>myTag</short-name> <!-- 提供给jsp页面引用的路径 --> <uri>page.com</uri> <tag> <!-- 标签名 --> <name>page</name> <!-- 路径 --> <tag-class>com.zuxia.pageTag</tag-class> <!-- 标签类型(empty/jsp) --> <body-content>empty</body-content> <attribute> <!-- 变量名称 --> <name>pageIndex</name> <!-- 是否必填 --> <required>true</required> <!-- 是否可以输入表达式--> <rtexprvalue>true</rtexprvalue> <!-- 提示信息 --> <description>请输入起始坐标</description> </attribute> <attribute> <!-- 变量名称 --> <name>pageSize</name> <!-- 是否必填 --> <required>true</required> <!-- 是否可以输入表达式--> <rtexprvalue>true</rtexprvalue> <!-- 提示信息 --> <description>请输入起始坐标</description> </attribute> <attribute> <!-- 变量名称 --> <name>tableName</name> <!-- 是否必填 --> <required>true</required> <!-- 是否可以输入表达式--> <rtexprvalue>true</rtexprvalue> <!-- 提示信息 --> <description>请输入起始坐标</description> </attribute> </tag> </taglib>

页面引用

<%@ taglib uri="page.com" prefix="myTag" %> <% request.setCharacterEncoding("UTF-8"); %> <myTag:page pageIndex="${param.pageIndex == null ? 1 : param.pageIndex}" pageSize="5" tableName="stuinfo"/>

好了


最新回复(0)