cba杈藉畞璧涚▼ :JSP實現分頁效果

cba广东队赛程 www.axwwg.com  更新時間:2020-01-15 15:59:32   作者:佚名   我要評論(0)

本文實例為大家分享了JSP實現分頁的具體代碼,供大家參考,具體內容如下
咱們在瀏覽網頁的時候,當一個頁面的數據不足以展示完全所有的內容,一般都涉及到分頁,下一

本文實例為大家分享了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中,但是你需要把每次做完動作之后得到的新的內容進行請求轉發,這樣才能實現更新,不然程序會報錯。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

  • jsp分頁顯示的實現代碼
  • JSP分頁顯示的實例代碼
  • JSP實現的簡單分頁示例
  • jsp hibernate的分頁代碼
  • JSP自定義分頁標簽TAG全過程
  • jsp+servlet+javabean實現數據分頁方法完整實例
  • JSP通用高大上分頁代碼(超管用)
  • jsp實現頁面分頁功能代碼
  • 一個通用的jsp分頁PageBean
  • 簡單實現JSP分頁顯示效果

相關文章

  • JSP實現分頁效果

    JSP實現分頁效果

    本文實例為大家分享了JSP實現分頁的具體代碼,供大家參考,具體內容如下 咱們在瀏覽網頁的時候,當一個頁面的數據不足以展示完全所有的內容,一般都涉及到分頁,下一
    2020-01-15
  • JS正則(RegExp)判斷文本框中是否包含特殊符號

    JS正則(RegExp)判斷文本框中是否包含特殊符號

    前言 有時,我們希望判斷文本框中用戶輸入的字符是否含有特殊符號(*/#[email protected]),就像用戶注冊時密碼框的填寫。 demo 利用 RegExp 對象,能很優雅的實現以上需求: // e
    2020-01-15
  • UNIX/LINUX SHELL 正則表達式語法詳解附使用方法

    UNIX/LINUX SHELL 正則表達式語法詳解附使用方法

    幾乎所有重要問題都需要從無用數據中過濾出有用數據。了解大量的 UNIX&#63; 命令行實用工具如何使用正則表達式 來去蕪取精。 非常奇怪,直到今天我仍然能重復周六
    2020-01-15
  • jsp filter 過濾器功能與簡單用法示例

    jsp filter 過濾器功能與簡單用法示例

    本文實例講述了jsp filter 過濾器功能與簡單用法。分享給大家供大家參考,具體如下: 過濾器的作用是什么&#63; 過濾器可以動態地攔截請求和響應,以變換或使用包含在
    2020-01-15
  • jsp 實現的簡易mvc模式示例

    jsp 實現的簡易mvc模式示例

    本文實例講述了jsp 實現的簡易mvc模式。分享給大家供大家參考,具體如下: jsp : java servlet page MVC全名是Model View Controller,是模型(model)-視圖(view)-
    2020-01-15
  • 解決正則表示式匹配($regex)引起的一次mongo數據庫cpu占用率高的問題

    解決正則表示式匹配($regex)引起的一次mongo數據庫cpu占用率高的問題

    某一天,監控到mongo數據庫cpu使用率高了很多,查了一下,發現是下面這種語句引起的: db.example_collection.find({ "idField" : { "$regex" : "1234567890123
    2020-01-15
  • 愛站因侵權問題 被迫關閉

    愛站因侵權問題 被迫關閉

    2020年1月9日知名站長工具愛站網出現了“網站維護中,請稍后訪問”,初始很多網友都以為是愛站網臨時升級系統導致的,截止今天(2020年1月12日)還沒有恢復,目前愛站網官方
    2020-01-13
  • es6 for循環中let和var區別詳解

    es6 for循環中let和var區別詳解

    let和var區別: for(var i=0;i<5;i++){ setTimeout(()=>{ console.log(i);//5個5 },100) } console.log(i);//5 console.log('=============') for(let
    2020-01-12
  • python利用JMeter測試Tornado的多線程

    python利用JMeter測試Tornado的多線程

    JMeter的簡介 &#8195;&#8195;JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設計用于Web應用測試,但后來擴展到其他測試領域。
    2020-01-12
  • Java 二分法檢索算法代碼實現詳解

    Java 二分法檢索算法代碼實現詳解

    一,二分法檢索算法介紹 二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設字典中的元素從小到大有序地存放在數組(array)中。是最常用的搜索
    2020-01-12

最新評論