本文通過兩個方法:(1)計算總的頁數。 (2)查詢指定頁數據,實現簡單的分頁效果。
思路:首先得在DAO 對像中提供分頁查詢的方法,在控制層調用該方法查到指定頁的數據,在表示層通過EL 表達式和JSTL 將該頁數據顯示出來。
先給大家展示下效果圖:
題外話:該分頁顯示是用“表示層-控制層-DAO層-數據庫”的設計思想實現的,有什麼需要改進的地方大家提出來,共同學習進步。廢話不多說了,開始進入主題,詳細步驟如下所示:
1.DAO層-數據庫
JDBCUtils 類用於打開和關閉數據庫,核心代碼如下:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class JDBCUtils {private Connection conn=null;private PreparedStatement pstmt=null; /*** connect 連接數據庫* @return*/public Connection connect(){String user="root";String password="1234";String driverClass = "com.mysql.jdbc.Driver";String jdbcUrl = "jdbc:mysql://localhost:3306/book";try {Class.forName(driverClass);conn = DriverManager.getConnection(jdbcUrl, user, password);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}/*** close 關閉數據庫* @param conn* @param pstmt* @param resu*/public void close(Connection conn,PreparedStatement pstmt,ResultSet result){if(conn != null){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch block}}if(pstmt != null){try {pstmt.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(result != null){try {result.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}UserDao 類中的方法getPage() 和方法listUser() 分別用來計算總頁數和查詢指定頁的數據,核心代碼如下:
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 com.db.JDBCUtils;public class UserDao {/*** 計算總的頁數* @return*/public int getPage(){int recordCount=0,t1=0,t2=0;PreparedStatement pstmt=null;ResultSet result=null;JDBCUtils jdbc=new JDBCUtils();Connection conn=jdbc.connect();String sql="select count(*) from books";try {pstmt=conn.prepareStatement(sql);result=pstmt.executeQuery();result.next();recordCount=result.getInt(1);t1=recordCount%5;t2=recordCount/5;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{jdbc.close(conn, pstmt, result);}if(t1 != 0){t2=t2+1;}return t2;}/*** 查詢指定頁的數據* @param pageNo* @return*/public List<User> listUser(int pageNo){PreparedStatement pstmt=null;ResultSet result=null;List<User> list=new ArrayList<User>();int pageSize=5;int page=(pageNo-1)*5;JDBCUtils jdbc=new JDBCUtils();Connection conn=jdbc.connect();String sql="select * from books order by id limit ?,?";try {pstmt=conn.prepareStatement(sql);pstmt.setInt(1, page);pstmt.setInt(2, pageSize);result=pstmt.executeQuery();while(result.next()){User user=new User();user.setId(result.getInt(1));user.setName(result.getString(2));user.setNumber(result.getString(3));list.add(user);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{jdbc.close(conn, pstmt, result);}return list;}}User 類用於存儲查詢到的數據,核心代碼如下:
public class User {private int id;private String name;private String number;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}} 2.控制層
ListUser 類內部調用UserDao 對象查詢數據並指派頁面顯示數據,核心代碼如下:
import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.dao.User;import com.dao.UserDao;public class ListUser extends HttpServlet {public ListUser() {super();}public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("utf-8");int pageNo = 1;UserDao userdao=new UserDao();List<User> lists=new ArrayList<User>();String pageno=request.getParameter("pageNos");if(pageno != null){pageNo=Integer.parseInt(pageno);}lists=userdao.listUser(pageNo);int recordCount=userdao.getPage();request.setAttribute("recordCount", userdao.getPage());request.setAttribute("listss", lists);request.setAttribute("pageNos", pageNo);request.getRequestDispatcher("userlist.jsp").forward(request, response);}public void init() throws ServletException {// Put your code here}} 3.表示層
輸出頁面userlist.jsp ,使用EL 和JSTL 輸出查詢結果,核心代碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%><%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 'userlist.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">--><style type="text/css">th,td{width: 150px;border: 2px solid gray;text-align: center;}body{text-align: center;}a{text-decoration: none;}table {border-collapse: collapse;}</style></head><body><h2 align="center">圖書信息</h2><table align="center"><tr><td>書號</td><td>書名</td><td>庫存量</td></tr></table><table align="center"><c:forEach items="${listss}" var="person"><tr><td>${person.id}</td><td>${person.name }</td><td>${person.number }</td></tr></c:forEach></table><br><c:if test="${pageNos>1 }"><a href="ListUser?pageNos=1" >首頁</a><a href="ListUser?pageNos=${pageNos-1 }">上一頁</a></c:if><c:if test="${pageNos <recordCount }"><a href="ListUser?pageNos=${pageNos+1 }">下一頁</a><a href="ListUser?pageNos=${recordCount }">末頁</a></c:if><form action="ListUser"><h4 align="center">共${recordCount}頁 <input type="text" value="${pageNos}" name="pageNos" size="1">頁<input type="submit" value="到達"></h4></form></body></html>以上所述是小編給大家介紹的Java Web 簡單的分頁顯示實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!