问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java web分页是怎么回事

发布网友 发布时间:2022-04-10 12:38

我来回答

2个回答

懂视网 时间:2022-04-10 16:59

1.封装PageBean

import java.util.List;

/**
 * 分页的JavaBean
 * @author Administrator
 */
public class PageBean<T> {

 // 当前页
 private int pageCode;

 // 总页数
 // private int totalPage;

 // 总记录数
 private int totalCount;
 // 每页显示的记录条数
 private int pageSize;
 // 每页显示的数据
 private List<T> beanList;

 public int getPageCode() {
 return pageCode;
 }
 public void setPageCode(int pageCode) {
 this.pageCode = pageCode;
 }

 /**
 * 调用getTotalPage() 获取到总页数
 * JavaBean的属性规定:totalPage是JavaBean是属性 ${pageBean.totalPage}
 * @return
 */
 public int getTotalPage() {
 // 计算
 int totalPage = totalCount / pageSize;
 // 说明整除
 if(totalCount % pageSize == 0){
  return totalPage;
 }else{
  return totalPage + 1;
 }
 }

 /*public void setTotalPage(int totalPage) {
 this.totalPage = totalPage;
 }*/

 public int getTotalCount() {
 return totalCount;
 }
 public void setTotalCount(int totalCount) {
 this.totalCount = totalCount;
 }
 public int getPageSize() {
 return pageSize;
 }
 public void setPageSize(int pageSize) {
 this.pageSize = pageSize;
 }
 public List<T> getBeanList() {
 return beanList;
 }
 public void setBeanList(List<T> beanList) {
 this.beanList = beanList;
 }
}

2.Servlet

/**
 * 获取当前页
 *如果用户没有传,默认是第一页,如果传了,就是几
 * @param request
 * @return
 */
 public int getPageCode(HttpServletRequest request){
 String pc = request.getParameter("pc");
 // 判断
 if(pc == null || pc.trim().isEmpty()){
  return 1;
 }
 return Integer.parseInt(pc);
 }
/**
 * 分页查询
 */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 /**
  * 处理当前页
  * 处理每页显示的记录条数
  */
 // 当前页
 int pageCode = getPageCode(request);
 // 处理每页显示的记录条数
 int pageSize = 4;
 try {
  // 调用业务层,分页查询
  PageBean<Product> page = new ProductService().findByPage(pageCode,pageSize);
  // 存入
  request.setAttribute("page", page);
  // 转发
  request.getRequestDispatcher("/jsp/pages.jsp").forward(request, response);

 } catch (SQLException e) {
  e.printStackTrace();
 }
 }

3.service

/**
 * 分页查询
 * @param pageCode
 * @param pageSize
 * @return
 * @throws SQLException 
 */
 public PageBean<Product> findByPage(int pageCode, int pageSize) throws SQLException {
 return new ProductDao().findByPage(pageCode,pageSize);
 }

4.dao


/**
 * 分页查询
 * 
 * @param pageCode
 * @param pageSize
 * @return
 * @throws SQLException 
 */
 public PageBean<Product> findByPage(int pageCode, int pageSize) throws SQLException {
 PageBean<Product> page = new PageBean<>();
 // 属性是空的
 page.setPageCode(pageCode);
 page.setPageSize(pageSize);

 QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
 // ScalarHandler 处理聚合函数
 long count = (long) qr.query("select count(*) from product", new ScalarHandler());
 // 设置总记录条数
 page.setTotalCount((int) count);

 // limit a,b a = (当前页-1) * b
 List<Product> beanList = qr.query("select * from product limit ?,?", new BeanListHandler<Product>(Product.class),
  (pageCode - 1) * pageSize, pageSize);

 // 每页显示的数据
 page.setBeanList(beanList);

 return page;
 }

5.utils

public class JdbcUtils {

 // 成员变量,创建了C3P0的连接池(连接池中已经存在连接了...)
 private static final ComboPooledDataSource DATASOURCE = new ComboPooledDataSource();

 /**
 * 返回的是C3P0的连接池
 * @return
 */
 public static DataSource getDataSource(){
 return DATASOURCE;
 }

 /**
 * 获取连接,返回连接
 * @return
 */
 public static Connection getConnection(){
 Connection conn = null;
 try {
  // 从连接池中来获取连接,conn 是增强过的连接
  conn = DATASOURCE.getConnection();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 return conn;
 }

 /**
 * 释放资源
 * @param stmt
 * @param conn
 */
 public static void release(Statement stmt,Connection conn){
 if(stmt != null){
  try {
  stmt.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 if(conn != null){
  try {
  // 已经变成了归还了...
  conn.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 }

 /**
 * 释放资源
 * @param stmt
 * @param conn
 */
 public static void release(ResultSet rs,Statement stmt,Connection conn){
 if(rs != null){
  try {
  rs.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 if(stmt != null){
  try {
  stmt.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 if(conn != null){
  try {
  // 把close()给修改了,原来是销毁连接,现在让方法变成归还连接。
  conn.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 }

}

6.jsp页面

<table border="1" width="100%">
 <tr>
 <th>序号</th>
 <th>图片</th>
 <th>名称</th>
 <th>市场价格</th>
 <th>商城价格</th>
 <th>商品日期</th>
 </tr>

 <c:forEach var="p" items="${ page.beanList }" varStatus="vs">
 <tr align="center">
  <td>${ vs.count }</td>
  <td>
  <img src="${ pageContext.request.contextPath }/${p.pimage}" width="100px" height="100px">
  </td>
  <td>${ p.pname }</td>
  <td>${ p.market_price }</td>
  <td>${ p.shop_price }</td>
  <td>${ p.pdate }</td>
 </tr>
 </c:forEach>

 分页条 
 <tr>
 <th colspan="6">
  第${ page.pageCode }页/共${ page.totalPage }页
  <a href="${ pageContext.request.contextPath }/findByPage?pc=1">首页</a>
  <c:if test="${ page.pageCode > 1 }">
  <a href="${ pageContext.request.contextPath }/findByPage?pc=${page.pageCode - 1}">上一页</a>
  </c:if>

  begin和end值是变化的,设置begin和end的值
  逻辑:
   * 如果总页数<=10页,让begin=1 end=总页数
   * 如果总页数 > 10页,begin=当前页-5 ,end = 当前页 + 4
   * 头溢出:如果begin<1,出现了头溢出了,让begin=1 end=10
   * 尾溢出:如果end > 总页数,让begin=总页数-9 end=总页数

  <c:choose>
  <c:when test="${ page.totalPage <= 10 }">
   <c:set var="begin" value="1"/>
   <c:set var="end" value="${ page.totalPage }"/>
  </c:when>
  <c:otherwise>
   <c:set var="begin" value="${ page.pageCode - 5 }"/>
   <c:set var="end" value="${ page.pageCode + 4 }"/>
  头溢出的问题 
   <c:if test="${ begin < 1 }">
   <c:set var="begin" value="1"/>
   <c:set var="end" value="10"/>
   </c:if>

   <c:if test="${ end > page.totalPage }">
   <c:set var="begin" value="${ page.totalPage - 9 }"/>
   <c:set var="end" value="${ page.totalPage }"/>
   </c:if>
  </c:otherwise>
  </c:choose>

  <c:forEach var="i" begin="${ begin }" end="${ end }">
  <a href="${ pageContext.request.contextPath }/findByPage?pc=${i}">[${ i }]</a>
  </c:forEach>

  <c:if test="${ page.pageCode < page.totalPage }">
  <a href="${ pageContext.request.contextPath }/findByPage?pc=${page.pageCode + 1}">下一页</a>
  </c:if>
  <a href="${ pageContext.request.contextPath }/findByPage?pc=${page.totalPage}">尾页</a>
 </th>
 </tr>
</table>

javaweb编写分页mysql

标签:java分页

热心网友 时间:2022-04-10 14:07

得到的数据量过多,需要分页展示.
MySQL可以利用Limit关键字分页,也可以创建Bean完成分页。
非常简单的东西。而且企业是不需要你来做分页的 早就有人写好了!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2023年辽宁高考399分能报哪些公办大学 额头有杂音是什么意思啊 ...反应也不是一般的迟钝,胆子还越来越小,叫我的声音稍大就会被吓... 2022天津理工大学各省录取分数线 ...一个是个胖子 一个是个小矮子 一个是个黄头发的男人 一个是个穿... 我是河南理科女今年考了545 报考天津理工大学一本希望大不?二本专业... ...一个是个胖子 一个是个小矮子 一个是个黄头发的男人 还有一个是个... 有个手机游戏 图标就是一个黄头发的人背着弓箭 游戏内容是两个人_百度... 我是男生从小就怕那些动物,比如青蛙,觉得一想青蛙的皮肤就全身鸡皮疙瘩... ...不是昆虫总动员,其中片段是,一群昆虫被青蛙吃进肚子里,它们在里面... 优酷网每天的今日头条的视频是根据什么产生的 怎样可以自己就测量血型 怎么样去测量一个人的血型,简单的方法? 医学人类血型测定 血型测定。。需专业人士回答 测量血型时为何红细胞生理盐水中的红细胞浓度要够高,静止时间够长? GDP的增长对一个国家有哪些好处。为什么中国要一直“保八”在世界格局中GDP代表着什么? 中国GDP增速放弃6.5%底线 这意味着什么?有什么意义 国家拼命保gdp增速有啥意义 国民gdp增长有什么意义 我国GDP总量首次突破100万亿元意味着什么? 中国的GDP增长有何实际意义 航天信息公布发行可转债,初始转股价格86.61元/股是什么意思 苹果5微信中的聊天背景图片怎样删掉? 航天信息的历史最高股价是多少 苹果5微信中的聊天背景图片怎样删掉 怎么在CAD里面做效果图 自家的蜂蜜怎么推广美团 芙蓉雨听后感怎么写? 一篇附带感悟的文章 华生f30电热水壶消毒功能怎样用 在游戏里面登录qq,密码错误的话会在qq通知吗 华生的水杯是品牌吗 通过QQ账号申请找回密码那个我要找的QQ号登陆时会不会有提示啊? 华生电热水壶ws1568b? 华生自动烧水壶数码乱显 申诉找回QQ密码被申诉的账号会有提示吗? 品高烧水壶+和华生哪个好 为什么QQ账号密码找回只有账号申诉没有问题提示 上海华生电水壶不锈钢是304吗 登炫舞密码几次试了很多次,手机扣扣那边会有提示吗 华生自动上水电热水壶抽水时间怎样样设定? 我在玩qq游戏时,如果有人在其他地方登陆了我的qq游戏账号,我的电脑会有提示吗? qq安全中心手机版绑定qq后,没有任何信息直接申诉修改密码,多潮时间才能通过?手机会不会收到提示? 我朋友用我QQ号在玩游戏,我要是现在改密码他游戏会掉吗? 为什么QQ绑定手机之后修改密码没有短信提示? 不是说超级QQ,修改密码会有提示吗!为什么我修改密码了也没有提示呢? 你好.我想请问一下.我的游戏qq被盗了,我改了密码他还能顶我号? QQ密码忘记了 但Q游戏可以自动登录上去 密码还能找回吗? 购买他人QQ游戏账号后 .修改资料.他是否还能找回