jsp使用 分页专用工具

分页器,根据过来的参数计算当着页应当从哪一条记录开始显示,并且显示到哪。

PageUtils [pageSize=5, currIndex=1, totalCount=166, totalPage=34, startPosition=0]
PageUtils [pageSize=5, currIndex=5, totalCount=166, totalPage=34, startPosition=20]
PageUtils [pageSize=5, currIndex=34, totalCount=166, totalPage=34, startPosition=165]
PageUtils [pageSize=5, currIndex=1, totalCount=166, totalPage=34, startPosition=0]
PageUtils [pageSize=5, currIndex=9, totalCount=166, totalPage=34, startPosition=40]
PageUtils [pageSize=10, currIndex=9, totalCount=166, totalPage=17, startPosition=80]

package src;

public class TestPageUtils {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//假设一页显示5条,现在有166条
		int pageSize =  5;
		int totalCount = 166;
		PageUtils pageUtils= new PageUtils(pageSize, totalCount);
		
		System.out.println(pageUtils);
		
		pageUtils.setCurrIndex(5);
		System.out.println(pageUtils);
		
		pageUtils.setCurrIndex(35);
		System.out.println(pageUtils);
		
		pageUtils.setCurrIndex(-1);
		System.out.println(pageUtils);
		
		
		pageUtils.setCurrIndex(9);		
		System.out.println(pageUtils);
		
		pageUtils.setCurrIndex(9);
		pageUtils.setPageSize(10);
		System.out.println(pageUtils);
		

	}

}
package src;
/**
 * 
 * @lwd
  *  分页工具类
 *
 */
public class PageUtils {
	//相关成员变量
	
	// 页大小,每页显示多少条记录
	private int pageSize;
	
	//当前页
	private int currIndex;
	
	//总记录数
	private int totalCount;
	
	//总页数
	private int totalPage;
	
	
	//开始的记录开始的位置 
	private int startPosition;


	//一页显示多少条和一共有多少条记录
	public PageUtils(int pageSize, int totalCount) {		
		this.pageSize = pageSize;
		this.totalCount = totalCount;
		currIndex = 1;//默认显示第一页
		startPosition = 0;//默认从第一条记录开始显示
		
		int pages=totalCount/pageSize;
		totalPage=totalCount%pageSize==0?pages:pages+1;
	}


	public int getPageSize() {
		return pageSize;
	}


	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
		int pages=totalCount/pageSize;
		totalPage=totalCount%this.pageSize==0?pages:pages+1;	
		startPosition=(currIndex-1)*pageSize;
	}


	public int getCurrIndex() {
		return currIndex;
	}


	public void setCurrIndex(int currIndex) {
		if(currIndex<1)
			currIndex=1;
		else if(currIndex>totalPage)
			currIndex=totalPage;		
		this.currIndex = currIndex;
		
		startPosition=(currIndex-1)*pageSize;
		
	}


	public int getTotalPage() {
		return totalPage;
	}


	public int getStartPosition() {
		return startPosition;
	}


	@Override
	public String toString() {
		return "PageUtils [pageSize=" + pageSize + ", currIndex=" + currIndex + ", totalCount=" + totalCount
				+ ", totalPage=" + totalPage + ", startPosition=" + startPosition + "]";
	}
	
	
	
	

	
	 
	
	

}

JSP中调用。 

<%@page import="src.PageUtils"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> 
    
<%@ page import="
java.util.Date,
java.io.IOException,
java.io.PrintWriter,
java.sql.*
" %>

<%@ page import="src.User,src.Message"
 %>
 <%
 Date date= new Date();
 SimpleDateFormat df= new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 
 %>   
 
 <%!
 	//留言表共有多少条记录
 	int getTotalCount() throws Exception{
	 
	 Class.forName("com.mysql.cj.jdbc.Driver");	 
	 Connection con = DriverManager.getConnection("jdbc:mysql://mysql.sqlpub.com:3306/huangjin","laocooon","fc12f7a5215e8e0a");	 
	 String sql = "SELECT COUNT(*) FROM message";	 
	 PreparedStatement pstmt = con.prepareStatement(sql); 
	 //5.执行sql语句,并且接收结果 
	 ResultSet rs = pstmt.executeQuery();
	 rs.next();
	 int res = rs.getInt(1);
	 
	 
	 rs.close();
	 pstmt.close();
	 con.close(); 
	 
	 return res;
 }
 
 %>
 
 <%
 
 //获取page
 String pages=request.getParameter("pages");
 if(pages==null)
	 pages = "1"; 
 
 int currIndex = Integer.parseInt(pages); 
 
  
 
 PageUtils pageUtils = new PageUtils(10,getTotalCount());//需要提供总记录数
 pageUtils.setCurrIndex(currIndex);
 out.println(pageUtils);
 
 %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="./css/1102.css" rel="stylesheet" type="text/css" />
<title>访客留言板</title>

</head>
<body>
<p>访客留言板</p>
<p><%="使用的浏览器是:<span style='font-size:16px;'>"+request.getHeader("User-Agent")+"</span>" %></p>
<p><%="使用的ip是:"+request.getRemoteAddr() %></p>
<p><%="现在时间是:"+ df.format(date) %></p>
<p><a href=./index.jsp?#form>我要留言</a></p>
<p> 
 <% 
 //读取message表中的所有记录
 //1.导入jar包
 //2.注册驱动
 //Class.forName("com.mysql.jdbc.Driver");
 Class.forName("com.mysql.cj.jdbc.Driver");

 //3.获取连接
 Connection con = DriverManager.getConnection("jdbc:mysql://mysql.sqlpub.com:3306/huangjin","laocooon","fc12f7a5215e8e0a");

 //4.获取执行者对象
 String sql = "SELECT * FROM message ORDER BY id DESC LIMIT ?,?";  
 PreparedStatement pstmt = con.prepareStatement(sql);
 pstmt.setInt(1,pageUtils.getStartPosition());
 pstmt.setInt(2,pageUtils.getPageSize());
 //5.执行sql语句,并且接收结果 
 ResultSet rs = pstmt.executeQuery();
 int i=pageUtils.getStartPosition()+1;
 while(rs.next()){
	String author=rs.getString(3);
	String id=""+rs.getInt(1);
	String message=rs.getString(2);
	String posttime=rs.getString(4);
	out.println("<div class='div1'>");
	out.println("<p id='p1'>作者:" + author + "</p>");
	out.println("<p id='p2'>#" + i++ + "</p>");
	out.println("<p id='p3'>" + message + "</p>");
	out.println("<p id='p4'>发布日期:" + posttime + "</p>");
	out.println("<p id='p5'><a href='./index.jsp?id=" + id + "#form'>回复</a></p>    ");
	out.println("</div>");	
	out.println("<br><br> ");	
 } 
 
 rs.close();
 pstmt.close();
 con.close(); 
 %>
<br>
<div style="text-align: right;">
[一页<%=pageUtils.getPageSize() %>个]&nbsp;&nbsp;&nbsp;&nbsp;
<a href="index.jsp?pages=1">第一页</a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="index.jsp?pages=<%=pageUtils.getCurrIndex()-1%>">上一页</a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="index.jsp?pages=<%=pageUtils.getCurrIndex()+1%>">下一页</a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="index.jsp?pages=<%=pageUtils.getTotalPage()%>">最后页</a>&nbsp;&nbsp;&nbsp;&nbsp;
</div> 
<br>
<form action='doadd.jsp' method='get'>
<a id="form"> 用&nbsp;&nbsp;户&nbsp;&nbsp;名:</a>

<input type=text required name=you placeholder=请输入你的姓名 /><br><br>
 <%
 String id=request.getParameter("id");
 if(id==null){	
	out.println("留言信息:<textarea rows=4 cols=60 required name=text placeholder=留言处></textarea><br>");	
 }
 else{
	out.println("留言信息:<textarea rows=4 cols=60 required name=text placeholder=留言处>回复#"+ id +":</textarea><br>");
	 
 }
 %>
 <input type='submit'>&nbsp;&nbsp;&nbsp;&nbsp;<input type='reset'>
 

</form> 
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/231869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习基础介绍

定义&#xff1a; 深度学习是机器学习领域中一个新的研究方向&#xff0c;被引入机器学习使其更接近于最初的目标&#xff0c;即人工智能AI&#xff0c; Artifical Intelligence。 深度学习是学习样本数据的内在规律和表示层次&#xff0c;这些学习过程中获得的信息对诸如文字…

Leetcode 39 组合总和

题意理解&#xff1a; 一个 无重复元素 的整数数组 candidates 和一个目标整数 target 从candidates 取数字&#xff0c;使其和 target &#xff0c;有多少种组合&#xff08;candidates 中的 同一个 数字可以 无限制重复被选取&#xff09; 这道题和之前一道组合的区别&am…

Databend 如何利用 GPT-4 进行质量保证

背景 在数据库行业&#xff0c;质量是核心要素。 Databend 的应用场景广泛&#xff0c;特别是在金融相关领域&#xff0c;其查询结果的准确性对用户至关重要。因此&#xff0c;在快速迭代的过程中&#xff0c;如何确保产品质量&#xff0c;成为我们面临的重大挑战。 随着 Da…

IDEA项目发布中,Web Application:Exploded和Web Application:Archive的详细解释

简单总结下&#xff1a; 1、web application:exploded&#xff1a;这个是以文件夹形式发布项目&#xff0c;发布项目时就会自动生成文件夹在指定的output directory&#xff1b;&#xff08;开发&#xff09; 2、web application:archive&#xff1a;就是war包形式&#xff0…

芯片量产导入知识

什么是芯片量产 从芯片功能设计到生产制造、测试等环节&#xff0c;每一个环节都至关重要。 对于保障大规模发货后芯片指标表现的一致性&#xff0c;以及产品应用生命周期内的稳定性和可靠性&#xff0c;需要考虑多种因素。以下是一些相关的观点&#xff1a; 可量产性设计&am…

Java网络通信总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission …

基于 Linux 内核驱动模块的简介

基于 Linux 内核驱动模块的简介 最简内核驱动原理 内核编程的最简单表现就是内核模块&#xff0c; 它可以作为一段可动态加载的成熟的内核级的代码使用。使用时一般不限制模块个数和类型&#xff0c;即插即用&#xff0c; 高效快捷、 性能稳定。缺点为性能和内存利用缺失&#…

Carla自动驾驶仿真六:pygame多个车辆摄像头画面拼接

此文章主要介绍carla前后左右摄像头画面拼接到pygame上 文章目录 前言一、要点分析二、完整代码三、拼接效果四、总结 前言 1、使用carla做仿真测试或者开发时&#xff0c;如果能够将车辆周边的画面拼接并渲染&#xff0c;可以直观地查看周围地环境&#xff0c;便于调试。本文…

如何成为前1%的程序员

如果你想成为前1%的程序员&#xff0c;你必须遵循1%的程序员做什么&#xff0c;了解其他99%的人不做什么。在现代&#xff0c;我们有各种学习平台&#xff0c;里面充满了与编程相关的视频、图文以及其他资料。 举例来说&#xff0c;我作为编程的初学者&#xff0c;去寻找路线图…

【Vue第3章】使用Vue脚手架_Vue2

目录 3.1 初始化脚手架 3.1.1 说明 3.1.2 具体步骤 3.1.3 模板项目的结构 3.1.4 笔记与代码 3.1.4.1 笔记 3.1.4.2 01_src_分析脚手架 3.2 ref与props 3.2.1 ref 3.2.2 props 3.2.3 笔记与代码 3.2.3.1 笔记 3.2.3.2 02_src_ref属性 3.2.3.3 03_src_props配置 3…

CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?

CTF&#xff08;Capture The Flag&#xff09;是一种网络安全竞赛&#xff0c;它模拟了各种信息安全场景&#xff0c;旨在提升参与者的网络安全技能。CTF 赛事通常包含多种类型的挑战&#xff0c;如密码学、逆向工程、网络攻防、Web 安全、二进制利用等。 发展史 CTF 的概念…

《巫师3》缺失vcomp110.dll如何解决,如何快速修复vcomp110.dll丢失问题

在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcomp110.dll丢失”。这个错误提示通常意味着vcomp110.dll文件在系统中无法找到或加载。那么&#xff0c;vcomp110.dll丢失的原因是什么&#xff1f;它对电脑有什么影响&#xff1f;本…

ky10 server x86 设置网卡开机自启

输入命令查看网卡名称 ip a 输入命令编辑网卡信息 vi /etc/sysconfig/network-scripts/*33改成yes 按ESC键&#xff0c;输入:wq&#xff0c;保存

人工智能大型语言模型的突破

近年来&#xff0c;随着深度学习和人工智能技术的飞速发展&#xff0c;大型语言模型在自然语言处理领域取得了巨大的突破&#xff0c;引发了广泛的关注和讨论。本文将介绍大型语言模型的发展历程、技术原理、应用场景以及未来发展趋势。 一、发展历程大型语言模型的发展可以追…

Android app性能优化指南

Android应用性能优化指南 提高应用程序的性能以实现更流畅的用户体验和更高的可见度。 性能在任何应用程序的成功中发挥着重要的作用。为用户提供流畅无缝的体验应该是开发人员的重点。 应用程序大小 在用户开始使用我们的应用程序之前&#xff0c;他们需要下载应用程序并将…

oracle实验2023-12-8--触发器

第十四周实验 【例】功能要求&#xff1a;增加一新表XS_1&#xff0c;表结构和表XS相同&#xff0c;用来存放从XS表中删除的记录。 分析: 1、创建表 xs_1 SQL> create table xs_1 as select * from xs; Table created SQL> truncate table xs_1; Table truncated题目&a…

高项备考葵花宝典-项目进度管理输入、输出、工具和技术(中,很详细考试必过)

项目进度管理的目标是使项目按时完成。有效的进度管理是项目管理成功的关键之一&#xff0c;进度问题在项目生命周期内引起的冲突最多。 小型项目中&#xff0c;定义活动、排列活动顺序、估算活动持续时间及制定进度模型形成进度计划等过程的联系非常密切&#xff0c;可以视为一…

GO面试题系列

1.GO有哪些关键字 2.GO有哪些数据类型 3.Go方法与函数的区别 在Go语言中&#xff0c;方法和函数是两个不同的概念&#xff0c;尽管它们在某些方面有相似之处。下面是它们的主要区别&#xff1a; 定义位置&#xff1a; 函数&#xff1a; 函数是独立声明的&#xff0c;它们不…

在Mac上安装Windows应用程序的简便方法:CrossOver for Mac

对于许多Mac用户来说&#xff0c;有时候他们可能需要使用一些只有在Windows上才能找到的应用程序。以前&#xff0c;解决这个问题的方法是通过安装Windows虚拟机或使用双系统来在Mac上运行Windows应用程序。但这些方法需要额外的硬件资源和时间来配置&#xff0c;并且可能会导致…

leetcode 255.用队列实现栈

255.用队列实现栈 不出意外大概率这几天都会更新 leetcode&#xff0c;如果没有做新的题&#xff0c;大概就会把 leetcode 之前写过的题整理&#xff08;单链表的题目居多一点&#xff09;出来写成博客 今天讲的题蛮容易出错的&#xff08;注意传参啊&#xff0c;最好把队列的…