音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

JSP实现分页效果
日期:2021-09-07 15:57:41   来源:脚本之家

本文实例为大家分享了JSP实现分页的具体代码,供大家参考,具体内容如下

咱们在浏览网页的时候,当一个页面的数据不足以展示完全所有的内容,一般都涉及到分页,下一页的功能该怎么实现呢?首先我们来分析一下:

那么直接上代码:

这里需要备注一下,本次的代码是在对三层优化之后进行操作的,所以我先把数据访问层的重构代码贴出来:

package org.ThreeLayer.DButil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.ThreeLayer.Entity.Student;

public class DButil 
{
 public static final String driver = "com.mysql.cj.jdbc.Driver";
 public static final String url = "jdbc:mysql://localhost:3306/zxy?&useSSL=false&serverTimezone=UTF-8&useSSL=false&serverTimezone = GMT";
 public static final String username = "root";
 public static final String password = "zxy170518.";
 public static Connection connection = null;//链接数据库
 public static PreparedStatement pstmt=null;//执行sql语句 
 public static ResultSet rs=null;
 
 
 public static Connection getConnection() throws SQLException, ClassNotFoundException
 {
 Class.forName(driver);
 return DriverManager.getConnection(url,username,password);
 }
 
 public static int getTotalCount(String sql)
 {
 int count=0;
 try
 {
 pstmt=createPrepareStatement(sql, null);
 rs=pstmt.executeQuery();
 if(rs.next())
 {
 count=rs.getInt(1);
 }
 }catch(SQLException e)
 {
 e.printStackTrace();
 }catch(ClassNotFoundException e)
 {
 e.printStackTrace();
 }catch(Exception e)
 {
 e.printStackTrace();
 }finally
 {
 closeAll(connection, pstmt, rs);
 }
 return count;
 }
 
 public static PreparedStatement createPrepareStatement(String sql,Object[] obj) throws ClassNotFoundException, SQLException
 {
 pstmt=getConnection().prepareStatement(sql);
 if(obj!=null)
 {
 for(int i=0;i<obj.length;i++)
 {
 pstmt.setObject(i+1, obj[i]);//进行更新动作
 }
 }
 return pstmt;
 }
 
 public static boolean UpdateSQL(String sql,Object[] obj)
 {
 try 
 {
 pstmt=createPrepareStatement(sql, obj);
 int count=pstmt.executeUpdate();
 if(count>0)
 {
 return true;
 }
 else
 {
 return false;
 }
 } catch (ClassNotFoundException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 return false;
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 return false;
 }finally
 {
 closeAll(connection,pstmt,rs);
 }
 }
 
 
 public static ResultSet FindSQL(String sql,Object[] obj)
 {
 try
 {
 pstmt=createPrepareStatement(sql, obj);
 rs=pstmt.executeQuery();
 return rs;
 }catch(ClassNotFoundException e)
 {
 e.printStackTrace();
 return rs;
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 return rs;
 }catch(Exception e)
 {
 e.printStackTrace();
 return rs;
 }
 }
 
 public static void closeAll(Connection connection,PreparedStatement pstmt,ResultSet rs)
 {
 try
 {
 if(connection!=null);
 connection.close();
 if(pstmt!=null);
 pstmt.close();
 if(rs!=null);
 rs.close();
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }catch(Exception e)
 {
 e.printStackTrace();
 }
 }
}

基本上就是普通的数据库操作功能,很好懂,就不多解释了;
对于数据访问层的Dao:

public int getTotalCount()//查询数据总数
 {
 String sql="select count(1) from student";
 return DButil.getTotalCount(sql);
 }
 
 public List<Student> findStudentByPage(int currentPage,int pageSize)//currentPage:当前页数;pageSize页面所能容纳的最大数据量
 {
 String sql="select * from student limit ? , ?";
 Object[] obj= {currentPage*pageSize,pageSize};
 List<Student> students=new ArrayList<>();
 ResultSet rs=DButil.FindSQL(sql, obj);
 try {
 while(rs.next())
 {
 Student student=new Student(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getInt(4));
 students.add(student);
 }
 } catch (SQLException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 return students;
 }

对于业务逻辑层:

Server:

public int getTotalCount()
 {
 return studentdao.getTotalCount();
 }
 
 public List<Student> findStudentByPage(int currentPage,int pageSize)
 {
 return studentdao.findStudentByPage(currentPage, pageSize);
 }

对于视图层的后台代码:

Servlet:

package org.Three.Servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.ThreeLayer.Entity.Page_S;
import org.ThreeLayer.Entity.Student;
import org.ThreeLayer.Server.Student_Server;

public class findStudentByPage extends HttpServlet {
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 Student_Server studentS=new Student_Server();
 // int currentPage=2;
 
 Page_S pag=new Page_S();
 
 String tmp=request.getParameter("currentPage");
 if(tmp==null)//判断是否为第一次进行访问
 {
 tmp="0";
 }
 
 int sum=studentS.getTotalCount();
 pag.setTotalCount(sum);
 
 int currentPage= Integer.parseInt(tmp);
 pag.setCurrentPage(currentPage);
 
 String tmp2=request.getParameter("choose");
 if(tmp2==null)//默认一页3个内容
 {
 tmp2="3";
 }
 
 int pageSize=Integer.parseInt(tmp2);
 pag.setPageSize(pageSize);
 List<Student> students =studentS.findStudentByPage(currentPage, pageSize);
 pag.setStudents(students);
 request.setAttribute("pag", pag);
 request.getRequestDispatcher("index.jsp").forward(request, response);
 System.out.print(students);
 System.out.print(sum);
 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 doGet(request, response);
 }

}

还有一个实体类:Page:

package org.ThreeLayer.Entity;

import java.util.List;

public class Page_S {//为了不出现于重名,改了一下
 private int currentPage;
 private int pageSize;//页面大小,即页面数据个数
 private int totalCount;//总数据
 private int totalPage;//总页数
 private List<Student> students;
 public Page_S() {
 }
 public Page_S(int currentPage, int pageSize, int totalCount, int totalPage, List<Student> students) {
 this.currentPage = currentPage;
 this.pageSize = pageSize;
 this.totalCount = totalCount;
 this.totalPage = totalPage;
 this.students = students;
 }
 public int getCurrentPage() {
 return currentPage;
 }
 public void setCurrentPage(int currentPage) {
 this.currentPage = currentPage;
 }
 public int getPageSize() {
 return pageSize;
 }
 public void setPageSize(int pageSize) {
 this.pageSize = pageSize;
 this.totalPage=this.totalCount%this.pageSize==0?this.totalCount/this.pageSize:this.totalCount/this.pageSize+1;
 }
 public int getTotalCount() {
 return totalCount;
 }
 public void setTotalCount(int totalCount) {
 this.totalCount = totalCount;
 }
 public int getTotalPage() {
 return totalPage;
 }
 public void setTotalPage(int totalPage) {
 this.totalPage = totalPage;
 }
 public List<Student> getStudents() {
 return students;
 }
 public void setStudents(List<Student> students) {
 this.students = students;
 }
}

最后贴上index.jsp:

<%@page import="java.util.List"%>
<%@page import="org.ThreeLayer.Entity.Student"%>
<%@page import="org.ThreeLayer.Entity.Page_S"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息管理</title>
</head>
<body>
 <table border=1px>
 <tr>
 <th>学号</th>
 <th>姓名</th>
 <th>性别</th>
 <th>操作</th>
 </tr>
 <%
 Page_S pagg=(Page_S)request.getAttribute("pag");
 for(Student student:pagg.getStudents())
 {
 %>
 <tr>
 <th><a href="FindStudentById_Servlet?uid=<%=student.getId()%>" ><%=student.getId() %></a></th>
 <th><%=student.getName() %></th>
 <th><%=student.getSex() %></th>
 <th><a href="DeleteStudent_Servlet?uid=<%=student.getId()%>" >删除</a></th>
 </tr>
 <%
 }
 %>
 </table>
 <a href="add.jsp" >增加</a>
 <%
 if(pagg.getCurrentPage()==0)//用户位于首页的时候
 {
 %> 
 <a href="findStudentByPage?currentPage=<%=pagg.getCurrentPage()+1%>" >下一页</a>
 <a href="findStudentByPage?currentPage=<%=pagg.getTotalPage()-1%>" >尾页</a>
 <% 
 }else if(pagg.getCurrentPage()==pagg.getTotalPage()-1)//用户位于尾页的时候
 {
 %>
 <a href="findStudentByPage?currentPage=0" >首页</a>
 <a href="findStudentByPage?currentPage=<%=pagg.getCurrentPage()-1%>" >上一页</a>
 <% 
 }else//用户位于中间页面的时候
 {
 %> <a href="findStudentByPage?currentPage=0" >首页</a>
 <a href="findStudentByPage?currentPage=<%=pagg.getCurrentPage()+1%>" >下一页</a>
 <a href="findStudentByPage?currentPage=<%=pagg.getCurrentPage()-1%>" >上一页</a>
 <a href="findStudentByPage?currentPage=<%=pagg.getTotalPage()-1%>" >尾页</a>
 <%
 }
 %>
 
 <br>
</body>
</html>

看一下效果图:

首先看数据库内容:

然后是首页:

下一页:

最后是尾页:

总的说明一下:

首先对于功能的阐述,第一步计算总的数据量,然后规定默认容量大小为3,最终在jsp代码中加上跟用户进行交互的功能,即让用户选择一页多少内容(由于我写的那个有点bug,就先不贴,等后面自己能完美实现之后,再更新),之后对前端数据进行打包,要思考的是,我们对于这个功能我们所需要的数据有哪些呢?首先,总数据量要吧?然后要存放总的数据内容吧?然后页面大小需要吧?然后用户所在页面的那个页面位置的数要吧?最后一个就是通过总数据量和页面大小计算出来的总页面数也需要吧?所以,一共就需要记录5个属性值,那就打包成一个JavaBean吧,前面代码也贴出来了。最后要提一点,对于如果我第一次进行访问页面的时候,我应该是有一些属性值是为null的,这样是会报空指针异常的,那么就要进行一些小小的处理,哪些呢?比如如果用户第一次进行访问,系统是收不到用户当前所在页面的页面数值的,那么就要判断一下,(此处上代码)如果是第一次进行访问,那么就给与一个默认值0,也就是第一页,那么就处理好了这个小问题了,诸如此类问题还有就是用户在进行选择一页多少内容的时候,也是需要进行赋予一个默认值的,不然也会报空指针。然后对于web.xml文件内容的设置,首页应该设置为实现分页功能的Servlet,因为你每做一次翻页或者首次访问,虽然都是在index.jsp中,但是你需要把每次做完动作之后得到的新的内容进行请求转发,这样才能实现更新,不然程序会报错。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程