JavaWeb开发中关于分页的实现

1、关于Java分页实现的流程图

2、在分页的实现中,关键的几个类,以及代码的实现,QueryInfo,QueryResult,PageBean

QueryInfo的代码实现

public class QueryInfo {

    private int currentpage = 1;  //用户当前看的页
    private int pagesize = 5;     //记住用户想看的页面大小
    private int startindex;     //记住用户看的页的数据在数据库的起始位置

    public int getCurrentpage() {
        return currentpage;
    }
    public void setCurrentpage(int currentpage) {
        this.currentpage = currentpage;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }
    public int getStartindex() {
        this.startindex = (this.currentpage-1)*this.pagesize;
        return startindex;
    }
}

QueryResult的代码实现

public class QueryResult {

    private List list;   //记住用户看的页的数据
    private int totalrecord;    //记往总记录数
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public int getTotalrecord() {
        return totalrecord;
    }
    public void setTotalrecord(int totalrecord) {
        this.totalrecord = totalrecord;
    }
}

PageBean的代码实现

public class PageBean {

    private List list;
    private int totalrecord;
    private int pagesize;
    private int totalpage;
    private int currentpage;
    private int previouspage;
    private int nextpage;
    private int[] pagebar;

    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public int getTotalrecord() {
        return totalrecord;
    }
    public void setTotalrecord(int totalrecord) {
        this.totalrecord = totalrecord;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }
    public int getTotalpage() {
        //100   5   20
        //101   5   21
        //99    5   20

        if(this.totalrecord%this.pagesize==0){
            this.totalpage = this.totalrecord/this.pagesize;
        }else{
            this.totalpage = this.totalrecord/this.pagesize+1;
        }

        return totalpage;
    }

    public int getCurrentpage() {
        return currentpage;
    }
    public void setCurrentpage(int currentpage) {
        this.currentpage = currentpage;
    }
    public int getPreviouspage() {
        if(this.currentpage-1<1){
            this.previouspage = 1;
        }else{
            this.previouspage = this.currentpage-1;
        }
        return previouspage;
    }

    public int getNextpage() {
        if(this.currentpage+1>=this.totalpage){
            this.nextpage = this.totalpage;
        }else{
            this.nextpage = this.currentpage +1;
        }
        return nextpage;
    }

    public int[] getPagebar() {
        int startpage;
        int endpage;
        int pagebar[] = null;
        if(this.totalpage<=10){
            pagebar = new int[this.totalpage];
            startpage = 1;
            endpage = this.totalpage;
        }else{
            pagebar = new int[10];
            startpage = this.currentpage - 4;
            endpage = this.currentpage + 5;

            //总页数=30      3    -1
            //总页数=30      29   34   21   30
            if(startpage<1){
                startpage = 1;
                endpage = 10;
            }

            if(endpage>this.totalpage){
                endpage = this.totalpage;
                startpage = this.totalpage - 9;
            }
        }

        int index = 0;
        for(int i=startpage;i<=endpage;i++){
            pagebar[index++] = i;
        }

        this.pagebar = pagebar;
        return this.pagebar;
        /*int pagebar[] = new int[this.totalpage];
        for(int i=1;i<=this.totalpage;i++){
            pagebar[i-1] = i;
        }
        this.pagebar = pagebar;
        return pagebar;*/
    }

}

Student实体类的代码

package cn.itcast.domain;

public class Student {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

3、关于dao层StudentDao,serive层StudentSerive,controller层StudentServlet层的实现

关于dao层StudentDao

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import cn.itcast.domain.QueryResult;
import cn.itcast.domain.Student;
import cn.itcast.utils.JdbcUtils;

public class StudentDao {

    public QueryResult pageQuery(int startindex,int pagesize){

        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;

        QueryResult qr = new QueryResult();
        try{
            conn = JdbcUtils.getConnection();
            String sql = "select * from student limit ?,?";
            st = conn.prepareStatement(sql);

            st.setInt(1, startindex);
            st.setInt(2, pagesize);

            rs = st.executeQuery();

            List list = new ArrayList();
            while(rs.next()){
                Student s = new Student();
                s.setId(rs.getString("id"));
                s.setName(rs.getString("name"));
                list.add(s);
            }
            qr.setList(list);

            sql = "select count(*) from student";
            rs = conn.prepareStatement(sql).executeQuery();
            if(rs.next()){
                qr.setTotalrecord(rs.getInt(1));
            }
            return qr;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }

}

serive层StudentSerive

import cn.itcast.dao.StudentDao;
import cn.itcast.domain.PageBean;
import cn.itcast.domain.QueryInfo;
import cn.itcast.domain.QueryResult;

public class StudentService {

    public PageBean pageQuery(QueryInfo info){

        StudentDao dao = new StudentDao();
        QueryResult qr = dao.pageQuery(info.getStartindex(), info.getPagesize());

        PageBean bean = new PageBean();
        bean.setCurrentpage(info.getCurrentpage());
        bean.setList(qr.getList());
        bean.setPagesize(info.getPagesize());
        bean.setTotalrecord(qr.getTotalrecord());

        return bean;
    }

}

controller层StudentServlet层的实现

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.PageBean;
import cn.itcast.domain.QueryInfo;
import cn.itcast.service.BusinessService;
import cn.itcast.utils.WebUtils;

public class ListStudentServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        QueryInfo info = WebUtils.request2Bean(request, QueryInfo.class);
        BusinessService service = new BusinessService();
        PageBean bean = service.pageQuery(info);
        request.setAttribute("pagebean", bean);
        request.getRequestDispatcher("/liststudent.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

4、用到的工具类JdbcUtils和WebUtils

工具类JdbcUtils

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {

    private static Properties config = new Properties();
    static{
        try {
            config.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
            Class.forName(config.getProperty("driver"));
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(config.getProperty("url"), config.getProperty("username"), config.getProperty("password"));
    }

    public static void release(Connection conn,Statement st,ResultSet rs){

        if(rs!=null){
            try{
                rs.close();   //throw new
            }catch (Exception e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(st!=null){
            try{
                st.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            st = null;
        }
        if(conn!=null){
            try{
                conn.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
}    

db.properties的配置

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/student
username=root
password=root

工具类WebUtils

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

public class WebUtils {

    public static <T> T request2Bean(HttpServletRequest request,Class<T>  beanClass){
        try{
            T bean = beanClass.newInstance();
            //得到request里面所有数据
            Map map = request.getParameterMap();
            //map{name=aa,password=bb,birthday=1990-09-09}  bean(name=aa,password=dd,birthday=Date)

            ConvertUtils.register(new Converter(){

                public Object convert(Class type, Object value) {
                    if(value==null){
                        return null;
                    }
                    String str = (String) value;
                    if(str.trim().equals("")){
                        return null;
                    }

                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        return df.parse(str);
                    } catch (ParseException e) {
                        throw new RuntimeException(e);
                    }
                }
            }, Date.class);
            BeanUtils.populate(bean, map);
            return bean;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static String generateID(){
        return UUID.randomUUID().toString();
    }

}

关于页面的显示,主要利用EL表达式和JSTL来获取数据

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>显示学生分页数据</title>
  </head>

  <body>

      <c:forEach var="s" items="${pagebean.list}">
          ${s.id } ${s.name } <br/>
      </c:forEach>

     <script type="text/javascript">
        function gotopage(currentpage){
            var pagesize = document.getElementById("pagesize").value;
            window.location.href = ‘${pageContext.request.contextPath}/servlet/ListStudentServlet?currentpage=‘ + currentpage + ‘&pagesize=‘ + pagesize;
        }
    </script>

    共[${pagebean.totalrecord }]条记录,
    每页<input type="text" id="pagesize" value="${pagebean.pagesize }" onchange="gotopage(${pagebean.currentpage })" style="width: 30px" maxlength="2">条,
    共[${pagebean.totalpage }]页,
    当前[${pagebean.currentpage }]页
    &nbsp;&nbsp;&nbsp;
    <a href="javascript:void(0)" onclick="gotopage(${pagebean.previouspage })">上一页</a>
        <c:forEach var="pagenum" items="${pagebean.pagebar}">
            <c:if test="${pagenum==pagebean.currentpage}">
                <font color="red">${pagenum }</font>
            </c:if>

            <c:if test="${pagenum!=pagebean.currentpage}">
                <a href="javascript:void(0)" onclick="gotopage(${pagenum })">${pagenum }</a>
            </c:if>
        </c:forEach>
    <a href="javascript:void(0)" onclick="gotopage(${pagebean.nextpage })">下一页</a>
    <input type="text" id="pagenum" style="width: 30px">
    <input type="button" value=" GO " onclick="gotopage(document.getElementById(‘pagenum‘).value)">
  </body>
</html>
时间: 2024-10-09 21:05:09

JavaWeb开发中关于分页的实现的相关文章

JavaWeb开发中form、ajax提交数据Model转化

JavaWeb开发中form.ajax提交数据Model转化 问题 最近学习MongoDB数据库,作为java开发的我,当然需要做个小的web程序来测试一番了.在html中我采取ajax提交方式,因为我要模拟各种类型的数据,基础数据类型.数组.对象等.然而,最终发现了个不同的地方:Form和ajax提交数据,在HttpServletRequest中尽然参数名有所不同. 数据类型 form ajax 基础数据 para=value para=value 数组 para[]={"aaa",

【详细】总结JavaWeb开发中SSH框架开发问题(用心总结,不容错过)

在做JavaWeb的SSH框架开发的时候,遇到过很多的细节问题,这里大概记录下 我使用的IDE是Eclipse(老版本)三大框架:Spring4.Struts2.Hibernate5 1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=&qu

JavaWeb开发中的会话技术[Cookie/Session]

会话 会话:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题: 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自回产生一些数据,程序要想办法为每个用户保存这些资源.电商中的保存用户的购买的商品. 保存会话数据的两种技术 Cookie:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去,这样web资源处

javaWeb开发中entityBean的习惯用法

entity bean的作用是将与数据库交互的过程封装成对象,在servelet编写的过程中,只需要会写java,不必考虑与数据库交互细节. 实体类: 基本与数据库的表相对应,表示一个实在的对象. 例子:User类: 成员变量:私有属性 方法实现的功能:获取属性(可自动生成).修改属性(可自动生成) 1 package entity; 2 public class User { 3 4 //定义private属性. 5 private String username; 6 private Str

JavaWeb开发中采用FreeMarker生成Excel表格

最近做了一个需求,要求导出一个采购合同的Excel表格,这个表格样式比较多.由于是合同,这个Excel表格里面有好多格式要求,比如结尾处签字那部分就有格式要求.这里介绍种采用FreeMarker的api来生成Excel文件的方案 一.方案的对比 针对这个需求我想了2个方案,介绍如下 方案一:先做一个合同的表格模板,然后把变量都填充成类似EL表达式的样子.然后通过poi 相关类把模板读到内存中,把里面的变量的值替换,然后生成下载文件. 方案二:先做一个合同的表格模板,然后转换成xml文件,然后再改

JavaWeb开发中遇到问题汇总

一.基础问题 1.${pageContext.request.contextPath}获取相对路径无效 问题:在jsp中使用${pageContext.request.contextPath}获取相对路径,可是最后路径变为:http://localhost:8080/oneself/$%7BpageContext.request.contextPath%7D/css/reset.css 解决方案:web-app版本过低,idea自带生成web项目版本为2.3.需要2.4以上版本 版本2.3 <!

JavaWEB开发中的/到底代表什么

若/由servlet容器来处理就是web应用根路径,如果是浏览器处理则是web站点根路径.

Hibernate+Spring+Struts2整合开发中的一个分页显示方案(转载)

分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流. 1.DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public interface MemberDao{        //省略了其他的代码        /**     * 分页查询     * @

javaWeb开发小工具---MailUtils及其单元测试

本次介绍的是,在javaWeb开发中,我们不免会遇到发送邮件的需求,比如:用户注册账号,需要激活登录,以及服务器定期向会员发送礼品信息等.所以参考有关资料,写了这个MailUtils工具类. 1.MailUtils的概述 这个MailUtils工具类底层使用了javax.mail包里面的API.所以我们要导入依赖的jar包----mail.jar和activation.jar两个jar包. 一封邮件基本由发件人.收件人.抄送人(可选).标题.正文.附件组成.这里我们要介绍的是邮件的发送. 在这个