java web 簡單的分頁顯示

来源:http://www.cnblogs.com/k-yang/archive/2016/06/23/5612116.html
-Advertisement-
Play Games

題外話:該分頁顯示是用 “表示層-控制層-DAO層-資料庫”的設計思想實現的,有什麼需要改進的地方大家提出來,共同學習進步。 思路:首先得在 DAO 對象中提供分頁查詢的方法,在控制層調用該方法查到指定頁的數據,在表示層通過 EL 表達式和 JSTL 將該頁數據顯示出來。 重點:兩個方法:(1)計算 ...


題外話:該分頁顯示是用 “表示層-控制層-DAO層-資料庫”的設計思想實現的,有什麼需要改進的地方大家提出來,共同學習進步。

思路:首先得在 DAO 對象中提供分頁查詢的方法,在控制層調用該方法查到指定頁的數據,在表示層通過 EL 表達式和 JSTL 將該頁數據顯示出來。

重點:兩個方法:(1)計算總的頁數。 (2)查詢指定頁數據。

 

1.DAO層-資料庫

JDBCUtils 類用於打開和關閉資料庫,核心代碼如下:

 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.PreparedStatement;
 4 import java.sql.ResultSet;
 5 import java.sql.SQLException;
 6 
 7 public class JDBCUtils {
 8     private Connection conn=null;
 9     private PreparedStatement pstmt=null; 
10     
11     
12     /**
13      * connect 連接資料庫
14      * @return
15      */
16     public Connection connect(){
17         String user="root";
18         String password="1234";
19         String driverClass = "com.mysql.jdbc.Driver";
20         String jdbcUrl = "jdbc:mysql://localhost:3306/book";
21         
22         try {
23             Class.forName(driverClass);
24             conn = DriverManager.getConnection(jdbcUrl, user, password);
25         } catch (Exception e) {
26             // TODO Auto-generated catch block
27             e.printStackTrace();
28         }
29         return conn;
30         
31     }
32     
33     /**
34      * close 關閉資料庫
35      * @param conn
36      * @param pstmt
37      * @param resu
38      */
39     public void close(Connection conn,PreparedStatement pstmt,ResultSet result){
40         if(conn != null){
41             try {
42                 conn.close();
43             } catch (SQLException e) {
44                 // TODO Auto-generated catch block
45             }
46         }
47         if(pstmt != null){
48             try {
49                 pstmt.close();
50             } catch (SQLException e) {
51                 // TODO Auto-generated catch block
52                 e.printStackTrace();
53             }
54         }
55         if(result != null){
56             try {
57                 result.close();
58             } catch (SQLException e) {
59                 // TODO Auto-generated catch block
60                 e.printStackTrace();
61             }
62         }
63     }
64 
65 }

UserDao 類中的方法 getPage() 和方法 listUser() 分別用來計算總頁數和查詢指定頁的數據,核心代碼如下:

 1 import java.sql.Connection;
 2 import java.sql.PreparedStatement;
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 import com.db.JDBCUtils;
 9 
10 public class UserDao {
11     /**
12      * 計算總的頁數
13      * @return
14      */
15     public int getPage(){
16         int recordCount=0,t1=0,t2=0;
17         PreparedStatement pstmt=null;
18         ResultSet result=null;
19         JDBCUtils jdbc=new JDBCUtils();
20         Connection conn=jdbc.connect();
21         String sql="select count(*) from books";
22         try {
23             pstmt=conn.prepareStatement(sql);
24             result=pstmt.executeQuery();
25             result.next();
26             recordCount=result.getInt(1);
27             t1=recordCount%5;
28             t2=recordCount/5;
29         } catch (Exception e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         }finally{
33             jdbc.close(conn, pstmt, result);
34         }
35         if(t1 != 0){
36             t2=t2+1;
37         }
38         
39         return t2;
40     }
41     
42     /**
43      * 查詢指定頁的數據
44      * @param pageNo
45      * @return
46      */
47     public List<User> listUser(int pageNo){
48         PreparedStatement pstmt=null;
49         ResultSet result=null;
50         List<User> list=new ArrayList<User>();
51         int pageSize=5;
52         int page=(pageNo-1)*5;
53         JDBCUtils jdbc=new JDBCUtils();
54         Connection conn=jdbc.connect();
55         String sql="select * from books order by id limit ?,?";
56         try {
57             pstmt=conn.prepareStatement(sql);
58             pstmt.setInt(1, page);
59             pstmt.setInt(2, pageSize);
60             result=pstmt.executeQuery();
61             while(result.next()){
62                 User user=new User();
63                 user.setId(result.getInt(1));
64                 user.setName(result.getString(2));
65                 user.setNumber(result.getString(3));
66                 list.add(user);
67                 
68             }
69         } catch (Exception e) {
70             // TODO Auto-generated catch block
71             e.printStackTrace();
72         }finally{
73             jdbc.close(conn, pstmt, result);
74         }
75         return list;
76     }
77 
78 }

User 類用於存儲查詢到的數據,核心代碼如下:

 1 public class User {
 2     private int id;
 3     private String name;
 4     private String number;
 5     public int getId() {
 6         return id;
 7     }
 8     public void setId(int id) {
 9         this.id = id;
10     }
11     public String getName() {
12         return name;
13     }
14     public void setName(String name) {
15         this.name = name;
16     }
17     public String getNumber() {
18         return number;
19     }
20     public void setNumber(String number) {
21         this.number = number;
22     }
23 }

 

2.控制層

ListUser 類內部調用 UserDao 對象查詢數據並指派頁面顯示數據,核心代碼如下:

 1 import java.io.IOException;
 2 import java.io.PrintWriter;
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import com.dao.User;
12 import com.dao.UserDao;
13 
14 public class ListUser extends HttpServlet {
15     public ListUser() {
16         super();
17     }
18 
19     public void destroy() {
20         super.destroy(); // Just puts "destroy" string in log
21         // Put your code here
22     }
23 
24     public void doGet(HttpServletRequest request, HttpServletResponse response)
25             throws ServletException, IOException {
26 
27         doPost(request, response);
28     }
29 
30     public void doPost(HttpServletRequest request, HttpServletResponse response)
31             throws ServletException, IOException {
32 
33         
34         response.setCharacterEncoding("utf-8");
35         int pageNo = 1;
36         UserDao userdao=new UserDao();
37         List<User> lists=new ArrayList<User>();
38         String pageno=request.getParameter("pageNos");
39         if(pageno != null){
40             pageNo=Integer.parseInt(pageno);
41         }
42         lists=userdao.listUser(pageNo);
43         int recordCount=userdao.getPage();
44         request.setAttribute("recordCount", userdao.getPage());
45         request.setAttribute("listss", lists);
46         request.setAttribute("pageNos", pageNo);
47         request.getRequestDispatcher("userlist.jsp").forward(request, response);
48     }
49 
50     public void init() throws ServletException {
51         // Put your code here
52     }
53 
54 }

 

3.表示層

輸出頁面 userlist.jsp ,使用 EL 和 JSTL 輸出查詢結果,核心代碼如下:

 1 <%@ page language="java" import="java.util.*"  pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
 4 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
 5 <%
 6 String path = request.getContextPath();
 7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 8 %>
 9 
10 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
11 <html>
12   <head>
13     <base href="<%=basePath%>">
14     
15     <title>My JSP 'userlist.jsp' starting page</title>
16     
17     <meta http-equiv="pragma" content="no-cache">
18     <meta http-equiv="cache-control" content="no-cache">
19     <meta http-equiv="expires" content="0">    
20     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
21     <meta http-equiv="description" content="This is my page">
22     <!--
23     <link rel="stylesheet" type="text/css" href="styles.css">
24     -->
25 <style type="text/css">
26 th,td{width: 150px;border: 2px solid gray;text-align: center;}
27 body{text-align: center;}
28 a{text-decoration: none;}
29 table {border-collapse: collapse;}
30 </style>
31   </head>
32   
33   <body>
34     <h2 align="center">圖書信息</h2>
35     <table align="center">
36         <tr><td>書號</td><td>書名</td><td>庫存量</td></tr>
37     </table>
38      <table align="center">
39          <c:forEach items="${listss}" var="person">
40          <tr>
41          <td class="hidden-480">${person.id}</td>
42          <td class="hidden-480">${person.name }</td>
43          <td class="hidden-480">${person.number }</td>
44          </tr>
45         </c:forEach>
46     </table>
47      <br>
48 
49      <c:if test="${pageNos>1 }">
50          <a href="ListUser?pageNos=1" >首頁</a>
51          <a href="ListUser?pageNos=${pageNos-1 }">上一頁</a>
52      </c:if>
53      
54       <c:if test="${pageNos <recordCount }">
55          <a href="ListUser?pageNos=${pageNos+1 }">下一頁</a>
56          <a href="ListUser?pageNos=${recordCount }">末頁</a>
57      </c:if>
58 
59     <form action="ListUser">
60     <h4 align="center">共${recordCount}頁 &nbsp
61     <input type="text" value="${pageNos}" name="pageNos" size="1">62     <input type="submit" value="到達">
63     </h4>
64      </form>
65   </body>
66 </html>

 

4.效果圖


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解題思路: 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。 ...
  • 字元串APPAPT中包含了兩個單詞“PAT”,其中第一個PAT是第2位(P),第4位(A),第6位(T);第二個PAT是第3位(P),第4位(A),第6位(T)。 現給定字元串,問一共可以形成多少個PAT? 輸入格式: 輸入只有一行,包含一個字元串,長度不超過105,只包含P、A、T三種字母。 輸出 ...
  • Any 前面已經有兩次提到過:在scala中,Any類是所有類的超類。 Any有兩個子類:AnyVal和AnyRef。對應Java直接類型的scala封裝類,如Int、Double等,AnyVal是它們的基類;對應引用類型,AnyRef是它們的基類。 scala中,所有類的關係可以用下麵這張圖大致描... ...
  • 昨天通過幾個小程式以及Hangout源碼學習了CLI的基本使用,今天就來嘗試翻譯一下CLI的官方使用手冊。 下麵將會通過幾個部分簡單的介紹CLI在應用中的使用場景。 昨天已經聯繫過幾個基本的命令行參數使用場景, "可以參考這裡" 通過使用Apache Commons CLI可以幫助開發者快速構建命令 ...
  • 本文以序列長度20的{ 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};以及頁面4;為例; 結果: ...
  • 題目 輸入某二叉樹的前序遍歷和中序遍歷,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含有重覆的數字。 例如,前序遍歷序列:{1,2,3,7,3,5,6,8},中序遍歷序列:{4,7,2,1,5,3,8,6} 答案 前序遍歷: 前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷 ...
  • view剩餘代碼 ...
  • 2016年6月22日,第一款開源免費的完整支持PHP 7版本的IDE PDT 4終於發佈。原本我是期望Netbeans 8.2的,但PDT 4.0 發佈,就等不及了。 PDT團隊很高興的宣佈PDT新版本 4.0發佈: 這是一個大版本的發佈,它做了巨大的性能改進。修複了100個bug: 完整支持PHP ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...