分页的实现的思路
2.首先设计Page类
private int currentpage = 1; //当前页面
private int countpage; //总记录数
private int totalpage; //总页数
private int eachpage =3; //每页数, 每一页显示的数
private List<Xiwen> list = null;
无参构造
4个有参构造
public int getCurrentpage() {
return currentpage;
}
public void setCurrentpage(int currentpage) {
this.currentpage = currentpage;
}
public int getCountpage() {
return countpage;
}
public void setCountpage(int countpage) {
this.countpage = countpage;
//通过总记录数计算每页的个数
if(this.countpage>0) {
this.totalpage=(this.countpage % this.eachpage)==0?
this.countpage/this.eachpage:
(this.countpage/this.eachpage)+1;
}
}
public int getTotalpage() {
return totalpage;
}
public void setTotalpage(int totalpage) {
this.totalpage = totalpage;
}
public int getEachpage() {
return eachpage;
}
public void setEachpage(int eachpage) {
this.eachpage = eachpage;
}
public List<Xiwen> getList() {
return list;
}
public void setList(List<Xiwen> list) {
this.list = list;
}
2. UserDaoImpl()类 连接数据库,获取总记录数,获取集合每页的个数
private Connection conn = null;
private ResultSet rs = null;
private PreparedStatement pr =null;
Jdbc jj = new Jdbc();
//获得总记录数
public int countpage() {
conn = jj.getconnection();
String sql ="select count(1) from xiwen";
int count =0;
try {
pr = conn.prepareStatement(sql);
rs = pr.executeQuery();
rs.next();
count = rs.getInt(1);
} catch (SQLException e) {
e.printStackTrace();
}finally {
jj.closeAll(rs, pr, conn);
}
return count;
}
//获得每页显示的数
public List<Xiwen> eachsp(int currentpage, int eachpage) {
List<Xiwen> list = new ArrayList<Xiwen>();
Xiwen xiwen = null;
conn = jj.getconnection();
String sql ="SELECT * FROM xiwen LIMIT ?,?";
int index = (currentpage-1)*eachpage;
try {
pr = conn.prepareStatement(sql);
pr.setInt(1, index);
pr.setInt(2, eachpage);
rs = pr.executeQuery();
while(rs.next()) {
xiwen = new Xiwen();
xiwen.setId(rs.getInt("id"));
xiwen.setTitle(rs.getString("title"));
xiwen.setContent(rs.getString("content"));
xiwen.setAuthor(rs.getString("author"));
xiwen.setData(rs.getString("data"));
list.add(xiwen);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
jj.closeAll(rs, pr, conn);
}
return list;
}
3. UserserviceImpl()类 业务层调用
public Page pageAll(int currentpage, int eachpage) {
UserDao ud = new UserDaoImpl();
Page page = new Page();
page.setCurrentpage(currentpage);
//1.把从数据库获取的值放回Page对象, 进而就初始化countpage原来的值,从而变成现在传进行去的值
int as = ud.countpage();
page.setCountpage(as);
System.out.println("从数据层获取的总记录数"+as);
//2. 把获取的集合放到page对中
List<Xiwen> lis= ud.eachsp(currentpage, eachpage);
page.setList(lis);
return page;
}
4. Servlet接受jsp页面传来的值,调用业务层方法将值放入,返回到Page类。再将变量page传入到session对象,jsp页面通过EL表达式获取。
package com.qh.servlet;
import java.io.IOException;
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 com.qh.pojo.Page;
import com.qh.service.UserService;
import com.qh.serviceImpl.UserserviceImpl;
public class PageList extends HttpServlet{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UserService us = new UserserviceImpl();
String curreatpage = req.getParameter("countpage");
if(curreatpage == null) {
curreatpage = "1";
}
Integer curreatpagee = Integer.parseInt(curreatpage);
System.out.println("从前台获取的eountpage当前页的值:"+curreatpagee);
String eachpage = req.getParameter("eachpage");
if(eachpage == null) {
eachpage = "3";
}
Integer eachpagee = Integer.parseInt(eachpage);
System.out.println("从前台获取的eachpagee每页显示的值:"+eachpagee);
Page page =us.pageAll(curreatpagee, eachpagee);
HttpSession session = req.getSession();
if(page != null) {
session.setAttribute("pagelist", page);
resp.sendRedirect("page1.jsp");
}
}
}
5.jsp页面设置上一页下一页
<c:forEach items="${pagelist.list}" var="xw" >
<tr>
<td>${xw.biaoti }</td>
<td>${xw.zuoze }</td>
<td>${xw.data }</td>
<td><a href="Update.jsp?nameee=${xw.id}">修改</a> </td>
<td><a href="deletexw?naid=${xw.id }">删除</a></td>
</tr>
<br/>
</c:forEach>
</ul>
<p align="right">
<span>当前页为:[${pagelist.getCurrentpage()}/${pagelist.getTotalpage()}]</span>
<c:if test="${pagelist.getCurrentpage()>1}">
<a href="mess?countpage=${pagelist.getCurrentpage()-1}&eachpage=${pagelist.getEachpage()}">上一页</a>
</c:if>
<c:if test="${pagelist.getCurrentpage()<pagelist.getTotalpage()}">
<a href="mess?countpage=${pagelist.getCurrentpage()+1}&eachpage=${pagelist.getEachpage()}">下一页</a>
<a href="mess?countpage=${pagelist.getTotalpage()}&eachpage=${pagelist.getEachpage()}">末页</a>
</c:if>
</p>
6. web.xml文件配置 超链接a标签mess xml找到mess转到Servlet PageList控制层 。 页面之间跳转到Servlet都需要配置Servlet。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>Dome5</display-name>
<servlet>
<servlet-name>ccc</servlet-name>
<servlet-class>com.qh.servlet.PageList</servlet-class> //Servlet真实的类路径
</servlet>
<servlet-mapping>
<servlet-name>ccc</servlet-name> //name的值ccc需要跟上面的name值一样
<url-pattern>/mess</url-pattern> //客户端访问这个Servlet mess是由jsp页面超链接href中设置的mess
</servlet-mapping>
</web-app>
7.前端页面