JSP 分页

Oracle大记录数分页借助rownum
select * from ( select a.*, rownum num from (select * from
guestbook order by name desc) a where rownum <= 20 )
where num >=10;

Mysql大记录数分页借助rownum
select * from (select * from guestbook ) aa limit 0,10

借助Pager标签实现分页功能
<dependency>
<groupId>jsptags</groupId>
<artifactId>pager-taglib</artifactId>
<version>2.0</version>
</dependency>

使用方法:
1.MysqlPagination.java

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.regex.Pattern;

import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

public class MysqlPagination implements Pagination {
private int pageSize = 3;
private int pageNumber = 1;
private int maxPages;
private int maxElements;
private String sql;
private MysqlUtil db;

public MysqlPagination(String sql) {
this.sql = sql;
init();
}

public MysqlPagination(String sql, int pageSize, int pageNumber) {
this.sql = sql;
this.pageSize = pageSize;
this.pageNumber = pageNumber;
init();
this.setPageNumber(pageNumber);
}

private void init() {
db = MysqlUtil.getInstance();
setMaxElements();
setMaxPages();
}

private void setMaxElements() {
// select * from xxx order by desc
// select count(1) from xxx order by desc

String regex = "select((.)+)from";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
String[] s = p.split(this.sql);
String newSql = "select count(1) as total from " + s[1];

ResultSetHandler handler = new ResultSetHandler() {
public Object handle(ResultSet rs) throws SQLException {
if (rs.next()) {
return new Integer(rs.getInt("total"));
} else {
return null;
}
}
};
this.maxElements = (Integer) db.query(newSql, null, handler);
}

private void setMaxPages() {
if (maxElements != 0 && (maxElements % pageSize == 0)) {
maxPages = maxElements / pageSize;
} else {
maxPages = maxElements / pageSize + 1;
}
}

private String sqlModify(String source,int begin, int size){
System.out.println(begin+", " + size);
StringBuffer target = new StringBuffer(200);
target.append("select * from (");
target.append(sql);
target.append(") aa limit ");
target.append(begin);
target.append(", ");
target.append(size);
return target.toString();
}

private int getEndElement() {
int endElement = pageNumber * pageSize;
if (endElement >= maxElements) {
return maxElements;
} else {
return endElement;
}
}

private int getBeginElement() {
return (pageNumber - 1) * pageSize;
}

@Override
public List<Object> getList() {
String newSql = this.sqlModify(this.sql, this.getBeginElement(), this.pageSize);
return (List) db.query(newSql, null, new MapListHandler());
}

@Override
public int getMaxElements() {
return maxElements;
}

@Override
public int getMaxPages() {
return maxPages;
}

@Override
public int getNext() {
if (pageNumber + 1 >= this.getMaxPages()) {
return getMaxPages();
}
return pageNumber + 1;
}

@Override
public int getPageNumber() {
return pageNumber;
}

@Override
public int getPageSize() {
return pageSize;
}

@Override
public int getPrevious() {
if(pageNumber-1<=1){
return 1;
}else{
return pageNumber-1;
}
}

@Override
public boolean hasNext() {
return pageNumber<this.getMaxPages();
}

@Override
public boolean hasPrevious() {
return pageNumber>1;
}

@Override
public boolean isFirst() {
return pageNumber==1;
}

@Override
public boolean isLast() {
return pageNumber>=this.getMaxPages();
}

@Override
public void setPageNumber(int pageNumber) {
if(pageNumber>maxPages){
this.pageNumber=maxPages;
}else if(pageNumber<1){
this.pageNumber=1;
}else{
this.pageNumber=pageNumber;
}
}

@Override
public void setPageSize(int pageSize) {
this.pageSize=pageSize;
}

// Pagination p = new OraclePagination(sql,20,3);
//List list=p.getList();
}



2. GuestbookDAOJdbc.java

private static final String SELECT_GUESTBOOKS_SQL="select * from guestbook order by id desc";

@Override
public Pagination getGuestbookByPage(int pageSize, int pageNumber) {
Pagination p = new MysqlPagination(SELECT_GUESTBOOKS_SQL,pageSize,pageNumber);
return p;
}



3.GetMessagesServlet.java

public class GetMessagesServlet extends HttpServlet {
private static final long serialVersionUID = 5964428201228635704L;
private int pageSize;

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int pageNumber;
try {
pageNumber = Integer.parseInt(request.getParameter("p"));
} catch (Exception e) {
pageNumber = 1;
}

GuestbookDAO dao = new GuestbookDAOJdbc();
Pagination pager=dao.getGuestbookByPage(pageSize, pageNumber);

request.setAttribute("guestbook.pager", pager);
request.getRequestDispatcher("/getMessages.jsp").forward(request, response);
}

public void init(ServletConfig config)throws ServletException{
super.init(config);
try{
this.pageSize=Integer.parseInt(config.getServletContext().getInitParameter("pageSize"));
}catch(Exception e){
this.pageSize=10;
}
}
}



4.getMessages.jsp

<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>

<pg:pager url="${ctx}/servlet/getMessages" items="${requestScope['guestbook.pager'].maxElements}" maxPageItems="${initParam.pageSize}" maxIndexPages="5">
<pg:index>
<pg:first unless="current">
<a href="${pageUrl}&p=${pageNumber}">首页</a>
</pg:first>
<pg:prev>
<a href="${pageUrl}&p=${pageNumber}">上一页(${pageNumber})</a>
</pg:prev>
<pg:pages>
<a href="${pageUrl}&p=${pageNumber}">${pageNumber}</a>
</pg:pages>
<pg:next>
<a href="${pageUrl}&p=${pageNumber}">下一页(${pageNumber})</a>
</pg:next>
<pg:last unless="current">
<a href="${pageUrl}&p=${pageNumber}">尾页</a>
</pg:last>
</pg:index>
</pg:pager>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值