日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

javaweb实现分页(二)

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javaweb实现分页(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:我們都知道,實現分頁需要三個步驟。第一,確定頁大小(每頁顯示的數據量)。第二,計算顯示的總頁數。第三,寫分頁的sql語句。這三步已經在昨天的推文中詳細說明,需要的可以點擊這里快速瀏覽:javaweb實現分頁(一)

開發環境:
Myeclipse 10.5,Mysql 5.5,Tomcat 7.0,JDK 1.7,Chrome瀏覽器

數據庫和表結構:

下面是表中的測試數據,需要說明的是saddress這一列,本來是當做地址的,現在有其他的需求,就當成了角色使用,但是并不影響分頁。

Javaweb代碼:
Java代碼是以分層開發的思想來實現的,其中有實體類:Student,Dao類和接口:BaseDaoNew,IStudentDao,Dao層實現類StudentDaoImpl:Service接口和實現類IStudentService,StudentService以及最后的工具類PageUtils

代碼如下:
實體類:Student

package org.entity;/*** * @author 24519* 學生的實體類**/ public class Student {private int sid;private String sname;private String sphone;private String spass;private String saddress;private int sage;//封裝public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getSphone() {return sphone;}public void setSphone(String sphone) {this.sphone = sphone;}public String getSpass() {return spass;}public void setSpass(String spass) {this.spass = spass;}public String getSaddress() {return saddress;}public void setSaddress(String saddress) {this.saddress = saddress;}public int getSage() {return sage;}public void setSage(int sage) {this.sage = sage;}}

BaseDaoNew:

package org.dao;import java.sql.*; import java.util.List;import com.sun.org.glassfish.external.statistics.annotations.Reset;/*** * @author 24519* 連接數據庫的工作類**/ public class BaseDaoNew {private Connection conn = null;private PreparedStatement pre;private ResultSet rs;//連接數據庫public Connection getConn(){try{//加載驅動Class.forName("com.mysql.jdbc.Driver");//數據庫連接字符串String url= "jdbc:mysql://localhost:3306/schooldb?user=root&password=root";//連接數據庫conn = DriverManager.getConnection(url);}catch(Exception ex){ex.printStackTrace();}return conn;}//增刪改public int ExecuteUpdate(String sql,List params) throws SQLException{int rel = 0;conn = getConn();pre = conn.prepareStatement(sql);if(params!=null){for(int i = 0;i<params.size();i++){pre.setObject(i+1, params.get(i));}}rel = pre.executeUpdate();return rel;}//查詢public ResultSet ExecuteQuerty(String sql,List params) throws SQLException{conn = getConn();pre = conn.prepareStatement(sql);if(params!=null){for(int i = 0;i<params.size();i++){pre.setObject(i+1, params.get(i));}}return pre.executeQuery();}//關閉連接public void closeConn(Connection conn,PreparedStatement pre,ResultSet rs){try {if(rs!=null){rs.close();}if(pre!=null){pre.close();}if(conn!=null){conn.close();}} catch (SQLException e) {e.printStackTrace();}}}

IStudentDao:

package org.dao;import java.util.List;import org.entity.Student;//學生信息的接口 public interface IStudentDao {//增加學生信息public int addStudent(Student stu);//修改學生信息public int updateStudent(Student stu);//刪除學生信息public int delStudent(int sid);//根據編號查詢學生信息public Student findStudentById(int sid);//查詢全部學生信息public List<Student> findStudentAll();//登錄public Student login(String name,String pass);//總記錄數public int findAllStudentCount();//分頁查詢public List<Student> findStudentByPage(int currIndex,int pageSize); }

StudentDaoImpl:

package org.dao.impl;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 org.dao.BaseDao; import org.dao.BaseDaoNew; import org.dao.IStudentDao; import org.entity.Student;import com.sun.xml.internal.ws.Closeable;/*** * @author 24519* 學生信息的實現類**/ public class StudentDaoImpl implements IStudentDao {BaseDao base = new BaseDao();private Connection conn = base.getConn();PreparedStatement pre = null;ResultSet rs = null;@Overridepublic int addStudent(Student stu) {int rel = 0;String sql = "insert into Student values(?,?,?,?,?,?);";try {List<Object> params = new ArrayList<Object>();params.add(stu.getSid());params.add(stu.getSname());params.add(stu.getSphone());params.add(stu.getSpass());params.add(stu.getSaddress());params.add(stu.getSage());rel = base.ExecuteUpdate(sql, params);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return rel;}@Overridepublic int updateStudent(Student stu) {String sql = "update student set sname = ?," +"sphone = ?,spass=?,saddress=?,sage=? where sid = ?";int rel = 0;try {List<Object> params = new ArrayList<Object>();params.add(stu.getSname());params.add(stu.getSphone());params.add(stu.getSpass());params.add(stu.getSaddress());params.add(stu.getSage());params.add(stu.getSid());rel = base.ExecuteUpdate(sql, params);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return rel;}@Overridepublic int delStudent(int sid) {String sql = "delete from Student where sid = ?";int rel = 0;try {List<Object> params = new ArrayList<Object>();params.add(sid);rel = base.ExecuteUpdate(sql, params);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return rel;}@Overridepublic Student findStudentById(int sid) {Student student = new Student();String sql = "select * from student where sid = ?";try {List<Object> params = new ArrayList<Object>();params.add(sid);rs = base.ExecuteQuery(sql, params);while(rs.next()){student.setSid(rs.getInt(1));student.setSname(rs.getString(2));student.setSphone(rs.getString(3));student.setSpass(rs.getString(4));student.setSaddress(rs.getString("saddress"));student.setSage(rs.getInt(6));}} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return student;}@Overridepublic List<Student> findStudentAll() {List<Student> stus = new ArrayList<Student>();String sql = "select * from Student";try {rs = base.ExecuteQuery(sql, null);while(rs.next()){Student student = new Student();student.setSid(rs.getInt(1));student.setSname(rs.getString(2));student.setSphone(rs.getString(3));student.setSpass(rs.getString(4));student.setSaddress(rs.getString(5));student.setSage(rs.getInt(6));stus.add(student);//將信息放入集合中}} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return stus;}//登陸@Overridepublic Student login(String name, String pass) {Student student = new Student();String sql = "select * from student where sname = ? and spass = ?;";try {List<Object> params = new ArrayList<Object>();params.add(name);params.add(pass);rs = base.ExecuteQuery(sql, params);while(rs.next()){student.setSid(rs.getInt(1));student.setSname(rs.getString(2));student.setSphone(rs.getString(3));student.setSpass(rs.getString(4));student.setSaddress(rs.getString(5));student.setSage(rs.getInt(6));}} catch (SQLException e) {e.printStackTrace();}return student;}//查詢總記錄數@Overridepublic int findAllStudentCount() {String sql = "select count(*) from student";int count = 0;try {rs = base.ExecuteQuery(sql, null);rs.next();count = rs.getInt(1);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return count;}//分頁查詢@Overridepublic List<Student> findStudentByPage(int currIndex, int pageSize) {String sql = "select * from student limit ? ,?";int one = (currIndex-1)*pageSize;List<Object> params = new ArrayList<Object>();params.add(one);params.add(pageSize);List<Student> sList = new ArrayList<Student>();try {rs = base.ExecuteQuery(sql, params);while(rs.next()){Student stu = new Student();stu.setSid(rs.getInt(1));stu.setSname(rs.getString(2));stu.setSphone(rs.getString(3));stu.setSpass(rs.getString(4));stu.setSaddress(rs.getString(5));stu.setSage(rs.getInt(6));sList.add(stu);}} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return sList;}}

IStudentService:

package org.service;import java.util.List;import org.entity.Student;public interface IStudentService {//增加學生信息public int addStudent(Student stu);//修改學生信息public int updateStudent(Student stu);//刪除學生信息public int delStudent(int sid);//根據編號查詢學生信息public Student findStudentById(int sid);//查詢全部學生信息public List<Student> findStudentAll();//登錄public Student login(String name,String pass);//計算總記錄數public int findAllStudentCount();//分頁查詢public List<Student> findStudentByPage(int currIndex,int pageSize);}

StudentService:

package org.service.impl;import java.util.List;import org.dao.IStudentDao; import org.dao.impl.StudentDaoImpl; import org.entity.Student; import org.service.IStudentService;public class StudentServiceImpl implements IStudentService {//創建Dao層的對象private IStudentDao sDao = new StudentDaoImpl();@Overridepublic int addStudent(Student stu) {return sDao.addStudent(stu);}@Overridepublic int updateStudent(Student stu) {return sDao.updateStudent(stu);}@Overridepublic int delStudent(int sid) {return sDao.delStudent(sid);}@Overridepublic Student findStudentById(int sid) {return sDao.findStudentById(sid);}@Overridepublic List<Student> findStudentAll() {return sDao.findStudentAll();}@Overridepublic Student login(String name, String pass) {return sDao.login(name, pass);}@Overridepublic int findAllStudentCount() {return sDao.findAllStudentCount();}//分頁查詢@Overridepublic List<Student> findStudentByPage(int currIndex, int pageSize) {return sDao.findStudentByPage(currIndex, pageSize);}}

PageUtils:

package org.utils;import java.util.List;import org.entity.Student;/*** * @author 24519* 分頁的工具類**/ public class PageUtils {//頁大小(每頁顯示多少條記錄)private int pageSize;//當前頁private int currIndex;//總記錄數private int totalCount;//總頁數private int totalPage;//每頁顯示的數據List<Student> sList;public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCurrIndex() {return currIndex;}//設置當前頁public void setCurrIndex(int currIndex) {//判斷當前頁是否小于0,如果是,則默認第一頁if(currIndex<=0){this.currIndex = 1;}else{this.currIndex = currIndex;}}public int getTotalCount() {return totalCount;}//計算總頁數public void setTotalCount(int totalCount) {this.totalCount = totalCount;int pages = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;totalPage = pages;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public List<Student> getsList() {return sList;}public void setsList(List<Student> sList) {this.sList = sList;}}

代碼解析:我們可以看到,在IStudentDao中,除了有增刪改和登錄的接口外,還有兩個接口,一個是查詢總記錄數,另一個為分頁查詢數據.

//總記錄數public int findAllStudentCount();//分頁查詢public List<Student> findStudentByPage(int currIndex,int pageSize);

總記錄數的作用就是對總頁數進行計算,公式為,總頁數=總記錄數%頁大小==0?總記錄數/頁大小:總記錄數/頁大小+1

分頁查詢的數據,由于是多條,即返回List集合,每頁顯示5條數據,那我們就查詢5條,即參數pageSize的值為5.currIndex的作用是用來記錄當前頁。

實現類對于這兩個接口的關鍵代碼如下:

//查詢總記錄數@Overridepublic int findAllStudentCount() {String sql = "select count(*) from student";int count = 0;try {rs = base.ExecuteQuery(sql, null);rs.next();count = rs.getInt(1);} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return count;}//分頁查詢@Overridepublic List<Student> findStudentByPage(int currIndex, int pageSize) {String sql = "select * from student limit ? ,?";int one = (currIndex-1)*pageSize;List<Object> params = new ArrayList<Object>();params.add(one);params.add(pageSize);List<Student> sList = new ArrayList<Student>();try {rs = base.ExecuteQuery(sql, params);while(rs.next()){Student stu = new Student();stu.setSid(rs.getInt(1));stu.setSname(rs.getString(2));stu.setSphone(rs.getString(3));stu.setSpass(rs.getString(4));stu.setSaddress(rs.getString(5));stu.setSage(rs.getInt(6));sList.add(stu);}} catch (SQLException e) {e.printStackTrace();}finally{base.closeConn(conn, pre, rs);}return sList;}

PageUtils類的我們需要注意,在設置當前頁currIndex的值時,要對齊進行判斷,因為當前頁永遠永遠的不可能小于0 或者大于總頁數,設置的關鍵代碼如下:

//設置當前頁public void setCurrIndex(int currIndex) {//判斷當前頁是否小于0,如果是,則默認第一頁if(currIndex<=0){this.currIndex = 1;}else{this.currIndex = currIndex;}}

設置總記錄數的關鍵代碼如下:順便對總頁數進行計算

//計算總頁數public void setTotalCount(int totalCount) {this.totalCount = totalCount;int pages = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;totalPage = pages;}

接下來就可以在表現層進行分頁,我們在進分頁查詢的頁面之前,先進doPage.jsp對數據進行處理,將所有需要用到的分頁數據全部封裝至PageUtils類中,完整實現代碼如下:各個關鍵步驟均有注釋

<%@page import="org.entity.Student"%> <%@page import="org.service.impl.StudentServiceImpl"%> <%@page import="org.service.IStudentService"%> <%@page import="org.utils.PageUtils"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%//Student stu = (Student) request.getAttribute("student");//判斷是否是管理員//if (stu.getSaddress().equals("管理員")) {//獲取當前頁,//如果是空,默認是1String curr = request.getParameter("currIndex");if (curr == null) {curr = "1";}Integer currIndex = Integer.parseInt(curr);PageUtils p = new PageUtils();p.setPageSize(5);//計算總記錄數IStudentService s = new StudentServiceImpl();//從數據庫中查詢總記錄數p.setTotalCount(s.findAllStudentCount());//如果當前頁大于等于總頁數,那當前頁就是總頁數if (currIndex >= p.getTotalPage()) {currIndex = p.getTotalPage();} else if (currIndex <= 0) {//如果當前頁小于等于0,則當前頁等于1currIndex = 1;}p.setCurrIndex(currIndex);//從數據庫中查詢每頁顯示的數據放在集合中List<Student> sList = s.findStudentByPage(currIndex, 5);p.setsList(sList);//將p對象放在request作用域中,在請求的頁面中獲取request.setAttribute("p", p);//跳轉到分頁的頁面request.getRequestDispatcher("findStudentPage.jsp").forward(request, response);//} else {//普通員工//跳轉到查詢自己信息的頁面/* request.setAttribute("stu", stu);request.getRequestDispatcher("shouInfo.jsp").forward(request,response); }*/ %>

注意看這一行代碼,當我們將一切處理完之后,通過這行代碼轉發至分頁顯示信息的頁面,
request.getRequestDispatcher(“findStudentPage.jsp”).forward(request, response);

下面就是分頁顯示數據的頁面了:

<%@page import="org.utils.PageUtils"%> <%@page import="org.entity.Student"%> <%@page import="org.service.impl.StudentServiceImpl"%> <%@page import="org.service.IStudentService"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="<%=basePath%>"><title>My JSP 'FindStudentPage.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><%//獲取所有的數據PageUtils p = (PageUtils)request.getAttribute("p");//從工具類中獲取每頁顯示的數據List<Student> sList =p.getsList() ;%><table border="1"><tr><td>編號</td><td>姓名</td><td>電話</td><td>密碼</td><td>地址</td><td>年齡</td></tr><%for(Student stu :sList){%><tr><td><%=stu.getSid() %></td><td><%=stu.getSname() %></td><td><%=stu.getSphone() %></td><td><%=stu.getSpass() %></td><td><%=stu.getSaddress()%></td><td><%=stu.getSage() %></td></tr><%}%> </table><a href="doPage.jsp?currIndex=1">首頁</a><a href="doPage.jsp?currIndex=<%=p.getCurrIndex()-1%>">上一頁</a><%=p.getCurrIndex()%> / <%=p.getTotalPage()%><a href="doPage.jsp?currIndex=<%=p.getCurrIndex()+1%>">下一頁</a><a href="doPage.jsp?currIndex=<%=p.getTotalPage()%>">末頁</a><br/><form action="doPage.jsp" method="post"><input type="number" max="<%=p.getTotalPage() %>" min="1" value="<%=p.getCurrIndex() %>" style="display:inline-block; width:50px" name="currIndex"/><input type="submit" value="跳轉"></form></body> </html>

代碼解析:
先從request中獲取doPage.jsp中放入的數據,然后以表格的形式展示出來。

翻頁解析:
首頁,很簡單,當前頁碼必定是1,所以直接寫currIndex=1即可。
上一頁,假如當前也是2,那么上一頁就是當前也減去1,所以上一頁就是currIndex-1。
下一頁,正好和上一頁相反,即currIndex+1。
尾頁,假如一共有5頁,那么尾頁就是5,即currIndex=5。
當前頁和總頁數由于我們在doPage都放在了PageUtils中,所以直接從PageUtils中獲取即可。

注意我們無論是點擊上一頁還是下一頁,或者首頁尾頁,均是跳轉至doPage.jsp中操作,在doPage.jsp中,直接獲取currIndex的值,然后在調用Service里面的方法進行分頁查詢。

運行效果如下所示:

最后歡迎關注作者公眾號:雄雄的小課堂

總結

以上是生活随笔為你收集整理的javaweb实现分页(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。