在Java中如何用Serverlet实现分页查看数据库

 我来答
土人的栉柱ay
推荐于2016-10-31 · TA获得超过115个赞
知道答主
回答量:204
采纳率:33%
帮助的人:41.2万
展开全部
给你一个非缓存分页类的简单例子吧(Page类可以视作javabean):
/**
* @author Administrator
*
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/

import java.util.*;
public class Pager {

private String PageUrl;
private boolean hasNext;
private boolean hasPrevious;
private String previousPage;
private String nextPage;
private int offset;
private int size;
private int length;
private int pagenumber;

public Pager(int offset,int length, int size, String url){
this.offset=offset;
this.length=length;
this.size=size;
int index=url.indexOf("&pager.offset");
if (index>-1){
this.PageUrl=url.substring(0,index);
}else{
this.PageUrl=url;
}
}
public void setoffset(int offset){
this.offset=offset;
}
public void setPagerUrl(String PagerUrl){
this.PageUrl=PagerUrl;
}
public void setsize(int size){
this.size=size;
}
public void setlength(int length){
this.length=length;
}
public int getoffset(){
return this.offset;
}
public String getPageUrl(){
return this.PageUrl;
}
public boolean gethasNext(){
if((offset+1)*length>=size){
hasNext=false;
}else{
hasNext=true;
}
return hasNext;
}
public boolean gethasPrevious(){
if(offset>=1){
this.hasPrevious=true;
}else{
this.hasPrevious=false;
}
return hasPrevious;
}
public String getpreviousPage(){
this.previousPage="";
if (this.gethasPrevious()){
this.previousPage=this.PageUrl+"&pager.offset="+(offset-1);
}
return previousPage;
}
public String getnextPage(){
this.nextPage="";
if(this.gethasNext()){
this.nextPage=this.PageUrl+"&pager.offset="+(offset+1);
}
return this.nextPage;
}
public int getpagenumber(){
float temppn=(float)size/(float)length;
pagenumber=new Float(temppn).intValue();
if (temppn>pagenumber){
this.pagenumber++;
}
return this.pagenumber;
}
public static ArrayList FindPageList(int offset,int length,List list){
ArrayList alist=new ArrayList();
for(int i=offset*length; i<(offset*length+length)&&i<list.size();i++){
alist.add(list.get(i));
}
return alist;
}

}
具体使用:
1、在servlet初始化这个page
List list=DataUtil.getSpecifiedList();//得到整个数据列表

int offset=0;//便宜量
int length=10;//每页数据记录数
String pageOffset=request.getParameter("pager.offset");
if(pageOffset==null||pageOffset.equals("")){
offset=0;
}else{
offset=Integer.parseInt(pageOffset);
}

String Url=request.getRequestURL().toString()+"?"+request.getQueryString();
Pager pager=new Pager(offset,length,list.size(),Url);
List RsList=Pager.FindPageList(offset,length,list);

request.setAttribute("Pager",pager);
request.setAttribute("List",RsList);

RequestDispatcher dispatcher= request.getRequestDispatcher("/UI/someModule/list_display.jsp");
dispatcher.forward(request,response);

2、具体jsp中得到分页结果,并显示,并附页面跳转部分:
页面中得到分页结果
<%
List RpList=(List)request.getAttribute("List");
Pager pager=(Pager)request.getAttribute("Pager");
%>
<%--用for循环把RpList显示--%>
<!--页面跳转代码,这只是个形式,简化和改变方式的余地很大-->
<form name="pageForm"><%if(pager.gethasPrevious()){%><a href="<%= pager.getpreviousPage()%>">prev</a>
<%}%>
<%if( pager.gethasNext()){%><a href="<%=pager.getnextPage()%>">next</a><%}%><%if(pager.getpagenumber()>1) {%>第<select name="pager" onchange="window.location='<%=pager.getPageUrl()%>&pager.offset='+document.pageForm.pager.selectedIndex;"><%for(int i=0;i<pager.getpagenumber();i++){%><option value=<%=i%> <%if(pager.getoffset()==i){ %>selected<%}%>><%=(i+1)%></option><%}%></select>页<%}%> 共<%=pager.getpagenumber()%>页</form>
ps:1、2两部分可以都放在页面类,不过你好像要MVC,所以给你这个代码。
sujunj2005
2011-02-10
知道答主
回答量:45
采纳率:0%
帮助的人:0
展开全部
serverlet跟分页关系不大吧= =
想得到可以啊,看查询语句怎么写的了。最好在查询语句中使用分页查询,页面上做一下获取页数什么的处理。全部查询在serverlet中直接截取的话,如果是不上线的系统随意弄。如果是需要上线的项目最好别这样,服务器内存会抗议的。分页查询的话如果用的是ssh框架集成,悲剧了,spring提供的hibernatetenple(怎么拼忘记了)没有分页方法,需要通过回调函数回调到hibernate中使用分页查询。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ajlija
2011-02-10 · TA获得超过939个赞
知道大有可为答主
回答量:1118
采纳率:0%
帮助的人:1073万
展开全部
我有C#的要不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式