分页的基本原理就是通过一个当前页面变量pageNum来控制数据库要查询的数据,然后将查询到的数据进行显示即可。
pageNum维护在session中,每一次请求显示的页面需要基于当前的pageNum,显示上一页则pageNum = pageNum - 1,显示下一页则pageNum = pageNum + 1;pageNum需要一个默认初始值,这个默认初始值在访问首页的时候设置。
Servlet代码:
package servlet;
import impl.FruitDAOImpl;
import pojo.Fruit;
import util.JDBCUtils;
import util.StringUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.util.List;
@WebServlet("/index")
public class IndexServlet extends ViewBaseServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 默认初始化页数为第1页
int pageNum = 1;
HttpSession session = request.getSession();
String keyword = null;
//通过oper参数判断是不是在搜索框中进行关键词搜索显示
String operStr = request.getParameter("oper");
if(StringUtils.isNotEmpty(operStr) && "search".equals(operStr)){
keyword = request.getParameter("keyword");
//空置搜索框,则关键字置为"",与不输入关键字显示效果一致
if (StringUtils.isEmpty(keyword)){
keyword = "";
}
session.setAttribute("keyword", keyword);
} else {
String pageNumStr = request.getParameter("pageNum");
if (StringUtils.isNotEmpty(pageNumStr)){
pageNum = Integer.parseInt(pageNumStr);
}
//若关键字字段不为空,则说明当前页面基于关键字搜索而来,翻页的内容都基于搜索的结果进行显示
Object keywordObj = session.getAttribute("keyword");
if (keywordObj != null){
keyword = (String) keywordObj;
} else {
keyword = "";
}
}
//将pageNum存入session作用域,表示当前页面是第几页,其他request请求的页数基于当前页
session.setAttribute("pageNum", pageNum);
Connection connection = null;
try {
connection = JDBCUtils.getConnection();
FruitDAOImpl fruitDAO = new FruitDAOImpl();
List fruitList = fruitDAO.getPage(connection, pageNum, keyword);
Long count = fruitDAO.getCount(connection, keyword);
// 根据数据库记录条数计算最大页数,用于前端页面“尾页”按钮
session.setAttribute("maxPage", (count + 4) / 5);
session.setAttribute("fruitList", fruitList);
super.processTemplate("index", request, response);
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResource(connection, null);
}
}
}
HTML代码:
JavaScript代码:
function delFruit(id){
if(confirm("确定删除词条记录?")){
window.location.href = "del.do? + id;
}
}
function page(pageNum){
window.location.href = "index?pageNum=" + pageNum;
}



