前些天就写了个分页的,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="上一页" οnclick="before()"> <input type = "button" value="下一页" οnclick="next()"> <script type="text/javascript"> function before() { window.location.href="control?page="+${pageindex-1}; } function next() { window.location.href="control?page="+${pageindex+1}; } </script>