摘? 要:數(shù)據(jù)分頁(yè)是用JSP開(kāi)發(fā)Web應(yīng)用程序時(shí)經(jīng)常要用到的一種技術(shù)。在頁(yè)面上要展示從數(shù)據(jù)庫(kù)中取出的大量數(shù)據(jù)時(shí),就需要對(duì)數(shù)據(jù)進(jìn)行分頁(yè)處理,分頁(yè)處理主要涉及待分頁(yè)的記錄數(shù)據(jù)的獲取、記錄總數(shù)和總頁(yè)數(shù)的計(jì)算、每頁(yè)記錄數(shù)的設(shè)定、當(dāng)前頁(yè)數(shù)據(jù)的存放等,這在不同的開(kāi)發(fā)模式下處理過(guò)程是有區(qū)別的。文章對(duì)在JSP開(kāi)發(fā)環(huán)境中三種不同開(kāi)發(fā)模式下的數(shù)據(jù)分頁(yè)方法進(jìn)行了探討。
關(guān)鍵詞:JSP;開(kāi)發(fā)模式;數(shù)據(jù)分頁(yè)技術(shù)
中圖分類號(hào):TP311? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-4706(2021)20-0033-03
Discussion on Data Paging Technology under JSP Development Environment
PAN Guorong
(Changzhou Liu Guojun Vocational Technology College, Changzhou? 213025, China)
Abstract: Data paging is a technology often used when developing Web applications with JSP. When you want to display a large amount of data taken from the database on the page, you need to page the data. The paging processing mainly involves the acquisition of the record data to be paged, the calculation of the total number of records and total pages, the setting of the number of records per page, the storage of the current page data, etc. the processing process is different under different development modes. This paper discusses the data paging methods under three different development modes in JSP development environment.
Keywords: JSP; development mode; data paging technology
0? 引? 言
JSP技術(shù)是現(xiàn)在常用的一種開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的技術(shù),在開(kāi)發(fā)實(shí)際應(yīng)用程序時(shí),經(jīng)常要將數(shù)據(jù)庫(kù)中大量的數(shù)據(jù)取出后展示在頁(yè)面上,這就需要對(duì)數(shù)據(jù)進(jìn)行分頁(yè)處理,否則頁(yè)面上要顯示的數(shù)據(jù)可能遠(yuǎn)遠(yuǎn)超出一個(gè)頁(yè)面范圍,應(yīng)用程序界面對(duì)用戶來(lái)講就不太友好。本文根據(jù)本人開(kāi)發(fā)的一個(gè)在教學(xué)中已實(shí)際使用的案例-學(xué)生成績(jī)基本信息維護(hù)系統(tǒng)為例,對(duì)基于不同的JSP開(kāi)發(fā)模式下數(shù)據(jù)的分頁(yè)處理方法進(jìn)行分析和論述。
1? 數(shù)據(jù)分頁(yè)處理概述
數(shù)據(jù)分頁(yè)就是將數(shù)據(jù)從后臺(tái)數(shù)據(jù)庫(kù)中查詢出來(lái)之后按用戶需要進(jìn)行分頁(yè)顯示,每一頁(yè)上顯示一定數(shù)量的記錄數(shù)據(jù),使得數(shù)據(jù)的展示更加符合用戶需要,清晰、美觀合理。這時(shí),我們可以用分頁(yè)技術(shù)。下面我們以學(xué)生信息維護(hù)系統(tǒng)中學(xué)生數(shù)據(jù)的分頁(yè)為例進(jìn)行說(shuō)明。程序運(yùn)行時(shí)頁(yè)面中數(shù)據(jù)分頁(yè)情況如圖1所示。
數(shù)據(jù)庫(kù)的設(shè)計(jì)比較簡(jiǎn)單,只要在其中設(shè)計(jì)一張學(xué)生基本信息表即可,表名為studenttb,表結(jié)構(gòu)如表1所示。
在進(jìn)行分頁(yè)處理時(shí),基本方法是先將要分頁(yè)的數(shù)據(jù)從數(shù)據(jù)庫(kù)表中取出,并存放至一個(gè)session范圍內(nèi)的對(duì)象中,然后計(jì)算出總的記錄數(shù),根據(jù)設(shè)定的每頁(yè)記錄數(shù)計(jì)算出總的頁(yè)數(shù),按照要顯示的目標(biāo)頁(yè)的頁(yè)碼計(jì)算出當(dāng)?shù)谝粭l記錄的位置,取出目標(biāo)頁(yè)上的記錄數(shù)據(jù)進(jìn)行顯示,頁(yè)面數(shù)據(jù)行下面的“首頁(yè)”“上一頁(yè)”“下一頁(yè)”“末頁(yè)”超鏈接按具體記錄條數(shù)進(jìn)行顯示或隱藏處理。
2? 三種開(kāi)發(fā)模式下數(shù)據(jù)分頁(yè)的分析、設(shè)計(jì)及實(shí)現(xiàn)
2.1? JSP+JavaBean開(kāi)發(fā)模式
在這種模式下,先編制一個(gè)用于存放學(xué)生信息的JavaBean實(shí)體類,屬性與表studenttb對(duì)應(yīng)。分頁(yè)處理的主要代碼都是寫在一個(gè)頁(yè)面文件studentlistbypage.jsp中的,在頁(yè)面的開(kāi)始處:
//從sStudent獲取要分頁(yè)的數(shù)據(jù),存放至列表對(duì)象中
List sStudent=(List)session.getAttribute(“StudentList”);
int recordCount=0; //記錄總數(shù)
int pageSize=5; //設(shè)定的每頁(yè)記錄數(shù)
int pageCount=0; //總頁(yè)數(shù)
在表格的數(shù)據(jù)行之前,計(jì)算記錄總數(shù)、總頁(yè)數(shù),把記錄指針移指當(dāng)前頁(yè)第一條記錄之前,取出要顯示的目標(biāo)頁(yè)的數(shù)據(jù)顯示在表格數(shù)據(jù)行中:
recordCount=sStudent.size();
if( recordCount % pageSize==0)
pageCount=recordCount / pageSize;
else
pageCount=recordCount/pageSize + 1;
int start=(currentPage-1)*pageSize;
int n=0;
//循環(huán)取出pageSize條記錄
for(int i = start;i < sStudent.size();i++)
{
Student student=(Student)sStudent.get(i);
……
在表格的數(shù)據(jù)行下面形成的Goto及翻頁(yè)的超鏈接:
out.print(“首頁(yè)? “);
out.print(“上一頁(yè)? “);
out.print(“下一頁(yè)? “);
out.print(“末頁(yè)");
2.2? JSP+JavaBean+Servlet開(kāi)發(fā)模式
在這種模式下,可以將存放分頁(yè)的數(shù)據(jù)、當(dāng)前頁(yè)記錄數(shù)據(jù)、記錄總數(shù)、總頁(yè)數(shù)等一些變量的定義單獨(dú)組織在一個(gè)常量類Constants中,重點(diǎn)是編制一個(gè)Servlet類PageServlet,用作控制器。在該類中先根據(jù)傳入的要分頁(yè)的記錄數(shù)據(jù),計(jì)算出記錄總數(shù)、總頁(yè)數(shù),分離出目標(biāo)頁(yè)中的記錄數(shù)據(jù),將這些數(shù)據(jù)保存起來(lái),再轉(zhuǎn)至目標(biāo)頁(yè)面;在頁(yè)面中,只要取出前面保存的數(shù)據(jù),直接用循環(huán)顯示出來(lái)即可。PageServlet.java類的關(guān)鍵代碼如下:
……
public class PageServlet extends HttpServlet
{
//doPost方法
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
{
request.setCharacter Encoding(“utf-8”);
String strCurrentPage = request. getParameter (“currentPage”);
//計(jì)算記錄總數(shù)、總頁(yè)數(shù),分離出目標(biāo)頁(yè)中的記錄數(shù)據(jù)
……
//保存相關(guān)數(shù)據(jù)至session級(jí)變量中
session.setAttribute (Const- ants.PageList, pageList);
session.setAttribute(Const- ants.RecordCount, recordCount);
session.setAttribute(Const- ants.PageCount? ,pageCount);
session.setAttribute(Const- ants.CurrentPage ,currentPage);
response.sendRedirect(“stud- entlistbypage.jsp”);
}
在頁(yè)面文件studentlistbypage.jsp中,取出Servlet類中保存的session范圍內(nèi)各變量的值,將當(dāng)前頁(yè)的數(shù)據(jù)在數(shù)據(jù)行中顯示出來(lái),表格的數(shù)據(jù)行下面形成的Goto及翻頁(yè)的超鏈接:
out.print(“首頁(yè)? “);
out.print(“上一頁(yè)? “);
out.print(“下一頁(yè)? “);
out.print(“末頁(yè)");
2.3? Struts框架模式
在這種模式下,主要是將Servlet類改成自定義動(dòng)作類,用作控制器。自定義動(dòng)作類PageAction的功能與PageServlet功能一致,編制時(shí)只需將PageServlet.java類文件中doPost()方法中的代碼復(fù)制至PageAction.java類文件中的execute()方法中進(jìn)行修改,主要代碼如下:
……
public class PageAction extends Action
{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception
{
String strCurrentPage =request.getParameter (“currentPage”);
……
//保存相差數(shù)據(jù)至session級(jí)變量中
session.setAttribute(Constants.PageList, pageList);
session.setAttribute(Constants.RecordCount, recordCount);
session.setAttribute(Constants.PageCount? ,pageCount);
session.setAttribute(Constants.CurrentPage ,currentPage);
return? ?mapping.findForward(“ListByPage”);
}
}
將第二種模式中的頁(yè)面文件studentlistbypage.jsp修改,將面前面超鏈接中原來(lái)對(duì)Servlet的調(diào)用改成對(duì)自定義動(dòng)作類的調(diào)用:
out.print(“首頁(yè)? “);
out.print(“上一頁(yè)? “);
out.print(“下一頁(yè)? “);
out.print(“末頁(yè)");
3? 結(jié)? 論
在用JSP開(kāi)發(fā)Web應(yīng)用程序時(shí),對(duì)數(shù)據(jù)進(jìn)行分頁(yè)處理是經(jīng)常要用到的一種技術(shù)。本文通過(guò)學(xué)生基本信息數(shù)據(jù)進(jìn)行分頁(yè)處理這樣一個(gè)實(shí)例,分析了在三種不同開(kāi)發(fā)模式下數(shù)據(jù)分頁(yè)處理的方法及步驟,可以很方便地將其移植至其他JSP實(shí)際應(yīng)用中,進(jìn)一步簡(jiǎn)化JSP的開(kāi)發(fā)。
參考文獻(xiàn):
[1] 馬建紅,李占波.JSP應(yīng)用與開(kāi)發(fā)技術(shù) [M].北京:清華大學(xué)出版社,2016.
[2] 張國(guó)權(quán),張凌子.Java Web程序設(shè)計(jì)實(shí)戰(zhàn) [M].上海:上海交通大學(xué)出版社,2017.
[3] 張銀鶴,劉治國(guó),張豪.JSP動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)實(shí)踐教程 [M].北京:清華大學(xué)出版社,2009.
[4] 孫更新,賓晟,周峰.Struts框架結(jié)構(gòu)的Java Web開(kāi)發(fā)技術(shù)基礎(chǔ)與實(shí)踐教程 [M].北京:電子工業(yè)出版社,2008.
[5] 劉德山,金百東.Java程序設(shè)計(jì) [M].北京:科學(xué)出版社,2012.
作者簡(jiǎn)介:潘國(guó)榮(1966—),男,漢族,江蘇溧陽(yáng)人,高級(jí)教師,高級(jí)程序員,本科,主要研究方向:計(jì)算機(jī)軟件應(yīng)用技術(shù)。