如何只依靠Jsp和Servlet實現網站的分頁功能

分析問題

首先,要明確各個部分的數據需求:
在這裏插入圖片描述

Jsp

輸入:總頁碼,該頁的內容

總頁碼:知道了總的頁碼才能打印出對應的跳轉頁面的點擊鏈接。

該頁的內容:…這個當然要知道了

輸出:跳轉頁碼

跳轉頁碼:告訴Servlet你要跳轉到哪一頁,後端才能提供對應的數據。

Servlet

輸入:跳轉頁碼

跳轉頁碼:通過跳轉頁面,執行邏輯層業務,去數據庫中取出對應的內容。

輸出:總頁碼,該頁的內容

總頁碼:讓前端去打印。

該頁的內容:讓前端去打印。

數據庫

輸入:每頁的文章數,跳轉頁碼

每頁的文章數:提取數據

跳轉頁碼:提取數據

輸出:該頁的內容,總文章量

該頁的內容:從後端再傳給前端

總文章量:用來計算總頁碼的

Servlet部分的實現

代碼


		int nowPage = 1;      //當前頁碼默認爲第一頁
		if(request.getParameter("nowPage")!=null)
		{
			nowPage = Integer.valueOf(request.getParameter("nowPage"));
		}      //如果前端傳入了頁碼,那麼就改爲前端傳入的
		int eachRow = 3;    //這裏規定每頁顯示3篇文章
		int totalRow = 0;   //總的文章數
		int totalPage = 0;  //總的頁數 
		
		//得到文章總數
		totalRow = dao.getTotalRow();
		//得到本頁的文章內容
		List<Article> list = dao.getList(nowPage, eachRow);
		
		//文章放入session傳給前端		
		request.getSession().setAttribute("List", list);
		
		//計算總頁碼
		if(totalRow%eachRow==0)   //如果剛好整除,就是那麼多了
		{
			totalPage = totalRow/eachRow;
		}
		else      //如果每頁還單獨多了幾頁,那就多生成一頁
		{
			totalPage = totalRow/eachRow+1;
		}
		
		//把頁碼數傳給前端
		request.getSession().setAttribute("totalPage", totalPage);
		
		//跳轉回到主頁
		response.sendRedirect("View.jsp");
	}

說明

這裏我們需要有四個參數:
nowPage,eachRow,totalRow,totalPage

其中nowPage由前端獲得,結合eachRow到數據庫中進行篩選(後面會講)。而totalRow和totalPage則是基於數據庫獲取,用於計算總的頁碼。

數據庫部分的實現

原理

從上面的代碼裏發現,我們需要從數據庫裏得到總的文章數和當前頁的內容。
所以接下來分別講解這兩個語句的關鍵部分。(JDBC代碼量太大了我就不貼了,只寫sql語句了XD)

得到文章數

SELECT COUNT(*) AS NUM FROM XXX

獲取當前頁的內容

SELECT * FROM ARTICLE ORDER BY DATE DESC LIMIT ?, ?

這個我要好好談下…

爲了獲取指定頁的內容,需要用到Limit
Limit後面有兩個參數,分別表示從X行開始讀取X條數據

很顯然,從X行開始 就是我們要的數據的開始位置,比如,我們現在要看第三頁,(每頁有3條數據),那麼第三頁的第一條消息也就是第7條,是當前頁數-1乘以每頁條數的加一。(在草稿本上畫一下就知道了XD)。

讀取X條數據其實就是我們規定的每頁的條數。

所以,採集者的問號補充應該就是這樣

			st.setInt(1,(nowPage-1)*eachRow);
			st.setInt(2,eachRow);

Jsp部分的實現

代碼

利用JSTL配合EL表達式,前端部分的跳 轉欄的代碼可以簡單的寫成:

<div>	
	<ul>
		<c:forEach begin="1" end="${sessionScope.totalPage }" var = "i" >
				<li>
					<a href="ShowServlet?nowPage=${i}">${i}</a>
				</li>
			</c:forEach>
		</ul>	
	</div>	

說明

簡單解釋一下,首先從後端接受到總頁數(totalPage),然後逐個打印,動態生成對應的超鏈接。其中每個超鏈接會向後端傳遞自己對應的頁數。

就這樣

沒了!

實現效果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章