最近卡了一个功能就是分页,查了很多资料,分页大概是两种类型:一种是把数据库的东西全部查出来然后放在session里,用list一页一页传到页面,这样的消耗比较大;另一种就是使用sql语句的limit来进行数据库分页查询。我使用的是后者

  大致逻辑: (1)需要currentPage,count属性。

        (2)需要注意current不能点击。

        (3)全使用a标签进行页面跳转。并附上请求页码。

        (4)初始化查询0页,并用filter装入list中,在页面显示的时候方便遍历。

        (5)过程:页面加载->filter查询初始数据装入request->页面遍历并计算出页码请求附带在url后->请求发出后filter使用getParameter获得页码对数据库进行查询,并装入list中->页面加载的时候遍历list出现新数据。

  页面如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page contentType="text/html; charset=utf-8" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>分页列表</title>
</head>
<body>
<center><%int currenPage=((Integer)request.getAttribute("currenPage")).intValue();int count=((Integer)request.getAttribute("count")).intValue();%><table border="1px"><tr><td>ID</td><td>用户名</td><td>性别</td><td>年龄</td></tr><c:forEach var="usr" items="${list}"><tr><td>${usr.id}</td><td>${usr.name}</td><td>${usr.sex}</td><td>${usr.age}</td></tr></c:forEach></table><%int prePage=currenPage-1;if(currenPage==1)prePage=currenPage;%><a href="Demo2.jsp?<%="curren="+prePage%>">上一页</a> <%int i=1;int end=currenPage+5;if(currenPage>5){i=currenPage-5;}if(end>count/10){end=count/10;System.out.println("end="+end);}for(;i<=end;i++){System.out.println("i="+i);if(i == (currenPage)){%>[<%=currenPage%>] <% }else{%><a href="Demo2.jsp?<%="curren="+i%>"><%=i%></a> <% }}%><%int nextPage=currenPage+1;if(nextPage>count/10)nextPage--;%><a href="Demo2.jsp?<%="curren="+nextPage%>">下一页</a> </center>
</body>
</html>

  Filter如下

package filter;import java.io.IOException;
import java.util.List;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;import dividedpage.SelectService;
import model.test_u;/*** Servlet Filter implementation class divideFilter*/
@WebFilter("/Demo2.jsp")
public class divideFilter implements Filter {private static final long serialVersionUID = 1L;private int start=0;private int size=10;private SelectService ss;private List<test_u> list;/*** Default constructor. */public divideFilter() {// TODO Auto-generated constructor stubss = new SelectService();}/*** @see Filter#destroy()*/public void destroy() {// TODO Auto-generated method stub
    }/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub// place your code hereString cu=request.getParameter("curren");if(cu!=null){start=Integer.parseInt(cu);}System.out.println(start);list = ss.selectLimit((start-1)*size, size);int count = ss.getConut(); request.setAttribute("list", list);request.setAttribute("count", count);request.setAttribute("currenPage", start);// pass the request along the filter chainSystem.out.println("执行过滤");chain.doFilter(request, response);}/*** @see Filter#init(FilterConfig)*/public void init(FilterConfig fConfig) throws ServletException {// TODO Auto-generated method stub
    }}

  JDBC如下

package DAO;
import java.sql.*;
public class Connect2DB {String  driver="com.mysql.jdbc.Driver";  Connection con;  String url="jdbc:mysql://localhost:3306/MyData";  String user="root";  String pwd="qwert123";public Connect2DB(){connection2MYSQL() ;}public void connection2MYSQL()  {  try {  Class.forName(driver);  con=DriverManager.getConnection(url,user,pwd);  if(!con.isClosed())  System.out.println("连接成功");  } catch (Exception e) {  e.printStackTrace();  }                  }public Connection getConn(){return con;}
}

package DAO;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import model.test_u;public class OperatorDB {private Connection con;public OperatorDB(){con=new Connect2DB().getConn();}public void addUser(test_u u){String sql="insert into test_u(id,name,sex,age) values(?,?,?,?)";PreparedStatement ps; try {ps=con.prepareStatement(sql);ps.setInt(1, u.getId());ps.setString(2, u.getName());ps.setString(3, u.getSex());ps.setString(4, u.getAge());ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}public void delUserById(int id){String sql="delete from test_u where stu_id = ?";PreparedStatement ps; try {ps=con.prepareStatement(sql);ps.setInt(1, id);ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}public List<test_u> selectLimit(int start,int size){String sql = "select * from test_u limit ?,?";List<test_u> result=new ArrayList<test_u>();PreparedStatement ps;try {ps = con.prepareStatement(sql);ps.setInt(1, start);ps.setInt(2, size);ResultSet rs = ps.executeQuery();while(rs.next()){int id=rs.getInt("id");String name=rs.getString("name");String sex=rs.getString("sex");String age=rs.getString("age");test_u t=new test_u(id,name,sex,age);result.add(t);}} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return result;}public int getCount(){String sql="SELECT COUNT(*) FROM test_u";int rowCount = 0;try {PreparedStatement ps;ps = con.prepareStatement(sql);ResultSet rs = ps.executeQuery(sql);rs.next(); rowCount = rs.getInt(1);} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}      return rowCount;}public void close(){try {if(!con.isClosed())con.close();} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}
}

  Service如下

package dividedpage;import java.util.List;import DAO.OperatorDB;
import model.test_u;public class SelectService {public List<test_u> selectLimit(int start,int size){OperatorDB odb=new OperatorDB();List<test_u> list=odb.selectLimit(start, size);odb.close();return list;}public int getConut(){OperatorDB odb=new OperatorDB();int count = odb.getCount();odb.close();return count;}
}

  Bean如下

package model;public class test_u {private int id;private String name;private String sex;private String age;public test_u(){}public test_u(int id, String name, String sex, String age) {super();this.id = id;this.name = name;this.sex = sex;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}

  数据表如下,插入100条记录

  感觉代码很冗余,页面不够干净,不过也训练了分页的思想。

  下列标签栏全是a标签,上一页current-1,下一页current+1;需要注意页面边界(最大,最小页)。查询limit大概是((current-1)*size,size)这样的公式。

  目录树如下:

  JSTL需要下载个jar包,很容易找到,添加他们进path就好。

转载于:https://www.cnblogs.com/chentingk/p/5825957.html

分页探究--Filter+JSTL相关推荐

  1. SP+Servlet+JavaBean+Filter+JSTL小例子

    web应用:MVC用户认证部分    下载源代码 [ 作者: island ][ 大小:808k ][ 发布日期:2007-09-08 ][ 浏览:1 ]  (一)    学习java web应用已经 ...

  2. 大前端汇总,EMMET、HTML、XML、CSS、JS、dom4j、JDBC、DButil、 servlet、jsp、EL、JSTl、同步分页、filter、AJAX

    第一章 EMMET语法 1. syntax 快捷键介绍 Child : > 相当于创建子标签 nav>ul>li <nav><ul><li>< ...

  3. 数据库分页和使用jstl标签替换分页的jsp代码

    参考链接: http://www.mossle.com/docs/jsp/html/jsp-ch-15.html 转载于:https://www.cnblogs.com/wenjieyatou/p/6 ...

  4. Java学习成长路径

    JavaSE部分 1 JavaSE体系介绍 JDK安装与环境配置 2 变量 注释,Java数据类型,进位制转换,运算符 3 运算符 分支结构 4 分支结构循环结构 5 循环结构 一维数组 6 二维数组 ...

  5. 回首2015年小文codeRoad

    1.Java基础知识(排序.算法.设计模式.I/O.多线程.Swing等.面向对象编程思想) 2.前端框架:jqueryUI.EasyUI.BootStrap.Anglurjs.EXT.Html5.C ...

  6. java软件工程师简历

         java软件工程师简历一    姓名:陶** 性别:男 电话:136-3231**** 学历:本科 邮箱:tll-wuhu@163.com 地址:广州市天河区 求职意向 java软件工程师 ...

  7. eclipse 新建 maven 项目 添加 spring hibernate 的配置文件 详情

    主要配置文件 pom.xml 项目的maven 配置文件 管理项目所需 jar 依赖支持 web.xml 项目的总 配置文件  :添加 spring和hibernate 支持 applicationC ...

  8. BootstrapTable

    <!---------------------------------------- BEGIN动态表相关 ----------------------------------------> ...

  9. 用redis+jwt保存在线用户和获得在线用户列表、踢出用户示例

    文章目录 redis工具类 用户实体类 token配置 service层保存和查询在线用户 工具类 获得用户浏览器等其他信息 controller层 redis工具类 import org.sprin ...

最新文章

  1. 线性布局与相对布局的嵌套
  2. mysql注入绕过单引号_SQL注入-绕过过滤规则
  3. mysql数据库new和old_数据库触发器中new表和old表是什么意思?
  4. 在一个list中增加一个节点
  5. python -屏保
  6. [leetcode] 65. 有效数字
  7. 誰毀了全新Vista電腦﹖
  8. Python编程之二维码生成
  9. UE4添加人物动画之状态机
  10. 解决IE浏览器无法使用“IP:端口“直接访问的问题
  11. 码农与真正程序员的区别
  12. 总结一下__declspec(dllimport)的作用
  13. Jetson nano 开机自动连接 Wifi
  14. 如何设置计算机桌面待办事项,Windows电脑桌面云便签怎么设置每天提醒待办事项?...
  15. 知识星球,贡献C版本,OpenSSL,GMSSL,JS版本相关国密
  16. 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)
  17. WinHex(16进制编辑器)
  18. fcitx重启 linux_【Linux基础】Fcitx中文输入法安装
  19. 用inno setup做的安装程序,安装过程中被360报如下风险
  20. PHP知识一:系统知识总结

热门文章

  1. 在local模式下的spark程序打包到集群上运行
  2. CocosPods 引入项目,哪些文件需要上传到服务器呢?
  3. 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop
  4. request.RequestContextListener
  5. 导出Excel神器最终版
  6. Debian下IPv6设定主地址 Set primary IPv6 address under Debian Linux
  7. Silverlight与WCF之间的通信(5)silverlight应用和wcf服务的发布方法
  8. JavaScript 数组处理方法总结
  9. BZOJ 1609 [Usaco2008 Feb]Eating Together麻烦的聚餐:LIS LDS (nlogn)
  10. listview与gridview点击时的背景色取消