前些天就写了个分页的,http://skymr.iteye.com/blog/665242
那个不太好,在写配置信息时都得在servlet中,每使用一次可得重写配置,而且在取得页面总数时,得使用sql语句重新查询,学习了一下dom4j解析xml,昨天又配置了Hiberate,想把知识巩固一点,于是赶紧完善了这个分页的插件。
在配置好xml文件后,只要在请求分页时,传入要显示的页码,读取xml文件,再实例化一个pojo类,查询数据库,调用对应的set方法,存于session中即可。
1.编写pojo类,如:
package cn.netjava.model; public class User { private String name; private int id; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
2.实现cn.netjava.db.DB_Interface接口
如:
package a; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import cn.netjava.db.DB_Interface; import cn.netjava.debug.Log; public class A implements DB_Interface{ Connection conn = null; public Connection getConn() { String url="jdbc:mysql://localhost:3306/catpage"; String root="root"; String pwd="root"; Log.printLog("user:"+root+"\tpwd:"+pwd); if(conn!=null){ return conn; } try { Log.printLog("user:"+root+"\tpwd:"+pwd); Class.forName("com.mysql.jdbc.Driver"); Log.printLog("user:"+root+"\tpwd:"+pwd); conn=DriverManager.getConnection(url,root,pwd); Log.printLog("连接成功"); } catch (ClassNotFoundException e) { e.printStackTrace(); Log.printLog(this.getClass()+"中,找不到Driver"); } catch (SQLException e) { e.printStackTrace(); Log.printLog(this.getClass()+"中,连接出错"); } return conn; } }
这个类该怎么写就看自己了,如果不想再建一个Connection,一定要把Connection对象传入。
3。编写pc.cfg.xml文件,在src里新建xml文件,命名为pc.cfg.xml
xml编写格式:
<?xml version="1.0" encoding="UTF-8"?> <users> <pc id="1">//分页id //name为pojo类名 //table为表名 //dbclassname为实现DB_Interface接口的类名 <class name="cn.netjava.model.User" table="user" dbclassname="cn.netjava.db.A"> //name为pojo类里的属性,column为对应数据库里的字段名 <property name="id" column="id"/> <property name="name" column="name"/> <property name="pwd" column="pwd"/> //每页显示数目 <per num="10"/> </class> </pc> </users>
4。控制显示,在servlet里写,如:
package a; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import cn.netjava.plugin.PageDao; public class Control extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String spage = request.getParameter("page");//用户请求显示哪一页 PageDao pd = PageDao.create(1);//传入分页id,我们的配置文件xml里只有一个id=1; HttpSession session = request.getSession(); int page = 0; if(spage!=null){ page = Integer.parseInt(spage); } try{ int pagenum = pd.getTotalPage();//得到总页数 session.setAttribute("pagenum",pagenum); session.setAttribute("pageindex",page); List<Object> listuser = pd.getType(page);//得到pojo实例列表 session.setAttribute("listuser",listuser); response.sendRedirect("cutpage.jsp"); } catch(Exception e){ e.printStackTrace(); } } }
5.jsp页面
共${pagenum }页 <table> <tr> <td>id</td> <td>name</td> <td>密码</td> </tr> <% List<Object> listuser = (List<Object>)session.getAttribute("listuser"); for(Object o : listuser) { User u = (User)o; %><tr> <td><%=u.getId() %></td> <td><%=u.getName() %></td> <td><%=u.getPwd() %></td> </tr> <% } %> </table> <input type = "button" value="上一页" onclick="before()"> <input type = "button" value="下一页" onclick="next()"> <script type="text/javascript"> function before() { window.location.href="control?page="+${pageindex-1}; } function next() { window.location.href="control?page="+${pageindex+1}; } </script>