编程思想:
1.需获取数据库总数据数,规定每页显示数据数量,数据总页数;
2.设total为总数据数,totalpage为总的页数,pageSize为一页有多少数据
一、数据层获取总页数:
int pageNo;
if(request.getParameter("pageNo")!=null)
{
String pageNos = request.getParameter("pageNo");
pageNo = Integer.parseInt(pageNos);
}else{
pageNo = 1;
}
查询指定页的数据
1.pageNo为指定页面的页数,pageSize为一页显示的数据有多少,page表示为当前页
2.公式:上一页 M = (page - 1)*pageSize+ 1; 下一页 N= (page + 1)*pageSize +1。
3.sql查询语句:"select * from 表名 order by id limit ?,?"
4.PrepareStatment中存储查询页数的总数据量pageSel =((pageNo-1)*pageSize)和每页的数据量per,即表示从第(pageSel+1)数据查询开始到第(pageSel+per)数据,即可表示查询到指定页面的数据。
5.查询的结果给rs,遍历rs后给表的对象存储值,即可用User(只含sett 和 gett方法)来存储查询的数据。
6.用list把查询的数据(User)加入到其中,返回list。
代码如下:
StringBuffer sql = new StringBuffer("select * from user");
//user为表名
sql.append(" order by id limit ?,?");
int pageSize = 9; //默认一页的数据为9条
int page = (pageNo - 1) * 9; //计算总数据量
PreparedStatement pstmt = con.prepareStatement(sql.toString());
pstmt.setInt(1, page); pstmt.setInt(2, pageSize);
return pstmt.executeQuery();
所需类
1.所要创建的类有Connection连接数据库的类。
2.XXXDao类的方法getPage()和listXXX()分别用来计算总页数和查询指定页的数据。
3.存储数据的类,此类中用User来作为例子
二、控制层
1.创建servlet类控制处理请求信息;
2.在doPost()中获取指定页面的页数,设置参数pageNos为请求传入的指定页数,默认存在pageNos=1,当pagenos不为null时,pageNo = pageNos;(这里需要注意pageNos的属性,一般为String,需要强转为int)
3.调用ListXXX()方法,获取查询数据的list;
4.将总页数totalpage、查询的数据list表、指定页数pageNo。通过request.setAttribute()方法继续发出请求,request.getRequestDisPatcher("xxx.jsp").forward(request,response);
代码如下:
int pageNo;
if(request.getParameter("pageNo")!=null)
{
String pageNos = request.getParameter("pageNo");
pageNo = Integer.parseInt(pageNos);
}else{
pageNo = 1;
}
三、表示层该层即为请求的回应,显示数据。
这里使用EL和JSTL来输出结果,思路如下:
1.使用JSTL中的c:forEach方法来遍历处理上述request传入的list,具体做法如下:
....${x.id} --${x.id}表示直接输出x中的id;
c:forEach主要是为了将查询出来的list进行遍历,输出数据。
2.使用 标签来实现分页功能,主要是为了传递参数pageNo给数据层,数据层查询出的结果经过控制层遍历后即可在表示层中输出。
代码如下: